Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 142 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
142
Dung lượng
0,94 MB
Nội dung
VI ĐIỀU KHIỂN 89C51 Chương GIỚI THIỆU PHẦN CỨNG • • • • • • 89C51 thuộc họ MCS51 4Kbyte EPROM (1000 chu kỳ ghi/xóa) 128 byte RAM 32 I/O timer/counter 16bit nguồn ngắt SƠ ĐỒ CHÂN MƠ TẢ CÁC CHÂN • Port 0: port bit có chức – Là I/O port thiết kế cỡ nhỏ ( không sử dụng nhớ mở rộng) – Là byte thấp address/data bus thiết kế có sử dụng nhớ mở rộng • • Port 1: I/O port bit Port 2: port bit có chức – Là I/O port thiết kế cỡ nhỏ ( không sử dụng nhớ mở rộng) – Là byte cao address/data bus thiết kế có sử dụng nhớ mở rộng • Port 3: port bit có nhiều chức – Là I/O port – Có cơng dụng chuyển đổi có liên hệ với mơ tả bảng sau: tính đặc biệt 89C51 CÁC TÍN HIỆU ĐIỀU KHIỂN • PSEN ( Program Store Enable) – Là tín hiệu phép đọc nhớ chương trình mở rộng ( nhớ ngoài) – Khi 89C51 đọc mã lệnh từ nhớ chương trình mở rộng PSEN tích cực (mức thấp) lần chu kỳ máy – Khi 89C51 thi hành chương trình ROM nội PSEN mức cao • ALE/PROG ( Program Store Enable) – ALE ( Address Latch Enable) tín hiệu chốt byte thấp địa suốt q trình truy xuất nhớ ngồi – Chân làm ngõ vào xung lập trình (PROG) cho EPROM – Ở chế độ họat động bình thường xung ALE có tốc độ 1/6 tần số dao động chip dùng làm nguồn xung nhịp cho phần khác hệ thống NGẮT TIMER • Ngắt timer xảy ghi timer (THx / TLx) bị tràn cờ báo tràn (TFx) lên mức Khi chương trình phục vụ ngắt timer thực cờ TFx tự động xóa Ví dụ 1: Viết chương trình tạo sóng vng 50% có tần số 10KHz ngõ P1.0 sử dụng ngắt timer Biết dao động chip sử dụng thạch anh có tần số 12MHz – Phân tích u cầu: • Bộ dao động sử dụng thạch anh 12MHz nên ta có chu k ca xung nhp timer Ttimer =1às • Sóng vng có tần số 10KHz nên chu kỳ sóng T=10-4 s =100µs Do sóng vng 50% nên ta có tlow = thigh =50µs Vậy ta sử dụng timer để tạo thời gian trì hỗn 50µs, chương trình phục vụ ngắt timer cần làm công việc lấy bù bit P1.0 Chương trình nạp giá trị thích hợp để khởi động cho timer chạy khởi động ngắt – Chương trình hòan chỉnh: ORG 0000H; địa bắt đầu chương trình LJMP MAIN ORG 000BH; Địa vectơ ngắt timer ISR-T0: CPL P1.0 ; chương trình phục vụ ngắt timer RETI ORG 0030H ; Bắt đầu chương trình điểm ngồi tất ngắt MAIN: MOV TMOD,#02H ; Timer mode MOV TH0,#-50 SETB TR0 ; cho timer chạy MOV IE,#82H ; cho phép ngắt timer SJMP $ ; khơng làm END ; delay 50us Ví dụ 2: Viết chương trình liên tục nhận liệu 8bit port chuyển liệu port 1, lúc tạo sóng vng 50% có chu kỳ 200µs ngõ P2.1 Sử dụng ngắt timer để tạo sóng vng Biết dao động chip sử dụng thạch anh có tần số 12MHz ORG 0000H LJMP MAIN ORG 000BH ISR-T0: CPL P2.1 RETI ORG 0030H MAIN: MOV TMOD,#02H MOV TH0,# -100 SETB TR0 MOV IE,#82H LOOP: MOV A, P0 MOV P1, A SJMP LOOP END NGẮT PORT NỐI TiẾP • Ngắt port nối tiếp xảy cờ ngắt phát TI cờ ngắt thu RI đặt lên mức – Ngắt phát xảy truyền xong ký tự vừa ghi vào ghi SBUF – Ngắt thu xảy ký tự nhận xong đợi ghi SBUF để đọc • Khác với ngắt timer, cờ gây ngắt port nối tiếp khơng xóa phần cứng CPU chuyển đến ngắt • Nguồn ngắt xác định chương trình phục vụ ngắt phải xóa cờ tạo ngắt phần mềm • Ví dụ: Viết chương trình dùng ngắt port nối tiếp để thu liên tục ký tự cất vào 10byte nhớ RAM nội có địa đầu 20H Tốc độ baud 1200bps, tần số thạch anh 12MHz ORG 0000H; địa bắt đầu chương trình LJMP MAIN ORG 0023H; Địa vectơ ngắt port nối tiếp LJMP ISR-SP; nhảy đếnchương trình phục vụ ORG 0030H ; Bắt đầu chương trình điểm ngắt port nối tiếp tất ngắt MAIN: MOV SCON,#50H; Port nối tiếp nhận liệu UART 8bit MOV TMOD,#20H ; Timer mode MOV TH1,#-26 ; tạo tốc độ baud 1200bps SETB TR1 ; cho timer chạy MOV IE,#90H ; cho phép ngắt port nối tiếp MOV R0, #20H; gánđịa đầu vào R0 SJMP $ ; khơng làm ISR-SP : CLR RI;xóa cờ ngắt thu MOV A, SBUF;đọc liệu thu vào A MOV @R0,A; chuyển liệu vào ô nhớ ram nội INC R0; tăng địa ô nhớ CJNE R0,#2AH,EXIT; kiểm tra xem đủ thóat EXIT: RETI END 10byte liệu hay chưa, đủ NGẮT NGỒI • Ngắt ngồi xảy có mức thấp cạnh xuống chân INT0 hay INT1 Các cờ tạo ngắt bit IE0 IE1 ghi TCON • Sự lựa chọn ngắt tích cực mức thấp hay cạnh xuống lập trình qua bit IT0 hay IT1 ghi TCON – Nếu ITx =0 = ngắt ngồi kích khởi kích khởi mức thấp – Nếu ITx cạnh xuống ngắt ngòai • Khi ngắt ngồi sử dụng cạnh xuống lần có cạnh xuống cờ IE lên mức 1, cờ tự động xóa vào ISR • Sử dụng ngắt mức thấp cờ IE ln ngõ INTx mức thấp trở INTx lên mức cao Ví dụ: Ngõ INT1 nối đến cơng tắc bình thường mức cao Đèn led nối đến chân P1.3 Viết chương trình điều khiển đèn led sáng cơng tắc bật xuống mức thấp Khi led sáng phải sáng 500µs ORG 0000H LJMP MAIN ORG 0013H LJMP ISREX1 ORG 0030H MOV IE,#10000100B SJMP $ MAIN: ISR-EX1: SETB P1.3 MOV R3,#250 DJNZ R3,$ CLR P1.3 RETI END ... Chuyển liệu RAM nội RAM bên – Hướng chuyển liệu từ Nguồn đến Đích – Địa ngọai vi (ơ nhớ ngồi) nội dung ghi DPTR – Khi làm vi c với nhớ ngồi có dung lượng thấp (