Bài giảng Kỹ thuật vi điều khiển - Lập trình Timer/Counter
Tóm tắt Bài giảng Kỹ thuật vi điều khiển - Lập trình Timer/Counter: ...ock TLx THxTimer clock TFx overflow flag TLx THxTimer clock TFx overflow flag 0 1 2 3 mode TLx THxTimer clock TL0 TF0Timer clock TH0 TF1Fosc/12 Xung & Hoi 17 3 2 1 0 Mode Chế độ định thời chia sẻ (Split timer mode) 11 Chế độ tự động nạp lại 8-bit (auto reload mode) 8-bit auto ...• Bộ định thời 8-bit – Cho phép các giá trị từ 00 đến FFH lưu trong TH0 • Tự động nạp lại (Auto-reloading) • TL0 được tăng lên khi TR0=1 • VD, tạo thời gian trễ với 200 chu kỳ máy (MC) trên timer 0. TLx THx TFx overflow flag reload TF goes high when FF à 0 Timer clock Xung & Hoi 27 1. Ch... – Tần số dao động thạch anh – Giá trị chứa trong các thanh ghi định thời TH & TL • Thời gian trễ là lớn nhất khi TH=TL=0. Nếu vẫn chưa đủ? Xung & Hoi 38 EKhảo sát BT sau và tìm thời gian trễ? (Không tính overhead) MOV TMOD,#10H MOV R3,#200 AGAIN: MOV TL1,#08H MOV TH1,#01H SETB TR1 ...
Xung & Hoi 1 1. Giới thiệu 2. Sơ đồ khối và chân 3. Tổ chức bộ nhớ 4. Các thanh ghi chức năng đặc biệt (SFR) 5. Dao động và hoạt động reset 6. Tập lệnh 7. Các mode định địa chỉ 8. Lập trình IO 9. Tạo trễ 10.Lập trình Timer/Counter 11.Lập trình giao tiếp nối tiếp 12.Lập trình ngắt 13.Lập trình hợp ngữ Xung & Hoi 2 • 8051 có 2 timers/counters: timer/counter 0 & timer/counter 1. Chúng có thể được dùng như: 1. Bộ định thời (Timer) dùng như 1 bộ tạo trễ – Nguồn xung clock chính là dao động thạch anh bên trong 2. Bộ đếm sự kiện (Event Counter) – Đầu vào từ chân bên ngoài để đếm số sự kiện – Có thể dùng đếm số người đi qua cổng, số vòng quay của bánh xe, hay bất kể các sự kiện mà chuyển được sang dạng xung 3. Tạo tốc độ baud (baud rate) cho port nối tiếp của 8051 10-1. Giới thiệu Xung & Hoi 3 Timer • Khởi tạo giá trị ban đầu cho các thanh ghi • Kích hoạt Timer, sau đó 8051 tính lên • Ngõ vào là từ clock nội (machine cycle) • Khi các thanh ghi bằng 0 thì 8051 sẽ set cờ tràn to LCD P1 8051 TL0 TH0 P2Set Timer 0 Xung & Hoi 4 Counter • Đếm số sự kiện: – Chỉ ra số sự kiện trên các thanh ghi – Counter 0: Ngõ vào từ chân bên ngoài T0 (P3.4) – Counter 1: Ngõ vào từ chân bên ngoài T1 (P3.5) T0 to LCD P3.4 P1 a switch TL0 TH0 Xung & Hoi 5 Các thanh ghi dùng truy xuất Timer/Counter • TH0, TL0, TH1, TL1 • TMOD thanh ghi chế độ định thời (Timer mode register) • TCON thanh ghi điều khiển định thời (Timer control register) • 8052 với 3 timers/counters sẽ có thêm các thanh ghi T2CON (Timer 2 control register), TH2 and TL2 89hTimer ModeTMOD 88hTimer ControlTCON 8BhTimer 1 Low ByteTL1 8DhTimer 1 High ByteTH1 8AhTimer 0 Low ByteTL0 8ChTimer 0 High ByteTH0 SFR AddressDescriptionSFR Name Xung & Hoi 6 TH0, TL0, TH1, TL1 (not bit addressable) • Cả timer 0 & timer 1 đều có độ rộng 16 bits – Các thanh ghi này lưu trữ • Giá trị tạo thời gian trễ (time delay) (nếu là timer) • Số sự kiện (number of events) (nếu là counter) – Timer 0: TH0 & TL0 • Timer 0 high byte, timer 0 low byte – Timer 1: TH1 & TL1 • Timer 1 high byte, timer 1 low byte – Mỗi bộ định thời 16-bit có thể được truy cập như 2 thanh ghi 8-bit tách biệt Xung & Hoi 7 D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6 TH0 TL0 D15 D8D9D10D11D12D13D14 D7 D0D1D2D3D4D5D6 TH1 TL1 Timer 0 Timer 1 Xung & Hoi 8 10-2. Thanh ghi chế độ định thời TMOD • Timer mode register: TMOD (not bit addressable) – Thanh ghi 8-bit – Thiết lập chế độ hoạt động cho các bộ định thời: • 4 bits thấp dành cho Timer 0 (Set to 0000 if not used) • 4 bits cao dành cho Timer 1 (Set to 0000 if not used) GATE C/T M1 M0 GATE C/T M1 M0 Timer 1 Timer 0 (MSB) (LSB) Xung & Hoi 9 GATE Bit điều khiển cổng. Khi set lên 1, timer chỉ hoạt động khi chân /INTx ở mức cao và TRx = 1. Khi xóa, timer hoạt động khi TRx = 1 C/T Bit chọn chức năng đếm hoặc định thời: 1: đếm; 0: định thời M1 Chọn mode - bit 1 M0 Chọn mode - bit 0 GATE C/T M1 M0 GATE C/T M1 M0 Timer 1 Timer 0 (MSB) (LSB) Xung & Hoi 10 GATE – GATE=0 • Điều khiển bên trong (Internal control) • Bật hay tắt timer bằng phần mềm • Timer được cho phép khi TR được set – GATE=1 • Điều khiển bên ngoài (External control) • Bật hay tắt timer bằng phần mềm & một nguồn bên ngoài (external source) • Timer được cho phép khi chân /INT ở mức cao & TR được set Xung & Hoi 11 XTAL oscillator ÷ 12 TR0 INT0 Pin Pin 3.2 C/T = 0 Gate T0 Pin Pin 3.4 C/T = 1 Xung & Hoi 12 M1, M0 3 2 1 0 Mode Chế độ định thời chia sẻ (Split timer mode) 11 Chế độ tự động nạp lại 8-bit (auto reload mode) 8-bit auto reload timer/counter; THx lưu trữ giá trị nạp lại cho TLx mỗi khi tràn (overflow) 01 Chế độ định thời 16-bit 8-bit THx + 8-bit TLx10 Chế độ định thời 13-bit 8-bit THx + 5-bit TLx (x= 0 or 1)00 Hoạt độngM0M1 Xung & Hoi 13 Giải đáp: VD: Tìm giá trị TMOD nếu muốn lập trình Timer 0 làm việc ở mode 2 ? Dùng 8051 XTAL cho xung clock, & dùng lệnh để bật hay tắt timer timer 1 timer 0 TMOD= 0000 0010 Timer 1 không dùng Timer 0, mode 2 C/T = 0 à dùng nguồn xung clock (Timer) GATE = 0 à điều khiển bằng phần mềm Xung & Hoi 14 10-3. Thanh ghi điều khiển định thời TCON • Timer control register: TCON – ½ byte cao cho timer/counter, ½ byte thấp cho interrupts • TR (run control bit) – TR0 for Timer/counter 0; TR1 for Timer/counter 1. – TR được set hay xóa bởi phần mềm để bật/tắt timer/counter • TR=0: off (stop) • TR=1: on (start) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Timer 1 Timer0 for Interrupt (MSB) (LSB) Xung & Hoi 15 • TF (timer flag, control flag) – Cờ tràn của bộ định thời – TF0 cho timer/counter 0; TF1 cho timer/counter 1 – Khởi đầu, TF=0 & được set bởi phần cứng khi có tràn – tức TH-TL chuyển đếm về 0000 từ FFFFH • Nếu cho phép ngắt, thì TF=1 sẽ kích khởi ISR – Được xóa bởi phần mềm (hoặc bởi phần cứng khi bộ xi xử lý trỏ đến trình phục vụ ngắt) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 Timer 1 Timer0 for Interrupt (MSB) (LSB) Xung & Hoi 16 10-4. Các chế độ định thời TLx THx TFx overflow flag reload Timer clock TLx THxTimer clock TFx overflow flag TLx THxTimer clock TFx overflow flag 0 1 2 3 mode TLx THxTimer clock TL0 TF0Timer clock TH0 TF1Fosc/12 Xung & Hoi 17 3 2 1 0 Mode Chế độ định thời chia sẻ (Split timer mode) 11 Chế độ tự động nạp lại 8-bit (auto reload mode) 8-bit auto reload timer/counter; THx lưu trữ giá trị nạp lại cho TLx mỗi khi tràn (overflow) 01 Chế độ định thời 16-bit 8-bit THx + 8-bit TLx10 Chế độ định thời 13-bit 8-bit THx + 5-bit TLx (x= 0 or 1)00 Hoạt độngM0M1 Xung & Hoi 18 1. Chọn timer 0 làm việc ở mode 1 (định thời 16-bit) – MOV TMOD,#01H 2. Khởi tạo giá trị ban đầu nạp cho TH0 & TL0. – MOV TH0,#FFH – MOV TL0,#FCH 3. Thoạt đầu nên xóa cờ TF0 về 0 – CLR TF0 4. Bật Timer 0 – SETB TR0 10-4-1. Chế độ định thời 16-bit (mode 1) Xung & Hoi 19 5. Khi có xung clock đến, 8051 bắt đầu đếm lên bằng cách tăng giá trị trong các thanh ghi TH0-TL0 TH0-TL0= FFFCH,FFFDH,FFFEH,FFFFH,0000H TLx THxTimer clock TFx overflow flag FFFC FFFD FFFE FFFF 0000 TF = 0 TF = 0 TF = 0 TF = 0 TF = 1 TH0 TL0Start timer Stop timer TR0=1 TR0=0 TF Theo dõi TF đến khi TF = 1 Xung & Hoi 20 6. Khi TH0-TL0 có sự chuyển số đếm từ FFFFH à 0000 thì 8051 set TF0=1 – TH0-TL0 = FFFEH, FFFFH, 0000H (khi này TF0=1) 7. Theo dõi cờ tràn (TF) – AGAIN: JNB TF0, AGAIN 8. Xóa TR0 để tắt timer 0 – CLR TR0 9. Xóa cớ tràn cho vòng tiếp theo – CLR TF0 Xung & Hoi 21 XTAL oscillator ÷ 12 TRx THx TLx TFx overflow flagTF goes high when FFFF à 0 C/T=0: up C/T=0: down Nguồn xung clock cung cấp cho bộ định thời Timer clockT0 hay T1 pin Mode 1 C/T Xung & Hoi 22 EViết chương trình tạo sóng vuông có thời gian mức cao và thấp bằng nhau trên chân P1.5. Dùng Timer 0 tạo trễ mode 1 ;each loop is a half clock MOV TMOD, #01 ;Timer 0,mode 1(16-bit) HERE: MOV TL0, #0F2H ;Giá trị Timer0 = FFF2H MOV TH0, #0FFH CPL P1.5 ACALL DELAY SJMP HERE 50% 50% whole clock P1.5 Bài toán 10.1. Sóng vuông Xung & Hoi 23 ;tạo trễ dùng timer 0 DELAY: SETB TR0 ;start the timer 0 JNB TF0, $ CLR TR0 ;stop timer 0 CLR TF0 ;clear timer 0 flag RET FFF2 FFF3 FFF4 FFFF 0000 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 0 TF0 = 1 Xung & Hoi 24 Vài điểm cần chú ý trong VD trên: 1. TMOD = 0000 0001 được thực thi 2. FFF2H chuyển vào TH0 – TL0 3. Set và xóa P1.5 trong thời gian mức cao và thấp của xung 4. CTC DELAY dùng Timer được gọi 5. Trong CTC DELAY, bật timer 0 dùng lệnh “SETB TR0” 6. Timer 0 đếm lên mỗi khi có xung clock (cung cấp bởi dao động thạch anh) Timer 0 đếm qua các giá trị: FFF3, FFF4, FFF5, FFF6, FFF7, FFF8, FFF9, FFFA, FFFB, FFFC, FFFFD, FFFE, FFFFH, 0000H à TF0 = 1 và khi này lệnh JNB bị bỏ qua 7. Tắt Timer 0 dùng lệnh “CLR TR0”. CTC DELAY kết thúc, tiến trình được lặp lại. Chú ý, làm việc với mode 1, nên để lặp lại tiến trình, ta phải nhập lại giá trị cho các thanh ghi TH-TL & bật lại Timer. Xung & Hoi 25 10-4-2. Chế độ định thời 13-bit (mode 0) • Mode 0 tương tự mode 1, ngoại trừ nó là 13-bit timer thay vì 16-bit. – 8-bit TH0 + 5-bit TL0 • Bộ đếm vì thế có giá trị từ 0000 đến 1FFF trong các thanh ghi định thời TH0-TL0 – 213-1= 2000H-1=1FFFH • Ta cũng gán các giá trị ban đầu vào TH0-TL0 để thực hiện đếm lên • Khi Timer đạt đến 1FFFH thì nó chuyển về 0000, và TF0 được set TLx THxTimer clock TFx overflow flag Xung & Hoi 26 10-4-3. Chế độ tự nạp lại 8-bit (mode 2) • Bộ định thời 8-bit – Cho phép các giá trị từ 00 đến FFH lưu trong TH0 • Tự động nạp lại (Auto-reloading) • TL0 được tăng lên khi TR0=1 • VD, tạo thời gian trễ với 200 chu kỳ máy (MC) trên timer 0. TLx THx TFx overflow flag reload TF goes high when FF à 0 Timer clock Xung & Hoi 27 1. Chọn mode 2 timer 0 – MOV TMOD,#02H 2. Khởi tạo giá trị đầu trong TH0 – MOV TH0,#38H 3. Xóa cờ TF0=0. – CLR TF0 4. Sau khi TH0 được gán, 8051 copy giá trị này vào TL0 – TL0=TH0=38H 5. Bật Timer – SETB TR0 Xung & Hoi 28 6. 8051 đếm lên TL0 – TL0= 38H, 39H, 3AH,.... 7. Khi TL0 từ FFH à 00 thì 8051 set TF0=1. Bên cạnh đó, TL0 được tự động nạp lại giá trị lưu giữ trong TH0 – TL0= FEH, FFH, 00H (lúc này TF0=1) – 8051 tự động nạp lại TL0=TH0=38H. – Quay lại bước 6 8. CLR TF0 9. CLR TR0 Xung & Hoi 29 TL1 TH1 TF1 overflow flag reload TF goes high when FF à 0 XTAL oscillator ÷ 12 C/T=0: up C/T=0: down Timer clockT0 hay T1 pin C/T TRx Mode 2 Xung & Hoi 30 10-5. Tính toán trễ dùng Timer (a) Dạng hexa (FFFF – YYXX + 1) * 1.085 ms Trong đó YYXX là các giá trị ban đầu của TH, TL tương ứng (b) Dạng thập phân Chuyển các giá trị YYXX của TH, TL sang dạng thập phân NNNNN, à ta có (65536 – NNNNN) * 1.085 ms XTAL = 11.0592 MHz Áp dụng đ/v chế độ định thời 16-bit (mode 1) Xung & Hoi 31 EChương trình sau tạo sóng vuông trên chân P1.5 liên tục dùng timer 1 tạo trễ mode 1. Tìm tần số? (Không bao gồm overhead gây bởi các lệnh trong vòng lặp) MOV TMOD,#10H ;timer 1, mode 1 AGAIN:MOV TL1,#34H ;timer value=7634H MOV TH1,#76H SETB TR1 ;start BACK: JNB TF1,BACK CLR TR1 ;stop CPL P1.5 ;next half clock CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer1 Bài toán 10.2. Sóng vuông, tìm f Xung & Hoi 32 Giải đáp: Với mode 1, các thanh ghi định thời TH, TL phải được khởi động lại sau mỗi lần tràn. FFFFH – 7634H + 1 = 89CCH = 35276 clock count ½ chu kỳ = 35276 × 1.085 ms = 38.274 ms Chu kỳ = 2 × 38.274 ms = 76.548 ms Tần số = 1/ 76.548 ms = 13.064 Hz. Trong các tính toán trên, không bao gồm overhead gây bởi các lệnh trong vòng lặp Xung & Hoi 33 • ETìm KQ các bài toán trên trong trường hợp có tính đến overhead? • EGiải các bài toán trên với chế độ định thời tự nạp lại 8-bit (mode 2)? • EVới phạm vi tần số nào thì không thể dùng chế độ tự nạp lại 8-bit (mode 2), giải thích? Bài toán 10.3. Xung & Hoi 34 10-6. Tìm giá trị các thanh ghi định thời • Giả định biết trước thời gian trễ, XTAL = 11.0592 MHz • Làm sao tính toán các giá trị cần gán cho TH, TL? 1. Chia thời gian trễ cho 1.085 ms. 2. Thực hiện 65536 –n, với n (decimal) từ bước 1 3. Chuyển KQ trong bước 2 sang hex yyxx 4. Set TH = yy và TL = xx. Xung & Hoi 35 EXTAL = 11.0592 MHz, viết chương trình tạo sóng vuông 50 Hz trên chân P2.3 Giải đáp: (a) T = 1 / 50 Hz = 20 ms. (b) Thời gian mức cao = Thời gian mức thấp = 10 ms. (c) 10 ms / 1.085 ms = 9216 65536 – 9216 = 56320 in decimal = DC00H in hex. (d) TL1 = 00H and TH1 = DCH. Bài toán 10.4. Tạo sóng vuông theo f cho sẵn Xung & Hoi 36 MOV TMOD,#10H ;timer 1, mode 1 AGAIN: MOV TL1,#00 ;Timer value = DC00H MOV TH1,#0DCH SETB TR1 ;start BACK: JNB TF1,BACK CLR TR1 ;stop CPL P2.3 CLR TF1 ;clear timer flag 1 SJMP AGAIN ;reload timer since ;mode 1 is not ;auto-reload Xung & Hoi 37 Tạo thời gian trễ lớn • Độ lớn tdelay phụ thuộc 2 thông số: – Tần số dao động thạch anh – Giá trị chứa trong các thanh ghi định thời TH & TL • Thời gian trễ là lớn nhất khi TH=TL=0. Nếu vẫn chưa đủ? Xung & Hoi 38 EKhảo sát BT sau và tìm thời gian trễ? (Không tính overhead) MOV TMOD,#10H MOV R3,#200 AGAIN: MOV TL1,#08H MOV TH1,#01H SETB TR1 BACK: JNB TF1,BACK CLR TR1 CLR TF1 DJNZ R3,AGAIN Giải đáp: TH – TL = 0108H = 264 (decimal) 65536 – 264 = 65272. Trễ do timer = 65272 × 1.085 ms = 70.820 ms Tổng thời gian trễ = 200 × 70.820 ms = 14.164024 seconds Bài toán 10.5. Tính delay Xung & Hoi 39 ETìm tần số xung vuông trên chân P1.0 ? MOV TMOD,#2H ;Timer 0,mode 2 MOV TH0,#0 AGAIN:MOV R5,#250 ;count 250 times ACALL DELAY CPL P1.0 SJMP AGAIN DELAY:SETB TR0 ;start BACK: JNB TF0,BACK CLR TR0 ;stop CLR TF0 ;clear TF DJNZ R5,DELAY ;timer 2: auto-reload RET Giải đáp:T = 2 (250 × 256 × 1.085 ms) = 138.88 ms à f = 72 Hz. Bài toán 10.6. Tính tần số xung vuông Xung & Hoi 40 Bài toán 10.7. Tìm giá trị gán cho TH EGiả sử đang lập trình cho Timer ở mode 2, tìm giá trị hex gán cho thanh ghi TH trong các trường hợp sau: (a) MOV TH1,#-200 (b) MOV TH0,#-60 (c) MOV TH1,#-3 (d) MOV TH1,#-12 (e) MOV TH0,#-48 • Giải đáp: Vài 8051 assemblers cho phép cách thức sau: • -200 = -C8H à 2’s complement of –200 = 100H – C8H = 38H Decimal 2’s complement (TH value) -200 = - C8H 38H - 60 = - 3CH C4H - 3 FDH - 12 F4H - 48 D0H Xung & Hoi 41 (a) Tìm tần số sóng vuông với đoạn code sau (b) Thời gian mức cao và thấp MOV TMOD,#2H ;Timer 0,mode 2 MOV TH0,#-150 ;Count=150 AGAIN:SETB P1.3 ACALL DELAY ACALL DELAY CLR P1.3 ACALL DEALY SJMP AGAIN DELAY:SETB TR0 ;start BACK: JNB TF0,BACK CLR TR0 ;stop CLR TF0 ;clear TF RET high period low period Bài toán 10.8. Tìm f Xung & Hoi 42 Giải đáp: “MOV TH0,#-150” dùng 150 clocks. CTC DELAY = 150 × 1.085 ms = 162 ms. Thời gian mức cao gấp 2 lần thời gian mức thấp (66% duty cycle). Chu kỳ = Thời gian mức cao + thời gian mức thấp = 325.5 ms + 162.25 ms = 488.25 ms Tần số = 2.048 kHz. Xung & Hoi 43 • Các bộ định thời (timers) cũng có thể dùng như những bộ đếm (counters) để đếm sự kiện xảy ra bên ngoài 8051 • Khi đó, xung từ ngoài sẽ làm tăng giá trị các thanh ghi TH, TL • Khi C/T=1, bộ đếm sẽ đếm lên khi có xung xuất hiện từ: – T0: timer 0 input (Pin 14, P3.4) – T1: timer 1 input (Pin 15, P3.5) Timer/Counter 1 external inputT1P3.515 Timer/Counter 0 external inputT0P3.414 DescriptionFunctionPort PinPin GATE C/T=1 M1 M0 GATE C/T=1 M1 M0 Timer 1 Timer 0 (MSB) (LSB) 10-7. Bộ đếm Xung & Hoi 44 10-7-1. Chế độ đếm 16-bit (mode 1) • 16-bit counter (TH0 and TL0) • Giá trị trong các thanh ghi TH0-TL0 tăng khi: TR0 được set lên 1 và một xung bên ngoài (T0) xuất hiện • Khi bộ đếm (TH0-TL0) đạt tới giá trị lớn nhất là FFFFH, nó được chuyển trạng thái về 0000, và TF0 được set lên 1 • Bằng cách nạp giá trị ban đẩu cho TH0-TL0, theo dõi TF0=1 để nhận biết 1 tình huống nào đó (vd: 100 người đã đến). TR0 TH0 TL0 TF0 TF0 goes high when FFFF à 0 overflow flag C/T = 1 Timer 0 ngõ vào từ bên ngoài chân 3.4 (T0) Xung & Hoi 45 • 8-bit counter. – Chỉ cho phép các giá trị từ 00 đến FFH nạp vào TH0 • Tự động nạp lại (Auto-reloading) • Giá trị trong TL0 sẽ tăng nếu TR0=1 và 1 xung bên ngoài xuất hiện 10-7-2. Chế độ đếm tự nạp lại 8-bit (mode 2) Xung & Hoi 46 Bài toán 10.9. Đếm xung & xuất port Giả định 1 xung clock được đưa vào chân T1, viết chương trình bộ đếm 1 làm việc ở mode 2 để đếm xung & hiển thị giá trị của TL1 ra P2, khi Counter tràn thì kết thúc? T1 to LEDs P3.5 P2 8051 Xung & Hoi 47 Ans: MOV TMOD, #01100000B ;mode 2, counter 1 MOV TH1, #0 SETB P3.5 SETB TR1 ;start BACK: MOV A,TL1 MOV P2,A ;display in P2 JNB TF1,BACK ;overflow CLR TR1 ;stop CLR TF1 ;make TF=0 Xung & Hoi 48 • Giả sử 1 xung tần số 1Hz được cấp vào chân P3.4. Viết chương trình hiển thị counter 0 trên LCD. Khởi tạo giá trị ban đầu cho thanh ghi TH0 là -60. T0 to LCD P3.4 P1 8051 1 Hz clock Bài toán 10.10. Đếm xung & Hiển thị LCD Xung & Hoi 49 ACALL LCD_SET_UP ;initialize the LCD MOV TMOD,#00000110B ;Counter 0,mode2 MOV TH0,#-60 SETB P3.4 ;make T0 as input AGAIN: SETB TR0 ;starts the counter BACK: MOV A,TL0 ;every 60 events ACALL CONV ;convert in R2,R3,R4 JNB TF0,BACK ;loop if TF0=0 CLR TR0 ;stop CLR TF0 SJMP AGAIN Xung & Hoi 50 ;converting 8-bit binary to ASCII CONV: MOV B,#10 ;divide by 10 DIV AB MOV R2,B ;save low digit MOV B,#10 ;divide by 10 once more DIV AB ORL A,#30H ;make it ASCII MOV R4,A MOV A,B ORL A,#30H MOV R3,A MOV A,R2 ORL A,#30H MOV R2,A ;ACALL LCD_DISPLAY here RET R4 R3 R2 Xung & Hoi 51 • Cải tiến ví dụ trên thực hiện 1 đồng hồ số đơn giản, chưa cần các nút hiệu chỉnh giở, phút ? • Việc sử dụng lệnh “JNB TF0,target” để giám sát cờ TF0 là sự hoang phí thời gian vô cùng lớn – Giải pháp là dùng ngắt, đề cập trong phần 12 của bài giảng – Với ngắt, ta có thể thực thi nhiều việc – Khi cờ TF được set, nó sẽ thông báo cho chúng ta Bài toán 10.11. Đồng hồ số
File đính kèm:
- bai_giang_ky_thuat_vi_dieu_khien_lap_trinh_timercounter.pdf