Chương IV: NGẮT TRONG 8951 Vi điều khiển 8951 có nguồn ngắt: ngắt ngoài 0, ngắt ngoài 1, ngắt timer 0, ngắt timer và ngắt truyền thông Sơ đồ xử lý ngắt: Bắt đầu chương trình chính Đoạn khởi động chương trình và khai báo sử dụng ngắt dừng chương trình chính Xảy sự kiện ngắt Vector ngắt Bắt đầu Chương trình Ngắt RETI I NGẮT NGOÀI 0: - Khai báo sử dụng ngắt: SETB EA SETB EX0 SETB IT0 ; nếu sự kiện ngắt là cạnh xuống - Sự kiện ngắt: - Xuất hiện mức thấp ở chân INT0 (default) - Xuất hiện cạnh xuống tại chân INT0 (nếu IT0 = 1) - Vector ngắt: 0003H - Cấu trúc chương trình: LJMP ORG LJMP MAIN 0003H NGAT_NGOAI0 SETB EA SETB EX0 LJMP BEGIN MAIN: BEGIN: NGAT_NGOAI0: RETI END ; có thể SETB IT0 II NGẮT NGOÀI 1: - Khai báo sử dụng ngắt: SETB EA SETB EX1 SETB IT1 ; nếu sự kiện ngắt là cạnh xuống - Sự kiện ngắt: - Xuất hiện mức thấp ở chân INT1 (default) - Xuất hiện cạnh xuống tại chân INT1 (nếu IT1 = 1) - Vector ngắt: 0013H - Cấu trúc chương trình: LJMP ORG LJMP MAIN 0013H NGAT_NGOAI1 SETB EA SETB EX1 LJMP BEGIN MAIN: BEGIN: NGAT_NGOAI1: RETI END ; có thể SETB IT1 III NGẮT TIMER0: - Khai báo sử dụng ngắt: MOV TMOD,# chế độ timer SETB EA SETB ET0 SETB TR0 ; mở timer - Sự kiện ngắt: Xuất hiện mỗi tràn timer (TF0 = 1) - Vector ngắt: 000BH - Cấu trúc chương trình: LJMP ORG LJMP MAIN 000BH NGAT_TIMER0 MOV SETB SETB SETB TMOD,#CHẾ ĐỘ TIMER EA ET0 TR0 LJMP BEGIN MAIN: BEGIN: NGAT_TIMER0: RETI END IV NGẮT TIMER1: - Khai báo sử dụng ngắt: MOV TMOD,# chế độ timer SETB EA SETB ET1 SETB TR1 ; mở timer - Sự kiện ngắt: Xuất hiện mỗi tràn timer (TF1 = 1) - Vector ngắt: 001BH - Cấu trúc chương trình: LJMP ORG LJMP MAIN 001BH NGAT_TIMER1 MOV SETB SETB SETB TMOD,#CHẾ ĐỘ TIMER EA ET1 TR1 LJMP BEGIN MAIN: BEGIN: NGAT_TIMER1: RETI END V NGẮT TRUYỀN THÔNG: - Khai báo sử dụng ngắt: MOV SCON,# chế độ truyền nhận MOV TMOD,#2XH SETB EA SETB ES SETB TR1 ; timer mode (8 bit autoreload) ; mở timer - Sự kiện ngắt: Xuất hiện mỗi nhận được byte hoặc truyền xong byte - Vector ngắt: 0023H - Cấu trúc chương trình: LJMP ORG LJMP MAIN 0023H NGAT_TT MOV MOV SETB SETB SETB SCON,# chế độ truyền nhận TMOD,#2XH EA ES TR1 LJMP BEGIN MAIN: BEGIN: NGAT_TT: CLR RETI END TI/RI BÀI TẬP: cho sơ đồ mạch VCC AT89C51 P3.3 P3.1 12Mhz 19 18 31 XTAL1 XTAL2 EA/VPP RST P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 ALE/PROG PSEN 21 22 23 24 25 26 27 28 R10 4k7 R12 4k7 Q1 A1013 LED3 LED7S a b c d e f g p R14 Q2 C2 LED7S 10 C1 a b c d e f g p C2 a b c d e f g p C1 10 LED7S a b c d e f g p LED2 C2 a b c d e f g p C1 a b c d e f g 10 p LED1 a b c d e f g p 10K Q3 A1013 A1013 VCC 30 29 20 VCC P3.7/RD P3.6/WR P3.5/T1 P3.4/T0 P3.3/INT1 P3.2/INT0 P3.1/TXD P3.0/RXD P0.7/AD7 P0.6/AD6 P0.5/AD5 P0.4/AD4 P0.3/AD3 P0.2/AD2 P0.1/AD1 P0.0/AD0 100x8 17 16 15 14 13 12 11 10 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 32 33 34 35 36 37 38 39 R1 R2 R3 R4 R5 R R6 R R7 R R8 R R R R STOP VCC 40 U5 GND START P3.3 C2 10uF/50V SENSOR R18 10K MOTOR Sản phẩm Băng tải P3.1 Trong đó: - P3.1 = 0: khởi động động kéo băng tải - P3.1 = 1: dừng motor - P3.3: nhận được một xung mỗi sản phẩm di chuyển ngang qua sensor (khi không có sản phẩm: P3.3 = 1, có sản phẩm P3.3 = 0) Sinh viên thực hiện các yêu cầu sau: - Thành lập bảng mã đoạn từ đến - Viết chương trình thực hiện: + Nhấn start: reset số đếm, khởi động động và đếm số sản phẩm (hiển thị led), số sản phẩm là 200 thì dừng động + Nhấn stop: dừng động (trong trường hợp số sản phẩm < 200) (dùng ngắt ngoài để đếm sản phẩm và ngắt timer để quét led với chu kì quét la 5mS) ... không có sản phẩm: P3.3 = 1, có sản phẩm P3.3 = 0) Sinh vi n thực hiện các yêu cầu sau: - Thành lập bảng mã đoạn từ đến - Vi ́t chương trình thực hiện: + Nhấn start: reset số