Upload
hakhanh
View
218
Download
2
Embed Size (px)
Citation preview
Mạch định thời 8051
Hiệu đính từ bài giảng Thầy Hồ Trung Mỹ và Thầy Lê Chí Thông Trương Công Dung Nghi
Giới thiệu chung• Khái niệm mạch định thời (Timer) : ‣ là một chuỗi các flip-flop chia đôi tần số mắc nối tiếp với nhau.‣ Xung nhịp được đưa vào FF thứ nhất để chia đôi tần số xung nhịp.‣ Ngõ ra của FF thứ nhất làm xung nhịp cho FF thứ hai (cũng làm việc
chia đôi tần số), và tiếp tục như vậy cho các FF tiếp theo.
• Đặc điểm :‣ Timer có n tầng sẽ cho xung ra có tần số là tần số xung nhịp chia cho
2n. ‣ Ngõ ra của tầng cuối làm xung nhịp cho FF báo tràn của timer (còn
gọi là cờ timer TF [Timer Flag]). ‣ Giá trị nhị phân trong các FF của timer có thể xem như số đếm số
xung nhịp (hoặc các sự kiện) từ khi timer bắt đầu chạy. Thí dụ timer 16 bit sẽ đếm lên từ 0000H đến FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H.
2
Trương Công Dung Nghi
Giới thiệu chung• Ví dụ : timer 3 bits
3
3
Giӟi thiӋu vӅ timer• Timer là mӝt chuӛi các flip-flop chia ÿôi tҫn sӕ mҳc nӕi tiӃp
vӟi nhau, chúng nhұn tín hiӋu vào làm nguӗn xung nhӏp. Xung nhӏp ÿѭӧc ÿѭa vào flip-flop thӭ nhҩt ÿӇ chia ÿôi tҫn sӕ xung nhӏp. Ngõ ra cӫa flip-flop thӭ nhҩt làm xung nhӏp cho flip-flop thӭ hai (cNJng làm viӋc chia ÿôi tҫnsӕ), và v.v...
• Vì mӛi tҫng kӃ tiӃp chia ÿôi cho nên timer có n tҫng sӁ cho xung ra có tҫn sӕ là tҫn sӕ xung nhӏp chia cho 2n. Ngõ ra cӫa tҫng cuӕi làm xung nhӏp cho flip-flop báo tràn cӫa timer (còn gӑi là cӡ timer TF [Timer Flag]).
• Giá trӏ nhӏ phân trong các flip-flop cӫa timer có thӇ xem nhѭ sӕ ÿӃm sӕ xung nhӏp (hoһc các sӵ kiӋn) tӯ khi timer bҳt ÿҫu chҥy. Thí dө timer 16 bit sӁ ÿӃm lên tӯ 0000H ÿӃn FFFFH. Cӡ báo tràn sӁ lên 1 khi sӕ ÿӃm tràn tӯ FFFFH ÿӃn 0000H.
4
TD: Timer 3 bit
Trương Công Dung Nghi
Timer trong 8051• 8051/8031 có hai timer 16 bit (T0 và T1), mỗi timer có bốn chế độ
hoạt động.• Nguồn xung nhịp cho các timer là xung vuông có tần số bằng 1/12
tần số xung nhịp cung cấp cho 8051. • Tầng cuối cùng của timer 16 bit chia tần số xung nhịp cho
216 = 65536.• Công dụng của timer:‣ định khoảng thời gian : lập trình cho timer tràn ở một khoảng đều đặn
và đặt cờ tràn timer lên 1.‣ đếm sự kiện : xác định số lần xảy ra của một sự kiện. Một “sự kiện”
là một tác động bên ngoài cung cấp một chuyển tiếp 1 sang 0 từ chân T0, T1(ở P3) của 8051/8031.
‣ tạo tốc độ baud cho cổng nối tiếp có sẵn trong 8051/8031.
4
Trương Công Dung Nghi
Các chế độ timer
5
M1 M0 Chế độ Mô tả
0011
0101
0123
Chế độ timer 13 bits (chế độ 8048)Chế độ timer 16 bitsChế độ timer 8 bits tự nạp lại giá trị đầuChế độ tách timer
Trương Công Dung Nghi
Chế độ timer 13 bits (chế độ 0)
• Chế độ 0 là chế độ timer 13 bit để tương thích với bộ xử lý trước 8051 là 8048.
• Với các thiết kế mới, người ta ít dùng chế độ hoạt động này.• Byte cao của timer (THx) nối tiếp với 5 bit thấp của byte thấp của
timer (TLx) để tạo thành timer 13 bit.• Ba bit cao của TLx không được sử dụng.
6
TLx(5 bits)
THx(8 bits) TFx
Xung nhịptimer
Cờ báo tràn
Trương Công Dung Nghi
Chế độ timer 16 bit (chế độ 1)
• Chế độ 1 là chế độ timer 16 bits. • Chế độ này hoạt động giống như chế độ 0, ngoại trừ lúc này timer
hoạt động như timer 16 bit đầy đủ. • Tràn xảy ra khi có chuyển tiếp từ FFFFH sang 0000H trong số đếm
và nó đặt cờ báo tràn timer lên 1. Timer tiếp tục đếm tiếp. • Cờ báo tràn là bit TFx trong TCON mà người ta có thể đọc ra hoặc
ghi vào bằng phần mềm.
7
TLx(8 bits)
THx(8 bits) TFx
Xung nhịptimer
Cờ báo tràn
Trương Công Dung Nghi
Chế độ timer 8 bit tự nạp lại trị đầu (chế độ 2)
• Byte thấp của timer TLx làm việc như timer 8 bit trong khi đó byte cao của timer THx giữ giá trị cần nạp lại.
• Khi bộ đếm tràn từ FFH sang 00H thì không những cờ timer được đặt lên 1 mà giá trị trong THx còn được nạp vào TLx, việc đếm tiếp tục từ giá trị này đến chuyển tiếp từ FFH sang 00H kế, và cứ tiếp tục như vậy.
• Chế độ này tiện lợi vì tràn timer xảy ra theo những khoảng thời gian có chu kỳ một khi TMOD và THx đã được khởi tạo trị.
8
TLx(8 bits) TFx
Xung nhịptimer
Cờ báo tràn
THx(8 bits)
Trương Công Dung Nghi
Chế độ tách timer (chế độ 3)
• Chế độ 3 là chế độ tách timer thì khác nhau với mỗi timer. Timer 0 ở chế độ 3 được tách thành 2 timer 8 bit.
• TL0 và TH0 làm việc như 2 timer độc lập với các báo tràn đặt các cờ TF0 và TF1 tương ứng
9
15
ChӃ ÿӝ tách timer (chӃ ÿӝ 3)
• ChӃ ÿӝ 3 là chӃ ÿӝ tách timer thì khác nhau vӟi mӛi timer. Timer 0 ӣ chӃ ÿӝ 3 ÿѭӧc tách thành 2 timer 8 bit.
• TL0 và TH0 làm viӋc nhѭ 2 timer ÿӝc lұp vӟi các báo tràn ÿһt các cӡ TF0 và TF1 tѭѫng ӭng
16
Ĉһc ÿiӇm cӫa chӃ ÿӝ 3• Timer 1 bӏ dӯng ӣ chӃ ÿӝ 3, nhѭng có thӇ cho nó chҥy
bҵng cách chuyӇn sang 1 trong các chӃ ÿӝ khác. • Giӟi hҥn duy nhҩt là cӡ báo tràn thông thѭӡng cӫa
Timer 1 (TF1) không bӏ ҧnh hѭӣng bӣi sӵ báo tràn trong Timer1 vì TF1 ÿã ÿѭӧc nӕi vào TH0.
• ChӃ ÿӝ 3 chӫ yӃu cho thêm 1 timer 8 bit (8051 giӕng nhѭ có thêm timer thӭ ba). Khi Timer 0 ӣ chӃ ÿӝ 3, ta có thӇ bұt hay tҳt Timer 1 bҵng cách chuyӇn nó ra khӓi hay ÿi vào chính chӃ ÿӝ 3 cӫa nó. Nó vүn có thӇ ÿѭӧc cәng nӕi tiӃp sӱ dөng làm bӝ tҥo tӕc ÿӝ baud hoһc cóthӇ ÿѭӧc sӱ dөng theo bҩt cӭ cách nào mà không cҫn ngҳt (vì nó không còn tác ÿӝng ÿѭӧc vӟi TF1)
Trương Công Dung Nghi
Chế độ tách timer (chế độ 3)• Đặc điểm :‣ Timer 1 bị dừng ở chế độ 3, nhưng có thể cho nó chạy bằng cách
chuyển sang 1 trong các chế độ khác.‣ Giới hạn duy nhất là cờ báo tràn thông thường của Timer 1 (TF1)
không bị ảnh hưởng bởi sự báo tràn trong Timer1 vì TF1 đã được nối vào TH0.
‣ Chế độ 3 chủ yếu cho thêm 1 timer 8 bit (8051 giống như có thêm timer thứ ba).
‣ Khi Timer 0 ở chế độ 3, ta có thể bật hay tắt Timer 1 bằng cách chuyển nó ra khỏi hay đi vào chính chế độ 3 của nó. Nó vẫn có thể được cổng nối tiếp sử dụng làm bộ tạo tốc độ baud hoặc có thể được sử dụng theo bất cứ cách nào mà không cần ngắt (vì nó không còn tác động được với TF1).
10
Trương Công Dung Nghi
Thanh ghi timer• Timer (T0/T1) của 8051 được tạo bởi 2 thanh ghi 8 bit :‣ Timer 0 (T0) : TL0 và TH0 (L=Low và H=High)‣ Timer 1 (T1) : TL1 and TH1
• Các thanh ghi định thì có thể sử dụng như các thanh ghi khác.Ví dụ : MOV TL0, #55H MOV R1, TH0
11 Trương Công Dung Nghi
Thanh ghi điều khiển timer (TCON)
12
7
Các SFR cӫa timer
8
Thanh ghi ÿiӅu khiӇn timer (TCON)
ĐH Bách Khoa TP.HCM Lê Chí Thông
sites.google.com/site/chithong 9
Mode 3 : two 8-bit counterthe other counter will notoutput overflow (interrupt)17Lê Chí Thông
4 Timer Modes
Mode 0 : 13-bit counter(4048 mode)
Mode 1 : 16-bit counter
Mode 2 : 8-bit auto reload counter
• Timer control register: TCON– Upper nibble : timer/counter– Lower nibble : interrupts
• TR (run control bit)– TR0 : Timer/counter 0– TR1: Timer/counter 1.– Turn timer/counter on/off.
• TR=0: off (stop)• TR=1: on (start)
TCON Register (1)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
Timer 1 Timer0 for Interrupt
(MSB) (LSB)
18Lê Chí Thông
Trương Công Dung Nghi
Thanh ghi chế độ timer (TMOD)
139
Thanh ghi chӃ ÿӝ timer (TMOD)
10
Các chӃ ÿӝ hoҥt ÿӝng cӫa timer
ĐH Bách Khoa TP.HCM Lê Chí Thông
sites.google.com/site/chithong 7
13Lê Chí Thông
TMOD Register
TMOD: Timer Mode RegisterGATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB) (LSB)
GATE 0 : Timer/counter counts only while TRx bit is set.1 : Timer/counter counts only while TRx bit is set and
INTx pin is high
C/T 0 : Timer operation (clock : Machine cycle) 1 : Counter operation (clock : Tx input pin)
14Lê Chí Thông
M1, M0: mode setting bits
M1 M0 Mode Operating mode
0 0 0 13-bit timer mode8-bit THx + 5-bit TLx (x= 0 or 1)
0 1 1 16-bit timer mode8-bit THx + 8-bit TLx
1 0 2 8-bit auto-reload mode8-bit auto reload timer/counter; THx holds a value which is to be reloaded intoTLx each time it overflows.
1 1 3 Split timer mode
Trương Công Dung Nghi
Thanh ghi chế độ timer (TMOD)
• Ví dụ: MOV TMOD,#00000001B ; Timer 0 mode 1, timer ; operation MOV TMOD,#20H ; Timer 1 mode 2, timer operation MOV TMOD,#12H ; Timer 1 mode 1, Timer 0 mode ; 2, both timer operation MOV TMOD,#00000101B ; Timer 0 mode 1, counter ; operation MOV TMOD,#00001001B ; Timer 0 mode 1, external ; control (GATE=1)
14
ĐH Bách Khoa TP.HCM Lê Chí Thông
sites.google.com/site/chithong 7
13Lê Chí Thông
TMOD Register
TMOD: Timer Mode RegisterGATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
(MSB) (LSB)
GATE 0 : Timer/counter counts only while TRx bit is set.1 : Timer/counter counts only while TRx bit is set and
INTx pin is high
C/T 0 : Timer operation (clock : Machine cycle) 1 : Counter operation (clock : Tx input pin)
14Lê Chí Thông
M1, M0: mode setting bits
M1 M0 Mode Operating mode
0 0 0 13-bit timer mode8-bit THx + 5-bit TLx (x= 0 or 1)
0 1 1 16-bit timer mode8-bit THx + 8-bit TLx
1 0 2 8-bit auto-reload mode8-bit auto reload timer/counter; THx holds a value which is to be reloaded intoTLx each time it overflows.
1 1 3 Split timer mode
Trương Công Dung Nghi
Nguồn xung clock
15
ĐH Bách Khoa TP.HCM Lê Chí Thông
sites.google.com/site/chithong 3
to Timer
Internal clock fCLK = fCrystal / 12
External clock
5Lê Chí Thông
Clock Source
C/T Clock Function0 Internal Timer (interval timing, delay)1 External Counter (event counting)
6Lê Chí Thông
Timer 1 mode 1 (16 bit)
C/T̅ Xung clock Chức năng
01
Xung nộiXung ngoài
Định thì, trễĐếm sự kiện
Trương Công Dung Nghi
Định thì khoảng thời gian• Nếu C/T̅ = 0, hoạt động timer liên tục được chọn và timer được cấp
xung nhịp từ mạch dao động trên chip. Một tầng chia 12 được thêm vào để giảm tần số xung nhịp xuống giá trị thích hợp cho phần lớn các ứng dụng trong điều khiển.
• Khi chọn hoạt động timer liên tục thì timer được sử dụng để định thì khoảng thời gian (interval timing). Các thanh ghi timer (TLx/THx) tăng nội dung thêm 1 cứ theo tần số là 1/12 tần số dao động trên chip; như vậy với thạch anh 12MHz thì xung nhịp của timer là 1MHz.
• Tràn timer xảy ra cứ sau một số các xung nhịp cố định mà tùy theo giá trị đầu được nạp vào các thanh ghi TLx/THx.
16
Trương Công Dung Nghi
Đếm sự kiện• Nếu C/T̅ = 1, timer được cấp xung nhịp từ nguồn bên ngoài.• Nguồn bên ngoài cung cấp timer một xung khi xảy ra sự kiện -> timer được sử dụng để đếm sự kiện (event counting).
• Số sự kiện được xác định trong phần mềm bằng cách đọc các thanh ghi TLx/THx, từ đó giá trị 16 bit trong các thanh ghi này tặng thêm 1 cho mỗi sự kiện.
• Nguồn xung nhịp bên ngoài được cung cấp bằng cách đưa vào các chân có chức năng thay thế ở Port 3: ngõ vào xung nhịp cho Timer 0 là T0 (chân P3.4). hay cho timer là T1 (chân P3.5)
• Trong các ứng dụng bộ đếm, các thanh ghi timer được tăng thêm 1 khi có chuyển tiếp 1 sang 0 ở ngõ vào bên ngoài Tx. Ngõ vào bên ngoài này được lấy mẫu trong S5P2 của mọi chu kỳ máy; như vậy khi ngõ vào ở mức 1 trong 1 chu kỳ và mức 0 trong chu kỳ kế thì số đếm được tăng thêm 1. Giá trị mới xuất hiện trong các thanh ghi timer trong S3P1 của chu kỳ theo sau chu kỳ mà chuyển tiếp được phát hiện. Từ đó nó mất 2 chu kỳ máy (2 µs) để ghi nhận chuyển tiếp 1 sang 0, do đó tần số bên ngoài tối đa là 500 KHz (giả sử hoạt động 12 MHz).
17 Trương Công Dung Nghi
Khởi tạo trị và truy cập các thanh ghi timer
• Các tác vụ:‣ Đặt chế độ làm việc :
Ví dụ: MOV TMOD, #00010000B timer 1: Gate=0, C/T=0, M1M0=01 (mode 1) timer 0: Gate=0, C/T=0, M1M0=00 (mode 0)
‣ Cho timer chạy : Ví dụ: SETB TR1
‣ Dừng timer : Ví dụ: CLR TR1
18
Trương Công Dung Nghi
Khởi tạo trị và truy cập các thanh ghi timer
• Các tác vụ:‣ Kiểm tra cờ tràn ‣ Xóa cờ báo tràn
Ví dụ: WAIT: JNB TF1, WAIT CLR TR1 ; dừng timer T1 CLR TF1 ; xóa cờ báo tràn
‣ Đọc và cập nhật các thanh ghi timerVí dụ: MOV TL1, #9CH MOV TH1, #0FFH
19 Trương Công Dung Nghi
Đọc giá trị đếm của timer đang chạy• R7 ← TH1, R6 ← TL1• Trước hết đọc byte cao• Vấn đề có thể xảy ra:‣ khi tràn byte thấp → đọc lại lần nữa
• Ví dụ: AGAIN: MOV A, TH1 MOV R6, TL1 CJNE A, TH1, AGAIN MOV R7, A
20
Trương Công Dung Nghi
Các bước để lập trình Timer mode 0 hay 1
1. Nạp trị cho TMOD 2. Nạp trị số cho các thanh ghi TL và TH 3. Cho timer chạy (SETB TR0 hay SETB TR1) 4. Kiểm tra/theo dõi cờ báo tràn timer (TF) → đợi đến khi cờ TF = 1 5. Dừng timer (CLR TR0 hay CLR TR1) 6. Xóa cờ TF 7. Quay về bước 2
21 Trương Công Dung Nghi
Các bước để lập trình Timer mode 21. Nạp trị cho TMOD 2. Nạp trị số cho các thanh ghi TH3. Cho timer chạy (SETB TR0 hay SETB TR1) 4. Kiểm tra/theo dõi cờ báo tràn timer (TF) → đợi đến khi cờ TF = 1 5. Dừng timer (CLR TR0 hay CLR TR1) 6. Xóa cờ TF 7. Quay về bước 3
22
Trương Công Dung Nghi
Các kỹ thuật lập trình cho định thì
23
Khoảng thời gian tối đa (theo µs) Kỹ thuật
≈ 10 Điều chỉnh phần mềm
256 Timer 8 bits với tự động nạp lại trị đầu
65536 Timer 16 bits
Không giới hạn Timer 16 bits cộng với các vòng lặp phần mềm
Trương Công Dung Nghi
Lập trình định thì• Ví dụ: Viết một chương trình tạo ra dạng sóng có chu kỳ trên P1.0 với tần số
cao nhất có thể được. Tần số và chu kỳ nhiệm vụ của dạng sóng này là bao nhiêu? (giả sử ta dùng XTAL = 12MHz, 1 MC = 1us)
24
Với dạng sóng rất ngắn: không cần timer ORG 8000H LOOP: SETB P1.0 ; 1 MC CLR P1.0 ; 1 MC SJMP LOOP ; 2 MC
27
Ĉӏnh thì khoҧng thӡi gian ngҳn và khoҧng thӡi gian dài
28
Thí dө: Tҥo dҥng xung trên chân P1.0ViӃt mӝt chѭѫng trình tҥo ra dҥng sóng có chu kǤ trên P1.0 vӟi tҫn sӕ cao nhҩt có thӇ ÿѭӧc. Tҫn sӕ và chu kǤ nhiӋm vө cӫa dҥng sóng này là bao nhiêu?(giҧ sӱ ta dùng XTAL = 12MHz Æ 1 MC = 1us)Î Vӟi dҥng sóng rҩt ngҳn: không cҫn timer
ORG 8000HLOOP: SETB P1.0 ; 1 MC
CLR P1.0 ; 1 MCSJMP LOOP ; 2 MC
• Tҫn sӕ = 250 Khz (1/ 4 us)• TON = 1 us, TOFF= 3us Î duty cycle = TON/(TON+TOFF)= 25% (1/4)
P1.0
1 us(1 MC)
SETB CLR SJMP SETB
TON = 1us, TOFF= 3us -> chu kỳ nhiệm vụ = TON/(TON+TOFF) = 25% (1/4)
Trương Công Dung Nghi
Lập trình định thì• Ví dụ: Tạo sóng vuông trên chân P1.0
25
ORG 8000HLOOP: SETB P1.0 ; 1MC NOP ; 1MC NOP ; 1MC CLR P1.0 ; 1MC SJMP LOOP ; 2MC
29
Thí dө: Tҥo sóng vuông trên chân P1.0ORG 8000H
LOOP: SETB P1.0 ; 1 MCNOP ; 1 MCNOP ; 1 MCCLR P1.0 ; 1 MCSJMP LOOP ; 2 MC
Tҫn sӕ = 166.7 Khz ( 1/ 6 us )TON = 3 us, TOFF= 3us Î duty cycle = TON/(TON+TOFF)= 50% (3/6)
P1.0
1 us(One machine cycle)
NOP SJMPSETB NOP CLR SETB
30
Tҥo sóng vuông 10 KHz ӣ chân P1.0Tҥo sóng vuông 10 KHz
Tҫn sӕ = 10KHz Æ chu kǤ T =1/10000 = 100 usTON = 50 us, TOFF= 50us Dùng mode 2 ( 8 bit mode ), vì khoҧng thӡi gian < 256 us.
ORG 8000HMOV TMOD, #02H ; chӃ ÿӝ tӵ nҥp lҥi 8 bitMOV TH0, #-50 ; 256 – 50 = 206SETB TR0 ; cho timer T0 chҥy
LOOP: JNB TF0, LOOP ; ÿӧi timer T0 trànCLR TF0 ; xóa cӡ báo trànCPL P1.0 ; ÿҧo bit cәngSJMP LOOP ; lһp lҥiEND
Tần số = 166.7 Khz ( 1/ 6 us )TON = 3 us, TOFF= 3us -> duty cycle = TON/(TON+TOFF)= 50% (3/6)
Trương Công Dung Nghi
Lập trình định thì• Ví dụ: Tạo sóng vuông 10kHz ở chân P1.0
26
Tần số = 10KHz -> chu kỳ T =1/10000 = 100 usTON = 50 us, TOFF = 50usDùng mode 2 (8 bit mode), vì khoảng thời gian < 256 us.
ORG 8000HMOV TMOD, #02H ; chế độ tự nạp lại 8 bit MOV TH0, #-50 ; 256 – 50 = 206SETB TR0 ; cho timer T0 chạy
LOOP: JNB TF0, LOOP ; đợi timer T0 tràn CLR TF0 ; xóa cờ báo tràn CPL P1.0 ; đảo bit cổng SETB TR0 ; cho timer T0 chạy SJMP LOOP ; lặp lại END
Trương Công Dung Nghi
Lập trình định thì• Ví dụ : tạo sóng vuông 1KHz trên chân P1.0
27
Tần số = 1KHz -> chu kỳ T =1/1000 = 1000 usTON = 500 us, TOFF = 500 usDùng mode 1 (16 bit mode), vì khoảng thời gian > 256 us.
31
Tҥo sóng vuông 1 KHz trên chân P1.0Tҥo sóng vuông 1 KHzTҫn sӕ = 1KHz Æ chu kǤ T =1/1000 = 1000 usTON = 500 us, TOFF= 500us Dùng mode 1 ( 16 bit mode ), vì khoҧng thӡi gian > 256 us.
ORG 8000HMOV TMOD, #01H ; chӃ ÿӝ 1 (16 bit)
LOOP: MOV TH0, #0FEHMOV TL0, #0CH ; -500 (-01F4H)SETB TR0 ; cho timer T0 chҥy
WAIT: JNB TF0, WAIT ; ÿӧi timer trànCLR TR0 ; dӯng timer 0CLR TF0 ; xóa cӡ báo trànCPL P1.0 ; ÿҧo bit cәngSJMP LOOP ; lһp lҥiEND
Chú ý: MOV TH0, #0FEH { MOV TH0, #HIGH(-500)MOV TL0, #0CH { MOV TL0, #LOW(-500)
32
TD: Giao tiӃp buzzer (1/2)Mӝt buzzer ÿѭӧc nӕi vào chân P1.7 và mӝt công tҳc không nҧy (debounce switch) ÿѭӧc nӕi vào chân P1.6 (xem hình 3.28). ViӃt chѭѫng trình ÿӑc mӭc logic do công tҳc cҩp và tҥo ra âm thanh ӣ buzzer trong 1 giây sau mӛi lҫn phát hiӋn chuyӇn trҥng thái tӯ 1 xuӕng 0.
Trương Công Dung Nghi28
- 42 -42
15. f = 21kHz, hence one period is T = 1/f | 48Ps.To generate a waveform with a 10% duty cycle, this means that the waveform would only be
HIGH for 10% of a period, or 10% u 48Ps | 5PsAnd LOW for 90% of a period, or 90% u 48Ps = 43Ps
Since the counts are less than 256, we will use a timer set to mode 2 (8-bit auto reload) as an interval timer.
16. The highest that an 8051 timer could count to is 216 � 1 = 65535 since its count is only a 16-bit value. When used as an event counter, this limits the number of events that the timer could count to just 65535. Counting further causes the count to recycle to zero.
17. A 16-bit timer is one that has a count of 16 bits in size, so the maximum count that it could go to is 216 � 1 = 65535 before it recycles to zero.
18. (a) f = 3kHz, hence one period is T = 1/f | 0.000333s = 333Ps.To generate a waveform with a 30% duty cycle, this means that the waveform would only
be HIGH for 30% of a period, or 30% u 333Ps | 100Ps
And LOW for 70% of a period, or 70% u 333Ps | 233Ps
We will use Timer 1, and set it to be in mode 2 (8-bit) as an interval timer.
MOV TMOD, #00100000B ;initialise Timer 1’s mode
LOOP: MOV TH1, #-100 ;timer to start counting
; –100 counts before overflow
SETB TR1 ;start the timer
HGH: SETB P2.0 ;set P2.0
JNB TF1, $ ;wait till it overflows
CLR TF1 ;clear overflow flag for next usage
LOW: MOV TH1, # -233 ;timer to start counting
; –233 counts before overflow
CLR P2.0 ;clear P2.0
JNB TF1, $ ;wait till it overflows
CLR TF1 ;clear the overflow flag
SJMP LOOP ;loop back and repeat
END
(b) Yes. The time that it is high should be 30% u 333.3333Ps = 100Ps which does not cause much round-off error. However, the low time should be 70% u 333.3333Ps =
Trương Công Dung Nghi
Lập trình counter• Ở chế độ counter: ‣ TMOD, TH, TL giống như với timer ‣ Các chế độ timer cũng giống.
• Thay vì dùng tần số thạch anh, counter đếm xung từ bên ngoài đưa vào 8051 (Bit C/T trong TMOD sẽ quyết định nguồn xung nhịp).
• Khi C/T = 1, counter đếm lên khi có xung đưa vào các chân T1 và T0 (ở P3).
29
33
TD: Giao tiӃp buzzer (2/2)
34
Lұp trình counter• Ӣ chӃ ÿӝ counter: TMOD, TH, TL giӕng nhѭ vӟi timer
• Các chӃ ÿӝ timer cNJng giӕng
• Tuy nhiên thay vì dùng tҫn sӕ thҥch anh, counter ÿӃm xung tӯ bên ngoài ÿѭa vào 8051.
• Bit C/T trong TMOD quyӃt ÿӏnh nguӗn xung nhӏp.
• Khi C/T = 1, counter ÿӃm lên khi có xung ÿѭa vào các chân T1 và T0 (ӣ P3)
Trương Công Dung Nghi
Lập trình counter• Ví dụ : Giả sử có xung nhịp đưa vào chân T1, viết chương trình
dùng counter 1 ở chế độ 2 và xuất số xung đếm được ra P2.
30
MOV TMOD, #01100000B ; counter 1 chế độ 2 MOV TH1, #0 MOV TL1, #0 SETB P3.5 ; làm cho T1 là chân nhập
AGAIN: SETB TR1 ; cho counter 1 chạyBACK: MOV A, TL1 ; lấy số xung đếm được MOV P2, A ; xuất ra P2 JNB TF1, BACK CLR TR1 CLR TF1 SJMP AGAIN