1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng vi xử lý chương 4 các chức năng họ 8051

99 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Đại Học Giao Thông Vận Tải Tp.HCM Khoa Điện – Điện Tử Viễn Thông Học phần: Vi Xử Lý Chương 4: Các chức họ 8051 Giảng viên: TS NGUYỄN HỮU CHÂN THÀNH Chương bao gồm nội dung: Timer Port nối tiếp Interrupt Timer Giới thiệu -Một bộ định thời (timer) là một chuỗi các Flip Flop (FF) với mỗi FF là một mạch chia Chuỗi này nhận một tín hiệu ngõ vào làm xung clock kích cho tầng đầu tiên, ngõ của tầng đầu lại trở thành nguồn xung clock cho tầng kế tiếp Ngõ của tầng cuối cùng làm xung clock cho một FF báo tràn timer hay còn gọi là cờ tràn (overflow flag) Cờ tràn này sẽ được kiểm tra bởi phần mềm hay tạo một ngắt (interrupt) Hình minh họa một timer đơn giản 3-bit - Giá trị nhị phân các FF của timer được dùng để tính số xung clock (số chu kì) của tín hiệu ngõ vào từ timer bắt đầu đếm Giới thiệu - 8051/8031 có timer 16 bit: + Timer 0: số đếm chứa ghi TH0 (byte cao) và TL0 (byte thấp) + Timer 1: số đếm chứa ghi TH1 (byte cao) và TL1 (byte thấp) Ngoài ra, các chip 8032/8052 còn có thêm timer - Các timer chỉ đếm lên (0000H ÷ FFFFH) Khi sớ đếm tràn từ FFFFH xuống 0000H, cờ tràn sẽ được đặt lên Các ghi timer a Thanh ghi chế độ định thời (TMOD): - Không được định địa chỉ bit - Được dùng để định chế độ hoạt động cho các timer - Chức từng bit: + M1, M0: chọn chế độ hoạt động + C/T: bit chọn chức đếm hoặc định thời cho timer + Gate: bit điều khiển cổng cho bộ định thời Các ghi timer b Thanh ghi điều khiển định thời (TCON): - Chứa các bit điều khiển và trạng thái của timer và ở bit cao, bit thấp được dùng cho chức ngắt (interrupt) - Được định địa chỉ bit - Chức từng bit: + TFx: cờ tràn của timer x (x là hay 1) + TRx = 0: không cho phép timer chạy + TRx = 1: cho phép timer chạy Điều khiển định thời Điều khiển định thời - (Counter/Timer): + C/T= 0: timer nhận xung clock từ bộ dao động nội (sau qua bộ chia 12) Ứng dụng: thường dùng cho việc định thời một khoảng thời gian (mỗi số đếm tương ứng với chu kỳ máy) + C/T = 1: timer nhận xung clock từ chân Tx (P3.4 đối với timer và P3.5 đối với timer 1) Ứng dụng: thường dùng để đếm sự kiện bên ngoài Mỗi sự kiện tạo một xung kích vào chân Tx (tích cực cạnh xuống) Số các sự kiện được xác định phần mềm bằng cách đọc các ghi định thời (THx/TLx), giá trị 16-bit các ghi này tăng theo mỗi sự kiện Điều khiển định thời - Gate: + Gate = 0: việc điều khiển timer x chỉ phụ thuộc vào TRx TRx = 0: không cho phép timer x chạy TRx = 1: cho phép timer x chạy + Gate = 1: việc điều khiển timer x phụ thuộc vào TRx và /INTx TRx = và /INTX= 1: cho phép timer chạy Ứng dụng: thường dùng để đo độ rộng xung (thời gian xung ở mức cao) đưa vào ở chân Độ rộng xung tương ứng với 10 số đếm THx/TLx Các ví dụ ORG LJMP MAIN ORG 0023H LJMP SP_ISR ; vector ngắt port nối tiếp ORG 0030H MAIN: ; chương trình chính MOV TMOD,#20H ; khởi động timer 1, chế độ MOV TH1,#-26 ; tốc độ baud của port nối tiếp là 1200 SETB TR1 ; cho timer chạy để tạo xung clock tốc độ baud MOV SCON,#42h ; port nối tiếp ở chế độ (UART 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 $ 85 Các ví dụ 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 INC A CLR TI ; gởi ký tự đến bộ đệm phát ; tăng lên ký tự kế ; xóa cờ ngắt phát, chuẩn bị cho lần phát ; kế tiếp RETI END 86 Các ví dụ Ví dụ 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 (P3.2) và (P3.3) cung cấp hai tín hiệu và sau: /HOT = nếu nhiệt độ > 210C /COLD= nếu nhiệt độ < 190C Lò được điều khiển bật/tắt thông qua chân P1.7 : P1.7 = bật lò, P1.7 = tắt lò Viết chương trình sử dụng các ngắt để điều khiển lò nung cho nhiệt độ lò được trì ở 200C 10C 87 Các ví dụ Chương trình sẽ bật lò (P1.7 = 1) nhiệt độ < 190C và tắt lò (P1.7 = 0) nhiệt độ >210C Khi nhiệt độ [190C, 210C], các ngõ vào /HOT và /COLD đều là Khi nhiệt độ < 190C, /HOT= hay nhiệt độ > 210C, /COLD= tạo xung cạnh xuống kích vào chân ngắt ngoài hay Như vậy 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 88 Các ví dụ ORG LJMP MAIN ORG 0003H EXT0_ISR: CLR P1.7 RETI EXT1_ISR: SETB P1.7 RETI ORG 0030H MAIN: MOV IE,#85H SETB IT0 SETB IT1 SETB P1.7 JB P3.2,SKIP CLR P1.7 SKIP: SJMP $ END ; tắt lò ; bật lò ; cho phép ngắt ngoài và ; tác động cạnh xuống ; ban đầu, bật lò ; nếu nhiệt độ > 210C ; thì tắt lò ; không làm gì 89 Questions ??? Bài tập chương Bài tập chương 4: Timer (Xtal 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 chân P1.7 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 chân P1.0 4.5 Viết chương trình dùng timer tạo sóng vuông 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) 92 Bài tập chương 4: Timer (Xtal 12MHz) 4.6 Giả sử có một hệ thống đếm số người vào một siêu thị hình vẽ B4.6 Bộ cảm biến sẽ tạo xung (kích cạnh xuống) đưa vào chân T1 của 8051 (P3.5) có ngườ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 P1.7 = và tắt nếu P1.7 = Hãy viết chương trình dùng timer để đếm số người và bật đèn báo hiệu có người thứ 10.000 vào siêu thị 8051 Đèn báo Bộ cảm biến T1 P1.7 4.7 Viết chương trình dùng timer đo thời gian mức cao của xung đưa vào chân (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) 93 Bài tập chương 4: Serial port 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 bit, tốc độ baud là 4800 Giả sử hệ thống dùng thạch anh 12MHz và bit SMOD = 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 bit, tốc độ baud là 2400, fOSC=12MHz và bit SMOD = 4.10 Viết chương trình gởi liên tiếp các ký tự hiển thị được 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 bit, tốc độ baud là 1200, fOSC =12MHz và bit SMOD = 94 Bài tập chương 4: Serial port 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 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 bit, tốc độ baud là 1200, fOSC =12MHz và bit SMOD = 4.12 Tương tự bài 11 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 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 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 bit, tốc độ baud là 2400, fOSC = 8MHz và bit SMOD = 95 Bài tập chương 4: Interrupt 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 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 port nối tiếp Giả sử truyền ở chế độ UART bit, tốc độ baud là 2400, fOSC = 12MHz và bit SMOD = 4.16 Làm lại bài 4.9 của phần port nối tiếp dùng ngắt 4.17 Làm lại bài 4.13 của phần port nối tiếp dùng ngắt 96 Bài tập chương 4: Interrupt 4.18 Làm lại bài 4.6 của phần timer dùng ngắt, lúc này xung từ bộ cảm biến đưa vào chân (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 tập mã ASCII (mã từ 20H đến 7EH) port nối tiếp, mỗi lần phát cách 50ms Giả sử truyền ở chế độ UART bit, tốc độ baud là 2400, fOSC = 12MHz và bit SMOD = 97 Bài tập chương 4: Interrupt 4.20 Giả sử có một hệ thống đếm sản phẩm hình B4.20 Cứ mỗi sản phẩm chạy qua bộ cảm biến sẽ tạo 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 đủ 100 sản phẩm thì xóa bộ đếm và tạo một xung mức cao chân P1.7 thời gian giây, sau đó lặp lại 8051 Bộ cảm biến INT0 P1.7 98 Bài tập chương 4: Interrupt 4.21 Giả sử có một hệ thống báo động hình B4.21 Bộ cảm biến cửa mở sẽ tạo 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 âm hiệu có tần số 400Hz loa (nối với chân P1.7) thời gian giây nếu cửa bị mở Giả sử hệ thống dùng thạch anh 12MHz 8051 Bộ cảm biến cửa mở 74LS04 P1.7 INT0 99

Ngày đăng: 15/11/2023, 13:21