Bộ môn Kỹ Thuật Điện Tử - ĐHBK0 – Timer dùng để định thời hoặc đếm sự kiện.. Thanh ghi TCONTFx: Cờ báo tràn của timer, đặt lên 1 bởi phần cứng khi timer tràn, được xoá về 0 bằng phần mề
Trang 1ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA
Trang 2Bộ môn Kỹ Thuật Điện Tử - ĐHBK 2
Trang 4Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Giới thiệu
• Hàm sau dùng để tạo trễ theo đơn vị ms (Cho
tần số xung nhịp của 8051 là 12Mhz) Ví dụ
muốn trễ 1s ta gọi Delay_ms(1000);
• Rất khó để tạo khoảng thời gian trễ chính xác
nếu không có sự hỗ trợ của Compiler.
4
Hàm này được phát triển bằng cách sử dụng chức năng Performance Analyzer của Keil C
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 5Giới thiệu
• Hàm DELAY_ms(1000);
Trang 6Bộ môn Kỹ Thuật Điện Tử - ĐHBK
0 – Timer dùng để định thời hoặc đếm sự kiện Timer chạy khi bit TR ở mức cao
C/T: Bit chọn counter hay timer
0 - Chế độ định thời với tốc độ đếm bằng 1/12 tốc độ xung clock hệ thống
1 - Chế độ đếm sự kiện (thông qua chân T0 hoặc T1) với tốc độ đếm tối đa là 500kHz vớithạch anh 12MHz
M1, M0: dùng để xác định chế độ hoạt động của timer.
00 - chế độ 0, timer 13 bit
01 - chế độ 1, timer 16 bit
10 - chế độ 2, timer 8 bit, tự động nạp lại giá trị đầu
11 - chế độ 3, tách timer TL0 là timer 8 bit, điều khiển bởi các bit chế độ của timer0, TH0 làtimer 8 bit, điều khiển bởi các bit chế độ của timer1
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 7Thanh ghi TCON
TFx: Cờ báo tràn của timer, đặt lên 1 bởi phần cứng khi timer tràn, được xoá về 0
bằng phần mềm hoặc bằng phần cứng nếu cờ tràn làm cho chương trình phục vụ ngắt (ISR) được gọi.
TRx: Bit điều khiển timer chạy Được đặt/xoá bằng phần mềm để cho timer
dừng/chạy
(x = 1: timer1, x = 0: timer0)
IEx: Cờ cạnh ngắt ngoài Đặt bởi phần cứng khi phát hiện cạnh xuống ở chân INTx,
xoá bằng phần mềm hoặc phần cứng khi CPU chỉ đến ISR.
ITx: Cờ kiểu ngắt Được thiết lập bằng phần mềm:
1 - Ngắt ngoài tích cực cạnh xuống.
0 - Ngắt ngoài tích cực mức thấp.
(x = 1: ngắt ngoài 1, x = 0: ngắt ngoài 0)
Trang 8Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Các ví dụ
8
VD1: Viết chương trình để bật tắt các bit của port 1 liên tục với một
khoảng thời gian trễ (sử dụng timer 0)
Cho thạch anh 12Mhz Tính khoảng
thời gian trễ của hàm T0Delay()?
FFFFH-3500H+1=CB00H=51968
1 ms 51968 52ms
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 9Các ví dụ
VD2: Một SW được nối vào P1.0 và LED được nối vào P1.7 Viết
chương trình giám sát trạng thái SW và tạo các xung sau trên chân P1.7
SW=0: 500 Hz;
SW=1: 750 Hz Dùng timer với thạch anh 11.059Mhz
f = 500Hz -> T = 2000us -> Tdelay = 1000us = 921TM= 399H TMTH0:TL0 = FFFF + 1 – 399 = FC67H
f = 750Hz -> T = 1333us -> Tdelay = 666us = 614TM = 266H TMTH0:TL0 = FFFF + 1 – 266A = FD9AH
Trang 10Bộ môn Kỹ Thuật Điện Tử - ĐHBK
VD 2
10CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 11VD 3 VD3: Viết chương trình tạo xung 1Hz trên chân P1.7 Thạch anh 12Mhz
Trang 12Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Trang 13VD4: Giả sử xung 1Hz được nối đến chân T1 (P3.5) của timer Viết chương trình cho counter 1 hoạt động ở mode 2 đếm lên và hiển thị giá trị của TL1 lên P1.
Trang 14Bộ môn Kỹ Thuật Điện Tử - ĐHBK 14
Trang 15Giới thiệu
• Hai thanh ghi truy cập đến cổng nối tiếp là SBUF và SCON
SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0,SM1: xác định chế độ hoạt động cho cổng nối tiếp
00 - chế độ 0, cổng nối tiếp trở thành thanh ghi dịch, dữ liệu vào và ra trên chân RXD, chân TXD
là ngõ ra của xung nhịp dịch Tốc độ baud cố định và bằng 1/12 lần tần số mạch dao động trên chip
01 - chế độ 1, hoạt động ở chế độ UART 8 bit, tần số thay đổi được, chỉnh bằng timer
10 - chế độ 2, hoạt động ở chế độ UART 9 bit, tần số cố định và bằng 1/12 tần số dao động trên chip
11 - chế độ 3, UART 9 bit, tần số thay đổi được, chỉnh bằng timer
SM2: sử dụng trong truyền thông đa xử lý trong các chế độ 2 và 3 sẽ không được kích hoạt nếu bit 9 của
bộ thu là 0
REN: bit cho phép bộ thu, phải đặt lên 1 để thu các ký tự
TB8: bit truyền 8, là bit thứ 9 được phát đi trong các chế độ 2 và 3 Được đặt xóa bằng phần mềm
RB8: bit nhận 8, là bit thứ 9 nhận được
TI: cờ ngắt phát Được đặt lên 1 khi kết thúc truyền ký tự, xoá bằng phần mềm
RI: cờ ngắt thu Được đặt lên 1 khi kết thúc nhận ký tự, xoá bằng phần mềm
Trang 16Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Hoạt động
• Bước 1: Cài đặt chế độ hoạt động trong thanh ghi SCON
• Bước 2: Thiết lập tốc độ baud (tốc độ tràn của timer 1)
• Bước 3: Đọc/ghi byte dữ liệu (SBUF)
• Bước 4: Đợi RI/TI được bật lên 1
16CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 17Ví dụ
Viết chương trình dùng để truyền ký tự “A” nối tiếp với tốc độ baud là
4800 Sử dụng 8-bit dữ liệu và 1 stop bit
Trang 18Bộ môn Kỹ Thuật Điện Tử - ĐHBK 18
Trang 19Giới thiệu
• Trong 8051 có tất cả 5 nguồn ngắt gồm: ngắt
ngoài 0, ngắt timer0, ngắt ngoài 1, ngắt timer1
và ngắt của cổng nối tiếp.
• Khi sử dụng cần quan tâm đến hai thanh ghi:
– Thanh ghi cho phép ngắt (IE)
– Thanh ghi điều khiển chế độ ưu tiên (IP)
Trang 20Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Thanh ghi IE và IP
EA ET2 ES ET1 EX1 ET0 EX0 EA: Cấm hoặc cho phép tất cả các ngắt không bị che.
ET2: Cấm hoặc cho phép ngắt timer2 (8052)
ES: Cấm hoặc cho phép ngắt từ cổng nối tiếp.
ET1: Cấm hoặc cho phép ngắt timer1.
EX1: Cấm hoặc cho phép ngắt ngoài 1.
ET0: Cấm hoặc cho phép ngắt timer0.
EX0: Cấm hoặc cho phép ngắt ngoài 0.
(0 = Cấm, 1 = cho phép)
20
PT2 PS PT1 PX1 PT0 PX0
PT2: Ưu tiên cho ngắt timer2 (8052).
PS: Ưu tiên cho ngắt nối tiếp.
PT1: Ưu tiên cho ngắt timer1.
PX1: Ưu tiên cho ngắt ngoài 1.
PT0: Ưu tiên cho ngắt timer0.
PX0: Ưu tiên cho ngắt ngoài 0.
(mức 0 = không ưu tiên, mức 1 = ưu tiên)
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 21Địa chỉ vector ngắt
Interrupt Vector address Interrupt number
External 0 0003h 0 Timer 0 000Bh 1 External 1 0013h 2 Timer 1 001Bh 3 Serial 0023h 4
Cú pháp chương trình phục vụ ngắt:
void ngat_noi_tiep(void) interrupt 4 using 1 {
/* Cac lenh can thuc thi */
}
interrupt 4 using 1 dùng để khai báo cho trình biên dịch biết đây là ISR của cổng
Trang 22Bộ môn Kỹ Thuật Điện Tử - ĐHBK
Ngắt timer
VD1: Tạo xung vuông trên chân P1.0 dùng ngắt timer
22CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 23Ngắt timer
VD 2: Viết chương trình liên tục đọc 1 bit từ dữ liệu từ P1.0 và xuất
nó ra P1.3 Trong khi đó đồng thời tạo xung vuông có chu kz 200us trên chân P1.7.
Sử dụng timer 0 để tao xung, giả sử thạch anh là 11.059MHz.
Trang 24Bộ môn Kỹ Thuật Điện Tử - ĐHBK
VD 2
24CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 25Ngắt timer và cổng nối tiếp
VD3: Viết chương trình liên tục đọc 1 bit dữ liệu từ P1.0
và xuất nó ra P1.3 Trong khi đó liên tục:
- Tạo xung vuông có chu kz 400us trên chân P1.7
- Gửi k{ tự ‘A’ đến cổng nối tiếp
Sử dụng ngắt timer 0 để tạo xung vuông, thạch anh
11.059Mhz, tốc độ baud là 9600
LED
8051
P1.3
Trang 26Bộ môn Kỹ Thuật Điện Tử - ĐHBK
VD 3
26CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 28Bộ môn Kỹ Thuật Điện Tử - ĐHBK 28
R E
A13 A14 A15
GND VDD
XTAL2 18
XTAL1 19
RST 9
P3.0/RXD 10P3.1/TXD 11P3.2/INT0 12P3.3/INT1 13P3.4/T0 14P3.7/RD 17P3.6/WR 16P3.5/T1 15
AD[0 7]
A[8 15]
ALE 30
EA 31PSEN 29
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
U1
8051 PROGRAM=TN8051.hex SRCFILE=P1_toggle.c
D0
3 Q0 2 D1
4 Q1 5 D2
7 Q2 6 D3
8 Q3 9 D4
13 Q4 12 D5
14 Q5 15 D6
17 Q6 16 D7
18 Q7 19 OE
1 LE 11
1
U3:A
74LS28
A 1 B 2 C 3
E1 6 E2 4 E3 5
Y0 15Y1 14Y2 13Y3 12Y4 11Y5 10Y6 9Y7 7
Trang 29Bài tập 3: Viết chương trình tạo xung 1Khz, duty
cycle là 40% trên chân P1.7, trong khi đó liên tục phát chuỗi k{ tự “Hello world” ra LCD 16x2.
Trang 30Bộ môn Kỹ Thuật Điện Tử - ĐHBK
- Ngược lại thì phát nó ra cổng nối tiếp.
- Trong khi đó liên tục tao xung vuông 500Hz trên chân
P1.3
Yêu cầu dùng ngắt cổng nối tiếp, thạch anh 12Mhz, tốc độ baud 9600.
30CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang 31Tài liệu tham khảo
• Hồ Trung Mỹ, Vi xử l{, Nhà xuất bản Đại học Quốc Gia
Tp HCM - 2003
• I Scott MacKenzie , The 8051 Microcontroller, 2nd
Edition, Prentice-Hall, 1995
• Derek Molloy, EE402 - Lecture note
• Slide bài giảng thầy Hồ Trung Mỹ
• Thomas W.Schultz, C and the 8051 – Second Edition.
• Dogan Ibrahim, Microcontroller Projects in C for the
8051, Newnes – 2000.