Bài giảng vi xử lý Chương 4: Các chức năng của họ vi điều khiển mcs-51

- Có 128 mã ASCII 7-bit trong bảng mã ASCII. Các mã này bao gồm 95 mã đồ hoạ (từ

20H đến 7EH) và 33 mã điều khiển (từ 00H đến 1FH và 7FH). Ở đây ta chỉ xuất các mã đồ họa

(từ 20H đến 7EH).

- Sử dụng ngắt port nối tiếp để phát ký tự: khi có ngắt TI = 1 (báo bộđệm phát đã rỗng)

?vào chương trình phục vụ ngắt để gởi mã đồ họa tiếp theo ra bộ đệm phát. Trước khi gởi, cần

phải kiểm tra xem đã hết tập mã ASCII chưa, nếu hết thì phát lại từ đầu.

pdf20 trang | Chia sẻ: thienmai908 | Lượt xem: 1289 | Lượt tải: 0download
Nội dung tài liệu Bài giảng vi xử lý Chương 4: Các chức năng của họ vi điều khiển mcs-51, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
ISR được bắt đầu với một lệnh nhảy đến một vùng khác của bộ nhớ chương trình, ở đó chương trình được trải rộng nếu cần. Khuôn mẫu chương trình sau có thể được sử dụng: ORG 0000H LJMP MAIN ; nhảy đến chương trình chính ORG 0003H ; điểm nhập của trình phục vụ ngắt ngoài 0 LJMP EXT0_ISR ; nhảy đến chương trình phục vụ ngắt ngoài 0 ORG 000BH ; điểm nhập của trình phục vụ ngắt timer 0 LJMP T0_ISR ; nhảy đến chương trình phục vụ ngắt timer 0 … … ORG 0030H ; bắt đầu chương trình chính tại 0030H MAIN: Thường là các khởi động ban đầu, các lệnh gọi chương trình con, … … … ;SJMP $ ; các chương trình con CTCON_1: … … RET 14 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 CTCON_2: … … RET … … ; các chương trình phục vụ ngắt EXT0_ISR: … … RETI T0_ISR: … … RETI … … END 5. Các ví dụ Ví dụ 3.1: Viết chương trình sử dụng ngắt timer 0 để tạo một sóng vuông đối xứng tần số 10KHz trên chân P1.0. Giả sử fOSC = 12 MHz. Giải: - Sóng vuông f = 10KHz → T = 0,1ms = 100μs → tL = tH = 50μs → cho timer đếm 50μs → sử dụng timer 0, chế độ 2 (8 bit tự động nạp lại). - Mỗi lần tràn, timer 0 tạo ra một ngắt (TF0 = 1). Chương trình phục vụ ngắt chỉ cần lấy bù giá trị ở chân P1.0 (do đối xứng) → sử dụng chương trình phục vụ ngắt có kích thước nhỏ. Chương trình: ORG 0 ; điểm nhập khi reset LJMP MAIN ; nhảy đến chương trình chính ORG 000BH ; vector ngắt timer 0 T0_ISR: ; chương trình phục vụ ngắt timer 0 CPL P1.0 ; lấy bù chân P1.0 RETI ; trở về chương trình chính ORG 0030H ; điểm nhập chương trình chính MAIN: ; chương trình chính MOV TMOD,#02H ; khởi động timer 0, chế độ 2 MOV TH0,#-50 ; cho timer 0 đếm 50μs SETB TR0 ; cho phép timer 0 chạy MOV IE,#82H ; cho phép ngắt timer 0 SJMP $ ; không làm gì, chỉ chờ ngắt END Ví dụ 3.2: Viết chương trình sử dụng các ngắt timer để tạo đồng thời 2 sóng vuông đối xứng có tần số là 7KHz và 500Hz trên các chân P1.7 và P1.6. Giả sử fOSC = 12 MHz. Giải: - Hai sóng vuông có tần số khác nhau: + f1 = 7KHz → T1 ≈142μs → tL1 = tH1 = 71μs → dùng timer 0, chế độ 2 (8 bit tự động nạp lại) tạo ngắt lấy bù giá trị trên chân P1.7. 15 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 + f2 = 500Hz → T2 = 2ms = 2000μs → tL2 = tH2 = 1000μs → dùng timer 1, chế độ 1 (16 bit) tạo ngắt lấy bù giá trị trên chân P1.6. - Sử dụng chương trình phục vụ ngắt kích thước lớn vì khi dùng timer 1 ở chế độ 1, trong chương trình phục vụ ngắt phải nạp lại giá trị cho các thanh ghi TH1 và TL1 → chương trình sẽ vượt quá 8 byte. Chương trình: ORG 0 LJMP MAIN ORG 000BH ; vector ngắt timer 0 LJMP T0_ISR ORG 001BH ; vector ngắt timer 1 LJMP T1_ISR ORG 0030H MAIN: MOV TMOD,#12H ; khởi động timer 0 ở chế độ 2 và timer 1 ở chế độ 1 MOV TH0,#-71 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR0 SETB TR1 MOV IE,#8AH ; cho phép ngắt timer 0 và timer 1 SJMP $ T0_ISR: ; chương trình phục vụ ngắt timer 0 CPL P1.7 RETI T1_ISR: ; chương trình phục vụ ngắt timer 1 CLR TR1 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR1 CPL P1.6 RETI END Ví dụ 3.3: Viết chương trình sử dụng ngắt để liên tục phát đi tập mã ASCII (bỏ qua các mã điều khiển) đến 1 thiết bị đầu cuối nối với 8051 qua port nối tiếp. Giả sử truyền UART 8 bit, tốc độ baud là 1200, bit SMOD = 1. Giải: - Có 128 mã ASCII 7-bit trong bảng mã ASCII. Các mã này bao gồm 95 mã đồ hoạ (từ 20H đến 7EH) và 33 mã điều khiển (từ 00H đến 1FH và 7FH). Ở đây ta chỉ xuất các mã đồ họa (từ 20H đến 7EH). - Sử dụng ngắt port nối tiếp để phát ký tự: khi có ngắt TI = 1 (báo bộ đệm phát đã rỗng) → vào chương trình phục vụ ngắt để gởi mã đồ họa tiếp theo ra bộ đệm phát. Trước khi gởi, cần phải kiểm tra xem đã hết tập mã ASCII chưa, nếu hết thì phát lại từ đầu. Chương trình: ORG 0 LJMP MAIN ORG 0023H LJMP SP_ISR ; vector ngắt port nối tiếp ORG 0030H 16 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 MAIN: ; chương trình chính MOV TMOD,#20H ; khởi động timer 1, chế độ 2 MOV TH1,#-26 ; tốc độ baud của port nối tiếp là 1200 SETB TR1 ; cho timer 1 chạy để tạo xung clock tốc độ baud MOV SCON,#42h ; port nối tiếp ở chế độ 1 (UART 8 bit, tốc độ thay đổi), ; cho TI = 1: buộc ngắt để gởi ký tự đầu tiên MOV A,#20H ; ký tự đầu tiên là 20H MOV IE,#90H ; cho phép ngắt port nối tiếp SJMP $ SP_ISR: ; chương trình phục vụ ngắt port nối tiếp CJNE A,#7FH,SKIP ; nếu chưa hết tập mã đồ họa ASCII thì phát ký tự kế MOV A,#20H ; nếu hết thì phát lại từ mã đồ họa đầu tiên (20H) SKIP: MOV SBUF,A ; gởi ký tự đến bộ đệm phát INC A ; tăng lên ký tự kế CLR TI ; xóa cờ ngắt phát, chuẩn bị cho lần phát kế tiếp RETI END Ví dụ 3.4: Điều khiển lò nung Giả sử có một bộ cảm biến nhiệt được nối với chân INT0 (P3.2) và INT1 (P3.3) cung cấp hai tín hiệu HOT và COLD như sau: HOT = 0 nếu nhiệt độ > 210C COLD= 0 nếu nhiệt độ < 190C Lò được điều khiển bật/tắt thông qua chân P1.7 : P1.7 = 1 bật lò, P1.7 = 0 tắt lò. 8051 INT0 (P3.2) P1.7 Viết chương trình sử dụng các ngắt để điều khiển lò nung sao cho nhiệt độ lò được duy trì ở 200C ± 10C. Giải: Chương trình sẽ bật lò (P1.7 = 1) khi nhiệt độ < 190C và tắt lò (P1.7 = 0) khi nhiệt độ >210C. Khi nhiệt độ trong [190C, 210C], các ngõ vào HOT và COLD đều là 1. Khi nhiệt độ < 190C, HOT = 0 hay nhiệt độ > 210C, COLD= 0 → tạo xung cạnh xuống kích vào chân ngắt ngoài INT0 hay INT1 . Như vậy trong chương trình phục vụ các ngắt ngoài này chỉ cần đặt hay xóa bit P1.7. Chương trình: ORG 0 LJMP MAIN INT1 (P3.3) HOT Bật/tắt lò COLD 17 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 ORG 0003H EXT0_ISR: CLR P1.7 ; tắt lò RETI EXT1_ISR: SETB P1.7 ; bật lò RETI ORG 0030H MAIN: MOV IE,#85H ; cho phép ngắt ngoài 0 và 1 SETB IT0 ; tác động cạnh xuống SETB IT1 SETB P1.7 ; ban đầu, bật lò JB P3.2,SKIP ; nếu nhiệt độ > 210C CLR P1.7 ; thì tắt lò SKIP:SJMP $ ; không làm gì END 18 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 BÀI TẬP CHƯƠNG 4 Phần timer (Giả sử hệ thống dùng thạch anh 12MHz) 4.1. Viết chương trình dùng timer tạo trễ 200μs. 4.2. Viết chương trình dùng timer tạo trễ 50ms. 4.3. Viết chương trình dùng timer tạo một xung mức cao trên chân P1.7 trong 1s. 4.4. Viết chương trình dùng timer tạo sóng vuông đối xứng có tần số f = 500Hz trên chân P1.0. 4.5. Viết chương trình dùng timer tạo sóng vuông đối xứng trên chân P1.0 có tần số f = 500Hz, duty cycle = 30% (thời gian mức cao = 30% thời gian của chu kì xung). 4.6. Giả sử có một hệ thống đếm số người đi vào một siêu thị như trong hình vẽ B4.6. Bộ cảm biến sẽ tạo ra 1 xung (kích cạnh xuống) đưa vào chân T1 của 8051 (P3.5) khi có 1 người đi vào siêu thị. Một bóng đèn được điều khiển bởi chân P1.7 sẽ sáng khi P1.7 = 1 và tắt nếu P1.7 = 0. Hãy viết chương trình dùng timer để đếm số người và bật đèn báo hiệu khi có người thứ 10.000 đi vào siêu thị. 4.7. Viết chương trình dùng timer 0 đo thời gian mức cao của xung đưa vào chân INT0 (P3.2) của 8051. Thời gian đo được (tính bằng μs) được lưu vào ô nhớ 30H (byte thấp) và 31H (byte cao). Hình B4.6 8051 T1 P1.7 Phần port nối tiếp 4.8. Viết một đoạn chương trình khởi động port nối tiếp để thu dữ liệu ở chế độ UART 8 bit, tốc độ baud là 4800. Giả sử hệ thống dùng thạch anh 12MHz và bit SMOD = 0. 4.9. Viết chương trình nhập một chuỗi mã ASCII dài 80 byte từ port nối tiếp và cất vào RAM ngoài bắt đầu từ địa chỉ 2000H. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 2400, fOSC=12MHz và bit SMOD = 0. 4.10. Viết chương trình gởi liên tiếp các ký tự hiển thị được trong tập mã ASCII (có mã từ 20H đến 7EH) đến thiết bị gắn với port nối tiếp của 8051. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 1200, fOSC =12MHz và bit SMOD = 0. 4.11. Viết chương trình nhập các ký tự từ bàn phím vào port nối tiếp và xuất ra thiết bị gắn với port nối tiếp, chuyển các ký tự thường thành ký tự hoa. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 1200, fOSC =12MHz và bit SMOD = 0. 4.12. Tương tự bài 11 nhưng chuyển các ký tự hoa thành ký tự thường. 4.13. Giả sử có một chuỗi mã ASCII 20 byte chứa trong RAM nội bắt đầu từ ô nhớ 30H. Hãy viết chương trình phát chuỗi dữ liệu này ra port nối tiếp với điều kiện chỉ truyền các ký tự hoa. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 2400, fOSC = 8MHz và bit SMOD = 0. Phần ngắt (interrupt) Bộ cảm biến Đèn báo 19 Bài giảng VI XỬ LÝ Chương 4: Các chức năng của họ MCS-51 4.14. Viết chương trình dùng ngắt tạo sóng vuông đối xứng có tần số f = 400Hz trên chân P1.7. Giả sử hệ thống dùng thạch anh 12MHz. 4.15. Viết chương trình dùng ngắt để phát liên tiếp các ký tự hoa ra port nối tiếp. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 2400, fOSC = 12MHz và bit SMOD = 0. 4.16. Làm lại bài 4.9 của phần port nối tiếp nhưng dùng ngắt. 4.17. Làm lại bài 4.13 của phần port nối tiếp nhưng dùng ngắt. 4.18. Làm lại bài 4.6 của phần timer nhưng dùng ngắt, lúc này xung từ bộ cảm biến đưa vào chân INT1 (P3.4) thay vì chân T1. 4.19. Viết chương trình dùng ngắt để phát liên tiếp các ký tự hiển thị được trong tập mã ASCII (mã từ 20H đến 7EH) ra port nối tiếp, mỗi lần phát cách nhau 50ms. Giả sử truyền ở chế độ UART 8 bit, tốc độ baud là 2400, fOSC = 12MHz và bit SMOD = 0. 4.20. Giả sử có một hệ thống đếm sản phẩm như hình B4.20. Cứ mỗi sản phẩm chạy qua bộ cảm biến sẽ tạo ra một xung vuông (kích cạnh xuống) đưa vào chân INT0 (P3.2) của 8051. Hãy viết chương trình dùng các ngắt để đếm số sản phẩm, mỗi khi đủ 100 sản phẩm thì xóa bộ đếm và tạo một xung mức cao trên chân P1.7 trong thời gian 1 giây, sau đó lặp lại. 8051 Hình B4.20 4.21. Giả sử có một hệ thống báo động như hình B4.21. Bộ cảm biến cửa mở sẽ tạo ra một xung vuông (kích cạnh xuống) đưa vào chân INT0 (P3.2) của 8051. Hãy viết chương trình dùng các ngắt để tạo ra âm hiệu có tần số 400Hz trên loa (nối với chân P1.7) trong thời gian 3 giây nếu cửa bị mở. Giả sử hệ thống dùng thạch anh 12MHz. Hình B4.21 INT0 P1.7 Bộ cảm biến 8051 INT0 P1.7 Bộ cảm biến cửa mở 74LS04 20

Các file đính kèm theo tài liệu này:

  • pdfCh4.pdf