Giáo trình vi điều khiển pic16f và ngôn ngữ lập trình hi tech c phần 1 (năm 2014)

78 2 0
Giáo trình vi điều khiển pic16f và ngôn ngữ lập trình hi tech c phần 1 (năm 2014)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHĨ HỊ CHÍ MINH Ee ie k a ak ak oe ae fe ote ak ok PGS.TS NGUYEN TRƯỜNG THỊNH — KS NGUYEN TAN NO GIAO TRINH VIĐIÊU KHIỂN PIC16F VÀ NGƠN NGỮ LẬP TRÌNH HI-TECH C (Giáo trình dùng cho sinh viên ngành Cơ điện tỉ) TRUONG CAO DANG KINH TE -KY THUAT TP HỒ CHÍ MINH THƯ VIỆN M ABE NHA XUAT BAN DAI HOC QUOC THANH PHO HO Cui MINH GIA GIÁO TRÌNH VI DIEU KHIEN PIC16F VÀ NGƠN NGỮ LẬP TRÌNH HI-TECH € Nhà xuất ĐHQG-HCM tác giả/đối tác liên kết giữ quyền © Copyright ˆ by VNU-HCM Publishing House anh author/co-partnership All rights reserved TRUONG DAI HQC SU PHAM KY THUAT TPHCM Xuất năm 2014 LOI NOI DAU Môn học “Vi điều khiển ứng dụng” “Thí nghiệm Vi điều khiển ứng dụng” Bộ môn Cơ điện tử Trường Đại học Sư phạm Kỹ thuật TP Hồ Chí Minh đưa vào chương trình giảng dạy từ năm 2001 Sau thời gian giảng dạy, nội dung môn học thường xuyên bổ sung cập nhập với phát triển công nghệ bán dan Tuy nhiên có nhiều nguồn tài liệu khác nhau, mang khôi kiến thức khác nhau, gây khó khăn cho q trình tìm kiếm tài liệu sinh viên, giáo trình “Ƒ điểu khiển PIC1I6F ngơn ngữ lập trình Hi-tech C” soạn thảo nhằm mục đích định hướng sinh viên bắt đầu tiêp cận với lập trình C Vị điều khiển, mà cụ thể vi điều khiển PIC Microchip, vốn sử dụng phổ biến rộng rãi thị trường Việt Nam Nội dung “¡ điểu khiển PJC16F ngơn ngữ lập trình Hi — tech C” giảng dạy cho sinh viên môn Cơ điện tử năm gần đây, đồng thời bổ sung kiến thức nhằm tăng cường khả lập trình điều khiển cho sinh viên, giúp định hướng cho sinh viên tiếp cận với công nghệ chun sâu Ngồi mục đích phục vụ cho sinh viên chuyên ngành Cơ Điện Tử học tập, “V¡ điều khiển PIC16E ngơn ngữ lập trình Hi-tech C” làm tài liệu tham khảo cho sinh viên chuyên ngành thuộc lĩnh vực kỹ thuật khác Điện - Điện tử Tự động hóa Trong trình chuẩn bị soạn thảo tài liệu này, tác giả nhận ' góp ý chuyên gia, sinh viên đồng nghiệp Bộ môn Cơ điện tử, Trường Đại học Sư phạm Kỹ thuật TP Hỗ Chí Minh Tác giả chân thành cám ơn đồng nghiệp, Thầy Cô Khoa Cơ khí Chế tạo máy Trường Đại học Sư phạm Kỹ thuật TP Hồ Chí Minh, sinh viên hỗ trợ tác giả hồn thành tài liệu Vì trình độ thời gian có hạn, tài liệu khơng tránh khỏi sai sót Tác giả mong nhận góp ý nhận xét đơng đảo bạn đọc Mọi thư từ góp ý xin gởi Bộ mơn Cơ điện tử, Khoa Cơ khí Chế tạo máy, Trường Đại học Sư phạm Kỹ thuật TP Hồ Chí Minh, số 01 Võ Văn Ngân, P Linh Chiêu, Q Thủ Đức, TP Hồ Chí Minh Các tác giả MỤC LỤC Chương I: CẤU TRÚC PHÀN CỨNG PIC16E 22 1.1 KIÊN TRÚC Chương II: XUẤT NHẬP I/O PORT re 28 2:1: DỤNG GỤ- THÍ: NGHIỆM:;: 2; HÐM TT O8 1Œ TỊ 28 2:9, CO SO LY THUOVEE sauecsccs ba IL, cis 0,02 sis 0O i 28 2.2.1 Thanh ghi qui định tín hiệu xử lý chân vi điều KẾ cớ ee 75C 28 2.2.2 Chức ghi TRS 222222 EEne .e 30 2.2.3 Chức ghi PORT 2n 30 2.2.4 Những ghi đặc biệt có riêng PORTB 31 2.2.4.1 Thanh ghi hỗ trợ điện trở treo bên 31 2.2.4.2 Ngắt chân RB0 2.2.4.4 Bảng so sánh ngắt INT ngắt on-change 34 2.3 BÀI TẬP THỰC HÀNH DI TT Ai co say Tài : Chương II: ADC MODULE stttereeeee+ 3.1 DỤNG CỤ THÍ NGHIỆM 44 3.2 CƠ SỞ LÝ THUYÉT 3.2.1 Tín hiệu tương tự tín hiệu sỐ eececceeerrrrerrrrre 44 3.2.2 Bộ ADC vi điều khiển PIC16F887 . 46 3.2.2.1 Các chân vi điều khiển có khả xử lý tín hiệu analOg -ccerereereereerterrtrrtritrrtrrrrrrririrrrrrrriiriitre 46 3.2.2.2 Các ghi điều khiển hoạt động chuyển đổi ADC ix 3.2.2.3 Ngắt ADC 3.2.2.4 Các bước khởi tạo chuyển đổi ADC 3.2.3 Làm việc với LCD 16X2 - -¿ -ccstttihirreertrtrrrrrrrrrrrterh 50 3.3 BÀI TẬP THỰC HÀNH -: -:+5c22cttteeenttttrrrrrtrtteeh 53 tac Aubec 58 3.4 BAINBAPATUNGIAT iat cha cidols Oi sah natal Churong IV: TIMER cecssssssssssssssesessssssssnsssnnessessesessennessennnecengenstsnsnanenee non -4.1 DỤNG CỤ THÍ NGHIỆM -Be 402) 000 S@ LÝ THỦ VET seo 4.2.1 Nguyên tắc hoạt động timer 4.2.2 Timer 4.2.2.1 Các ghi khởi tạo timer Ú -+ eseerree 62 4.2.2.2 Công thức định thời timer Ú .- . -+rsertree 63 4.2.2.3 Ngắt tỉmer Ö -ccccccctttirreetierrrrrrrrrrrriiire 63 4.2.2.4 Các bước khởi tạo timer Ú . c+sensetteterree 64 F82020dù i00" 4.2.3.1 Công thức định thời timer l 4.2.3.2.Thanh ghi điều khiển timer1 25 reeeseirrie 22222 seeseeterrrr 222222 2-22: 4.2.3.3 Tỉm€rÏ OT :.:.:-.:.c2 4.2.3.4 Ngắt timer 4.2.3.5 Khởi tạo timer hoạt động với chế độ đếm counter 68 4.2.3.6 Khởi tạo timer hoạt động với chế độ định thời UNO ear E2 he eaten ee erent ie Me eeeee ) 4.2.4.1 Cơng thức tín định thời timer 2s 4.2.4.2 Thanh ghi điều khiển timer co 68 ee 69 609 4.2.4.3 Khởi tạo timer hoạt động với chế độ định thời THỊDn ae nh eye ey nee ane ieee 4.3 BAI TAP THUC HANH 4.4 BÀI TẬP TỰ GIẢI Chuong V: KHOI CCP (CAPTURE-CPMPARE-PWM) 79 5.1 DỤNG CỤ THÍ NGHIỆM -ssnnnnE 79 D25C0/S00/EYY THỤUDXEIP xa on 79 5.2.3.1 Nguyên tắc hoạt động chế độ capture 5.2.3.2 Các bước khởi tạo chế độ capture ss nen S (6400010021421 53/0011 210/05 S0 cm cac TỶ 84 5.2.4.1 Nguyén tat hoat động chế độ 9000019519 00 §4 5.2.4.2 Các bước khởi tạo chế độ G/5/81)021 PS 84 5.2.5 PWM(Pulse-Width Modulated) .cssccssssssesssesssecsssessesseece 85 5.2.5.1 Nguyén tat hoat dong ctia ché dO PWM ceecsscccccecsssseseccee 85 5.2.5.2 Các bước khởi tạo chức 5.3 BAI TAP THUC HANH PWM 85 5.4 BÀI TẬP TỰ GIẢI CHUONG VI: GIAO TIEP NOI TIEP BAT DONG BỘ 93 6.1: DỤNG CỤ THÍ NGIHIỂỆM cu 2D tensesneeood 93 6.2 CƠ SỞ LÝ THUYÉT an ốc 93 6.2.1 Khái niệm giao tiếp nối tiếp bắt đồng - 94 95 6.2.2 Các ghi điều khiển truyền UART - 6.2.3 Các ghi điều khiển nhận UART : 98 101 6.2.4 Cơng thức tính tốc độ baud rate . 6.3 BÀI TẬP THỰC HÀNH 222222hhhhthhthtttrtrrreeee 101 6.4 BÀI TẬP TỰ GIẢI . -+2222222tttnttrtttttrrttrrrrrtrrrre 106 CHUONG VII: MUDULE DIEU KHIỂN TRONG PICI8F4431 ĐỘNG CƠ 7.1 MOTION FEEBACK MODULE (MFM) 7.1.1 Chức Input €aptUTe sztererrrrrrrrrrrtrrrrrtrtre 114 7.1.2 Chức Quarature Encoder Interface (OS) eres 7.1.3 Bộ lộc nhiễu (Noise fiters) . : -+crrtterreerrerrrerrrrte 121 7.2 POWER CONTROL PWM MODULE (PPM) 123 7.2.1 Chế độ hoạt động Free-running -:-::-++-++rrrrrrrreet 7.2.2 Chế độ Single — Shot -ccccsrnieeerrrrrerttrrrrrrrrree 7.2.3 Chế độ hoạt động Continuous Up/Down count 7.2.4 Độ rộng xung PWM 7.2.4.1 Chế độ Edge — Aligned PWM cerre 7.2.4.2 Chế độ Center - Aligned PWM rrrrrree 128 7.2.5 Khéi tao thoi gian nghi cho PWM (Dead — time QENETALOL) seeeeseeesersseeeseseseees 7.3 BÀI TẬP TỰ GIẢI TÀI LIỆU THAM KHÁO c eeeeeeettrttttttetrterrrerrrrre PHU LUG sossssscccsssssssccccsscssssssssccceccsssssssnseececcgccesnsetunanssnnnenseseeseensnants 129 Chương | CÁU TRÚC PHÀN CỨNG PIC16F Sau học xong chương 1, sinh viên có khả sau: khiển a Giải thích hai kiến trúc phổ biến cấu tạo vi điều Von Neumann Harvard b Giải thích cách thực thi cấu trúc từ lệnh c Thiết kế mạch điện cho vi điều khiển d Liệt kê khởi tạo tính đặc biệt vi điều khiển e Phát sửa lỗi chương trình cho vi điều khiển khởi động 1.1 KIÊN TRÚC Mierochip Pic thiết kế dựa kiến trúc Harvard, trúc RISC (Reduced Instruction Set Conputer = May tính với đơn giản hóa) Đây kiến trúc với nhiều cải tiến nâng xử lý giảm thiểu giá thành sản xuất Vậy đặc kiến trúc Havard mang lại hiệu cho PIC, thử hai kiéu RISC kha phé bién la Von Neumann va Harvard 1.1.1 kiến tập lệnh cao hiệu tính so sánh Kiến trúc Von Neumann Cịn gọi kiến trúc Princeton, cách tổ chức nhớ kiểu kiến trúc nhớ chương trình nhớ liệu xem vùng nhớ, dùng chung Bus liệu Thời kỳ đầu kỷ ngun máy tính, nhớ khơng có độ tin cậy hay tạo lỗi hệ thống Chính mà kiểu kiến trúc ưa chuộng, dễ dàng thiết kế, nâng cao độ tin cậy hệ thống dễ dàng thay vùng nhớ bị lỗi kỹ thuật Nhờ lợi mà thời gian kiêu kiến trúc thương mại hóa sản xuất Tuy nhiên có số nhược điểm: hạn chế băng thông, thực nhiều lần lấy liệu cho lệnh, thực song song thao tac Chinh vi sy phô biến kiến trúc Von Neumann mà hầu hết loại vi điều khiển xây dựng quanh cấu trúc này, giá thành nhớ rẻ nhiều độ tin cậy tăng lên nhiều Von Neumann Architecture Hình 1.1: Kiến trúc nhớ kiểu Von Neumann ị 1.1.2 Kiến trúc Harvard Havard có khơng gian nhớ dành cho nhớ liệu chương trình riêng biệt Lợi hiệu kiểu đữ liệu có Bus liệu riêng biệt hoạt động đồng thời phục vụ cho liệu nhớ chương trình: Trong CPU lấy liệu từ nhớ nhớ nhớ chương trình, đọc ghi liệu vùng nhớ liệu Một lợi khác kiến trúc Harvard độ rộng Bus nhớ chương trình Bus liệu khác Khơng phải tất loại vi điều khiển có kiến trúc Harvard điều có lợi này, PIC có Do Bus có độ rộng khác nên độ rộng Bus nhớ chương trình rộng nhớ liệu Với PIC-8bit Bus dự liệu ln 8-bit, nhiên Bus nhớ chương trình có thê rộng hơn, tùy thuộc vào mục đích loại PIC Với PIC 8-bit có loại phân chia thành loại có độ rộng Bus nhớ chương trình 12-bit, 14-bit, va 16bịt Bus nhớ chương trình rộng đưa liệu từ nhớ chương _trình nhiều chu kỳ máy Harvard Architecture Hình 1.2: Kiến trúc nhớ kiéu Von Neumann 10 Wake-up (lfin Sleep mode)(1) TOIF TOIE Interrupt to CPU GIE 'Hình 4.5: Sơ đồ ngắt timer T0IE: Bit cho phép xảy ngắt timer 0, để ngắt timer xảy bit phải TOIF: Co ngắt timer 0, ngắt xảy bít tự động cần phải xóa (=0) bít lập trình 1, GIE: GIE bit cho phép ngắt toàn cục, để ngắt timer xảy bit phải 4.2.2.4 Các bước khởi tạo timer Khối tạo timer hoạt động với chế độ định thời timer TOCS=0; //Clock cấp cho timer Fosc (tần số hoạt động PSA=0; //Bộ chia prescaler sử dụng cho timer PS= ; //Chon tỉ lệ chia Nếu PSA=I1 cua vi diéu khién) dịng bỏ qua /Khởi tạo ngắt có sử dụng INTE=1; INTF=0; GIE=1; Khối tạo timer hoạt động với chế độ đếm counter: //Khởi tạo chân T0CKI ngõ vào TRISA4=1; RA4=1; 64 TOCS=1; // Clock cAp cho timer tir chan TOCKI PSA=0; //B6 chia prescaler dugc str dung cho timer PS= ; dong //Chon tỉ lệ chia.Nếu PSA=lthì bỏ qua /Khởi tạo ngắt có sử dụng INTE=1; INTF=0; GIE=1; 4.2.3 Timer Timer có hai than h ghỉ chứa giá trị đếm, đếm lên đến 65535(2"'%-1) xảy kiện tràn timer, timer thích hợp cho việc đếm xung encoder tốc độ cao, giống timer 0, timer cfing hoạt động với hai chế độ: chế độ định thời chế độ đếm counter T1GINV Set flag bít TMRIIF on Overflow Ï T1OSI[S T1080 f§ T1OSCEN IMR TMR“H | (2) To C2 Comparator Module Timer1 Clock TMRILET Synchronized So ppt T1 OSC T1SYNG iene : Tick Prescaler Synchronize) † ce 1,2,4,8 „2,4, T1CKPS Get › Sleep input T16 [& C20UT Hình 4.6 Sơ đồ khối timer 4.2.3.1 Công thức định thoi timer T1GSS T- [(65536 —(TMR1H * 256+ TMRIL)]* prescaler *4 Fosc Trong đó: — T thời gian định thời timer — TMRIL, TMR1H: ghi chứa giá trị đếm timer 65 ~ Eosc tần số hoạt động vi điều khiển — Prescaler: tỉ lệ chia 4.2.3.2 Thanh ghỉ điều khiển timerl REGISTER 6-1: RAW-0 TIGNVĐ T1CON: TIMER1 CONTROL REGISTER RAN-0 RIW-0 RAW-0 RAV-0 RAO |TMRiGEBI| TICKPSi | TICKPS0 | T1OSCEN [ TIYNG RIW-0 RAW-0 | TMRICS | TMRION bit bit TMRION: Bit cho phép timer! hoat déng đủ) — 1: Cho phép timer (điều kiện cần cho timer hoạt động, chưa — 0: Timer „ hoạt động TMRICS: Bit lya chon clock cho timer — 1:Clock từ bên (tir chan T1CKI) —0:Cloek bên (Fosc/4) T1SYNC: Bit điều khiển lựa chọn đồng clock vào từ bên cua timer > Néu TMRICS =1: — 1: Clock vao tir bén ngoai khéng duge đồng — 0; Cloek vào từ bên đồng > Néu TMRICS =0: — Kh6ng can quan tam bit nay, timer | str dung clock bén TIOSCEN: Bit điều khiển cho phép dao động LP — 1: Dao động LP cho phép cho clock timer — 0: Tat dao dong LP T1CKPS: Bit lwa chon ti lệ chia Prescale Leas 10 =1:4 Ol = 1:2 00 = 1:1 TMRIGE: Bit cho phép céng timer Nếu TMRIONE0: bit không cần quan tâm 66 Nếu TMRION=1: — 1: Sự đếm lên timer1 điều khiển cổng Timer — 0: Timer đếm lên mà không cần quan tâm đến trạng thái công timer ] TIGINV: Bit dao céng timer! — 1: Céng timer! tac d6ng mite cao mức cao) (Timerl hoat động cổng = 0: Céng timer tc động mức thấp (Timer hoạt động mức thấp) : cổng 4.2.3.3 Timer I on Không giống với timer 0, cần khởi tạo số bit thi timer hoạt động Từ sơ đồ ta thây việc bật/tắt timer 1c6 hai dang: — Cho phép timer hoạt động mà khơng cần tác động từ bên ngồi: TMRION=1; TMRIGEEO0; — Cho phép timer hoạt động //Cho phép điện trở treo có tín hiệu logic chân T1G: //Khởi tạo chân T1G ngõ vào ANS13=0; TRISB5=1; RBS=I; TMRION=1; TMRIGE=I; TIGINV= ;//Tuy theo mirc logic chân T16 mức cao hay thấp TIGSS=I; 4.2.3.4 Ngắt timer I Timer ciing cé thé tạo kiện ngắt Xảy tràn timer, bít khởi tạo ngắt timer 1: TMRIIE: Cờ ngắt, bit tự động có kiện tràn timer 67 TMRIIE:Bit cho phép ngắt tràn timer PEIE :Bitcho phép ngắt ngoại vi GIE :Bit cho phép ngắt toàn cục Wake-up (if in Sleep mode)f) Interrupt to CPU Hình 4.7: Sơ dé ngắt timer 4.2.3.5 Khởi tao timer hoat động với chế độ đếm counfer /fKhởi tạo chan T1CKI 1a ngõ vào số TIOSCEN=1; TMRICS=1; TICKPS1= 22: TICKPS0= ; TISYNC=0; //Cho phép timer on //Khởi tạo ngắt có s* Ngồi ra, timer l cịn hoạt động với chế độ timer sử dụng thạch anh ngoài, độc lập với tần số họat động vi điều khiển, thạch anh ngồi ta có thé kết nối với hai chân: OSCI OSC2 khởi tạo tương tự 4.2.3.6 Khởi tạo timer hoạt động với chế độ định thời timer TMRICS=0; TICKPSI= TICKPSO= ; TISYNC=1; //Cho phép timer on //Khéi tao ngắt có 68 4.2.4 Timer Khác với timer timer 1, timer hoạt động chế độ định thời timer, nhiên timer có hai chia giá trị đặt, thời gian định thời linh hoạt hơn, sai số tính tốn TMR2 FOSCJ4 Output Prescaler 1:1, 1:4, 1:16| Reset ‡ Sets Flag bit TMR2IF Postscaler 1:1 to 1:16 T2CKPS TOUTPS Hình 4.8: Sơ đề khối timer Khi có xung clock tần số Fosc/4 qua chia Presc aler vào ghi TMR2, làm ghi TMR2 tăng lên, ghi TMR2 giá trị ghi đặt PR2 có xung clock qua chia Postscaler, đồng thời ghi TMR2 trở vị trí ban đâu, tỉ lệ chia Postscaler chọn 1:1 xảy kiện ngắt timer 4.2.4.1 Công thức tính định thoi timer Te (PR2 ~ TMR2)* Prescaler * Postscaler *4 Fosc Trong ale :Thoi gian dinh thdi timer PR2 :giá trị ghi đặt TMR2' : giá trị bắt đầu đếm ghỉ TMR0 Prescaler : Tỉ lệ chia prescaler Postscaler : Tỉ lệ chia Postscaler Fosc :Tần số hoạt động vi điều khiển 4.2.4.2 Thanh ghỉ điều khiển fimer REGISTER7-1: bit U-0 — T2CON: TIMER2 CONTROL R/W-0 [ T6UTPS3 R/W-0 [ TOUTPS2 RAW-0 | ToOUTPSi REGISTER R/W-0 [ TOUTPS0 RW-0 ] TMR2ON RW-0 | T2CKPSI R/W-0 | T2cKPso bit O 69 T2CKPS: 00: 1:1 01: 1:4 1x: 1:16 Bit lựa chọn tỉ lệ chia Prescaler TMR2ON: Bit cho phép timer hoạt động 0:Không cho phép timer2 hoạt động 1:Cho phép timer hoạt động TOUTPS: Bit lựa chọn tỉ lệ chia Postscaler 0000 = 1:1 Postscaler 0001 0010 0011 0100 = = = = 1:2 1:3 1:4 1:5 Postscaler Postscaler Postscaler Postscaler 0101 = 1:6 Postscaler 0110 = 1:7 Postscaler 0111 = 1:8 Postscaler 1000 1001 1010 1011 1100 1101 1110 1111 = = = = = = = = 1:9 Postscaler 1:10 Postscaler 1:11 Postscaler 1:12 Postscaler 1:13 Postscaler 1:14 Postscaler 1:15 Postscaler 1:16 Postscaler thời timer: 4.2.4.3 Khởi tạo timer hoạt động với chế độ định Postscaler //Tính tốn lựa chọn tỉ lệ chia Prescaler, //Chọn tỉ lệ chia Prescaler TOCKPSIS e.ee +, TICKPSO= 1.463 //Chọn tỉ lệ chia Postscaler TOUMES3= ;T7OUTPS2= - : //Cho phép timer họat động TMR20N=1; //Khởi tao ngat timer có sử dụng: TMR2IE=1; TMR2IF=0; PELE GIE=1; 70 4.3 BÀI TẬP THỰC HÀNH Bài I: Viết chương trình đọc số lần nhấn nút chân T0CKI (RA4) va hién thị kết lên LCD s* Sơ đồ phần cứng: Rig 100K CC ‡$ pee Rar * Bước 1: Tạo project với tên 03_01_ MSSV * Bước 2: Nhập chương trình sau vào máy tính hồn thành vào dấu #include #include — CONFIG(NTIO&WDTDIS& MCLREN &BORDIS& LVPDIS); #include "Icd.h"; void main() { led_initQ; TRISA4= ; RA4= ; /Khởi tạo chân TUCKI ngõ vào TÚCS:= : : : Chọn cloak: cấp cho Timer0 từ chân TUCKI TOSE Sten : PSA = ; //Xung clock khéng qua bé chia ( - ) Chọn cạnh tác động cạnh xuống a ) while(1) { lcd_gotoxy(0,0); 71 printf("\fSo lan nhan nut lan %d",TMROđ); _ elay(100000); } } void putch(char c) { lcd_putc(â); } * Bước 3: Nhấn nút nhấn kết nối với chân T0CKI quan sát kết LCD * Bước 4: Xóa dong ( - ) *Bước 5:Thêm vao dong ( - ) ) đoạn code sau: PSA=0; //Chon bé chia thuộc timer PS2=0; /Chọn tỉ lệ chia PS1=1; PSO=1; * Bước 6: Quan sát kết nhấn nút nhắn * Bước 7: So sánh hai kết trước sau sửa code, giải thích? Nêu chức chia timer 0: Bài 2: Viết chương trình chớp tắt led REI, định thời timer 0, tần số Fose/4 * Bước 1: Tạo project với tên 03_02_ MSSV * Bước 2: Nhập chương trình sau vào máy tính hoàn thành vào dấu #include CONFIGAINTIO&WDTDIS& MCLREN &BORDIS &LVPDIS); 12 _ void main(Q { ANSG= :TRISEI= nà : “Khởi tạo chân RE] tín hiệu số T0CS= ; //Chon xung clock cdp cho timer la từ Fosc/4 ‹ Xung clock sé di qua chia ST ;PS0=:: ; /Tỉ lệ chia 128 /Khởi tạo ngắt cho timer T0IE= ) Cho phép ngắt timer T0IF= : GIE= e2 š while(1); //Reset cờ ngắt #Cho phép ngắt toàn cục ⁄/Lặp vô tận } void interrupt isr() { if(TOIE&TOIF) { REI^=l; //Chuong trinh ngat cho timer0 //Chép tat led TMR0=0;/Khdi tạo giá trị đêm ban đầu cho timer0( ) TOIF=0; //Reset cờ ngắt } } * Bước 3: Biên dịch chương trình, nạp xuống kít thí nghiệm, quan sát trạng thái led * Bước 4: Tăng giá trị TMRO dong ( - ) từ thấp đến cao (0255), biên dịch chương trình nạp xuống kit thí nghiệm, đến lúc mắt khơng cịn nhìn thấy led REI chớp tắt, tính tần số ứng với giá trị ghi TMRO vừa tìm * Bước 5: Sử dụng oscillocope đo tần số vừa tìm so sánh với kết tính tốn, nhận xét Bài 3: Viết chương trình hiển thị đồng hồ lên LCD, sử dụng timer định thời, thạch anh 32.768KHz * Bước 1: Tạo project với tên 03_03_ MSSV * Bước 2: Nhập chương trình sau vào máy tính hồn thành vào dấu #include #include CONFIG(INTIO& WDTDIS &MCLREN &BORDIS &LVPDIS); #include "lcd.h" unsigned char hh,mm,ss,//Khai bdo biến chứa giờ, phút, giây void main() £ lcd_initQ; //Khéi tạo chân ngõ vào thạch anh 32.768KH2 TRISC0=TRISC1=1;RC0=RCIE0; ITIOSGBNN- : /Cho phép timer hoạt động clock TMRICS= : /Clock cấp cho thmer clock TICKPS1=T1CKPSO- ; //Ti lé b6 chia 1:8( -1 -) TISYNC= a.se6 : /Qua khối đồng //Cho phép timer hoạt động không cân tác động bên TMRION= 74 _ TMRIGE= TMRIIE= : TMRIIF= //KhGi tao ngắt timer] DEIES lv _ : bàn : Gil5P= ot //Reset cờ ngắt timer ] /Cho phép ngắt ngoại vi sank : Cho phép ngắt tồn cục while(1); //Lắp vơ tận ` } void putch(char c) //Chuong trinh cho ham printf() { lcd_putc(c); } void interrupt isr() { if(TMRUE&&TMRIIF) /Ngắt tràn timer { sst+; if(ss==60) { ss=0; mm++; if(mm==60) { mm=0; hh++; } } lcd_gotoxy(0,0); printf("\fBay Gio La:\r\n %02d:%02d:%02d",hh,mm,ss); /Khởi tạo giá tri đếm ban dau cho timer! 75 TMRIH=239 TMRIL=255; TMRIIF=0; =2) EU // Il ) } * Bước 3: Nap chương trình xuéng kit thi nghiệm, jumper J 1(XTAL) Quan sát LCD, so sánh kết với đồng hồ thực, nhận xét: Dựa vào công thức định thời timer 1, chứng minh thông số cac dong (1),(2),(3): Bài 4: Viết chương trình sử dụng timer điều khiển led RE1 chớp tắt với chu kì T=0.05s, sử dụng thạch anh 20MH¿z * Bước 1: Tạo project với tên 03_04_ MSSV * Bước 2: Nhập chương trình sau vào máy tính #include #include CONFIG(HS&WDTDIS &MCLREN& &BORDIS &LVPDIS); void main() { //Khởi tạo chân RE] ngõ số ANSG= ;TRISEI= ;REI= T2CKPSI= ;T2CKPSQ= 76 chon tỉ lệ chia //Chon ti lé b6 chia postscaler hop ly ( -1 ) TOUTPS3=0;TOUTPS2=0;TOUTPSI= ;ITOUTPS0= : PR2= ; //Giá trị ghi PR2 ( - ) TMR2= ; //Gia tri bắt đầu đếm timer ( - ) //Cho phép timer hoạt động TMR20N- ; //Khéi tao ngat timer y TMR2IE= /Cho phép ngắt tràn timer TMR2IF= : //Reset cờ ngắt PEIE= -: ; /Cho phép ngắt ngoại vi GIE=:s:.: ; //Cho phép ngat toan cục while(1); void interrupt isr() { if(TMR2IE&&TMRZIF) { RE1^=1; TMR2IF= : Xóa cờ ngắt Timer2 /Khởi tao gid tri bat ddu dém timer2( -4 ) TMR2= : } } qT # Bước 4: Hồn thành vào BÉU NI xng kít thí nghiệm, quan sát led biên dịch chương trình, nạp 4.4 BÀI TẬP TỰ GIẢI Bài 5: Viết chương trình hiển thị tốc độ động lên LCD theo so dé phan cing sau: (Tạo project với tên 03_05_ MSSV) LCD1 LM016L RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/P1A/CCP1 RC3/SCK/SCL EF/C2IN+ RC4/SDI/SDA Nt RCS/SDO RC6/TX/CK RC7/RXDT RDO RD1 2- 78 RD2 RD3 RD4 RDS/P1B RD6/P1C RD7/P1D a T2 | vss VDD VEE 2IN0-

Ngày đăng: 27/07/2023, 08:39