ạ nh th i 8051 - hcmuttcdungnghi/mpu_mcu/mcu_8051_timer_stu.pdf · mạch định thời ......

8
Mch định thi 8051 Hiu đính tbài ging Thy HTrung Mvà Thy Lê Chí Thông Trương Công Dung Nghi Gii thiu chung Khái nim mch định thi (Timer) : là mt chui các flip-flop chia đôi tn smc ni tiếp vi nhau. Xung nhp được đưa vào FF thnht để chia đôi tn sxung nhp. Ngõ ra ca FF thnht làm xung nhp cho FF thhai (cũng làm vic chia đôi tn s), và tiếp tc như vy cho các FF tiếp theo. Đặc đim : Timer có n tng scho xung ra có tn slà tn sxung nhp chia cho 2 n . Ngõ ra ca tng cui làm xung nhp cho FF báo tràn ca timer (còn gi là ctimer TF [Timer Flag]). Giá trnhphân trong các FF ca timer có thxem như sđếm sxung nhp (hoc các skin) tkhi timer bt đầu chy. Thí dtimer 16 bit sđếm lên t0000H đến FFFFH. Cbáo tràn slên 1 khi sđếm tràn tFFFFH đến 0000H. 2 Trương Công Dung Nghi Gii thiu chung Ví d: timer 3 bits 3 4 Trương Công Dung Nghi Timer trong 8051 8051/8031 có hai timer 16 bit (T0 và T1), mi timer có bn chế độ hot động. Ngun xung nhp cho các timer là xung vuông có tn sbng 1/12 tn sxung nhp cung cp cho 8051. Tng cui cùng ca timer 16 bit chia tn sxung nhp cho 2 16 = 65536. Công dng ca timer: định khong thi gian : lp trình cho timer tràn mt khong đều đặn đặt ctràn timer lên 1. đếm skin : xác định sln xy ra ca mt skin. Mt “skin” là mt tác động bên ngoài cung cp mt chuyn tiếp 1 sang 0 tchân T0, T1(P3) ca 8051/8031. to tc độ baud cho cng ni tiếp có sn trong 8051/8031. 4

Upload: hakhanh

Post on 01-Mar-2018

215 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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

Page 2: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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)

Page 3: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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

Page 4: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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

Page 5: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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

Page 6: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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)

Page 7: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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 =

Page 8: ạ nh th i 8051 - HCMUTtcdungnghi/MPU_MCU/MCU_8051_timer_stu.pdf · Mạch định thời ... ‣Xung nhịp được đưa vào FF thứ nhất để chia đôi ... ‣tạo tốc

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