1. Trang chủ
  2. » Tất cả

LAB_5_VI_X_LY_HCMUT

13 0 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

Cấu trúc

  • MỤC TIÊU:

  • CHUẨN BỊ:

  • THÍ NGHIỆM 1

  • THÍ NGHIỆM 2

  • THÍ NGHIỆM 3

  • THÍ NGHIỆM 4

  • BÀI TẬP 1 : DÙNG NGẮT CỔNG NỐI TIẾP

  • BÀI TẬP 2: DÙNG NGẮT TIMER0

Nội dung

BÀI TN LẬP TRÌNH NGẮT MỤC TIÊU:  Nắm cách lập trình cho ngắt 8051 CHUẨN BỊ:  Đọc chương tài liệu hướng dẫn  Viết chương trình mơ thí nghiệm THÍ NGHIỆM Mục tiêu Nắm cách sử dụng ngắt serial port Yêu cầu Viết chương trình làm song song công việc sau: Nhận byte từ máy tính xuất ngược lại (echo) lên hình terminal Bật LED gắn vào P1.1 SW 317 (gắn vào P1.0) nhấn, tắt LED phím nhả ORG 0000H LJMP MAIN ORG 0023H LJMP ISR_SPI MAIN: MOV IE,#10010000B MOV SCON,#01010010B MOV TMOD,#20H ORL PCON,#80H MOV TH1,#-3 SETB TR1 LOOP: MOV C,P1.0 MOV P1.1,C SJMP LOOP ISR_SPI: JB TI,TT CLR RI MOV A,SBUF MOV SBUF,A SJMP KT TT: CLR TI BÀI TN LẬP TRÌNH NGẮT KT: RETI END Hướng dẫn Sử dụng ngắt serial port, ngắt lả ngắt thu (cờ RI 1) xóa RI, đọc SBUF ghi trở lại vào SBUF Nếu TI xóa TI Tác vụ đọc Switch hiển thị LED viết chương trình Kiểm tra Biên dịch kiểm tra hoạt động chương trình THÍ NGHIỆM Mục tiêu Nắm cách sử dụng ngắt timer Yêu cầu Viết chương trình hiển thị lên LED đoạn số có chữ số, ký số chứa ô nhớ 20H, 21H, 22H 23H Ô nhớ 20H chứa số hàng nghìn Hướng dẫn Ở Lab ta viết chương trình DisplayLED hiển thị giá trị chứa R0, với số thứ tự LED chứa R1 Đồng thời, ta nắm cách quét LED cách cho LED sáng sau khoảng thời gian trễ Ở thí nghiệm này, LED đoạn quét sử dụng ngắt timer Để đạt tần số quét 25 Hz, LED sáng thời gian 10 ms BÀI TN LẬP TRÌNH NGẮT Các bước tiến hành: Cấu hình timer chế độ 1, thời gian tràn 10 ms Cho phép ngắt timer 0, cho timer chạy Sử dụng ghi R1 để xác định LED cần bật Ban đầu R1 0, R1 tăng lên sau lần bật LED để chuyển sang LED Khi R1 3, R3 quay lại Chương trình DisplayLED chứa giá trị hiển thị R0 Giá trị byte ô nhớ 20H, 21H, 22H 23H, tương ứng giá trị R1 (0-3) Đoạn chương trình sau cho phép lấy giá trị này: MOV A, R0 ADD A,R1 MOV R0,A MOV A,@R0 MOV R0,A Khi timer tràn, chương trình phục vụ ngắt ta cấu hình lại timer, hiển thị giá trị led đoạn tương ứng, cập nhật giá trị R1 để đến LED BÀI TN LẬP TRÌNH NGẮT ORG 0000H LJMP MAIN ORG 000BH LJMP ISR_T0 MAIN: MOV TMOD,#01H ;nap y gia tri dau MOV 20H,#1 MOV 21H,#6 MOV 22H,#1 MOV 23H,#5 MOV R1,#0 MOV IE,#10000010B SETB TF0 SJMP $ ISR_T0: ACALL QUET ACALL DISPLAY ACALL NAPTIMER ACALL KTRA RETI QUET: CJNE R1,#0,K_1 ;HANG DON VI MOV R0,23H SJMP TT K_1: CJNE R1,#1,K_2 ; HANG CHUC MOV R0,22H SJMP TT K_2: CJNE R1,#2,K_3 ;HANG TRAM MOV R0,21H SJMP TT K_3: MOV R0,20H ;HANG NGHIN TT: RET DISPLAY:MOV DPTR,#TABLE MOV A,R1 MOVC A,@A+DPTR ADD A,R0 MOV DPTR,#0000H MOVX @DPTR,A RET KTRA: INC R1 CJNE R1,#4,NEXT MOV R1,#0 NEXT: RET NAPTIMER:CLR TR0 MOV TH0,#HIGH(-9216) MOV TL0,#LOW(-9216) SETB TR0 RET TABLE: DB 0E0H,0D0H,0B0H,70H END BÀI TN LẬP TRÌNH NGẮT START Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho phép timer chạy Dừng timer, xóa cờ ngắt, đặt lại giá trị timer, cho phép timer chạy Lấy giá trị hiển thị LED vào R0 Hiển thị LED tương ứng Cập nhật giá trị R1 END Kiểm tra BÀI TN LẬP TRÌNH NGẮT Biên dịch kiểm tra hoạt động chương trình THÍ NGHIỆM u cầu Viết chương trình đếm số lần nhấn phím SW317, hiển thị lên LED đoạn Hướng dẫn Đếm số lần nhấn phím làm LAB3 Việc đếm số lần nhấn phím thực chương trình Giá trị cập nhật vào ô nhớ 20H, 21H, 22H 23H Ơ nhớ 20H chứa số hàng nghìn LED đoạn quét thí nghiệm dùng ngắt timer ORG 0000H K_1: CJNE R1,#1,K_2 ; HANG CHUC LJMP MAIN MOV R0,22H ORG 000BH SJMP TT LJMP ISR_T0 MAIN: ISR_T0: K_2: CJNE R1,#2,K_3 ;HANG TRAM MOV TMOD,#01H MOV R0,21H MOV 20H,#0 SJMP TT MOV 21H,#0 K_3: MOV R0,20H ;HANG NGHIN MOV 22H,#0 TT: MOV 23H,#0 DISPLAY:MOV DPTR,#TABLE MOV R1,#0 MOV A,R1 MOV IE,#10000010B MOVC A,@A+DPTR SETB TF0 ADD A,R0 SJMP $ MOV DPTR,#0000H ACALL QUET MOVX @DPTR,A ACALL DISPLAY RET ACALL DELAY KTRA: INC R1 ACALL KTRA CJNE R1,#4,NEXT ACALL SW317 MOV R1,#0 RETI QUET: DON VI RET CJNE R1,#0,K_1 ;HANG NEXT: RET DELAY: CLR TR0 MOV TH0,#HIGH(-8216) MOV R0,23H MOV TL0,#LOW(-8216) SJMP TT SETB TR0 BÀI TN LẬP TRÌNH NGẮT RET DJNZ R6,$ DJNZ R7,L1 SW317: JB P1.0,BOQUA DJNZ R5,L2 ACALL DELAY1MS POP INC 23H POP MOV A,23H POP CJNE A,#10,BOQUA RET INC 22H TABLE: MOV 23H,#0 END MOV A,22H CJNE A,#10,BOQUA INC 21H MOV 22H,#0 MOV A,21H CJNE A,#10,BOQUA MOV 21H,#0 INC 20H MOV A,20H CJNE A,#10,BOQUA MOV 20H,#0 MOV 21H,#0 MOV 22H,#0 MOV 23H,#0 BOQUA: RET ;Tạo độ trễ cho phím nhấn DELAY1MS:PUSH PUSH PUSH MOV R5,#2 L2: MOV R7,#200 L1: MOV R6,#250 DB 0E0H,0D0H,0B0H,70H BÀI TN LẬP TRÌNH NGẮT Kiểm tra Biên dịch kiểm tra hoạt động chương trình THÍ NGHIỆM u cầu Viết chương trình thực đồng hồ bấm giây, hiển thị lên LED đoạn Hai LED thể số giây, LED thể phần trăm giây Khi SW310 nhấn, đồng hồ reset SW 311 nhấn, đồng hồ bắt đầu chạy SW 312 nhấn, đồng hồ dừng lại Hướng dẫn LED đoạn quét thí nghiệm dùng ngắt timer Khi đồng hồ chạy, giá trị thời gian cập nhật dùng ngắt timer Giá trị cập nhật vào ô nhớ 20H, 21H, 22H 23H Các SW310, SW311, SW312 xử lý chương trình Kiểm tra Biên dịch kiểm tra hoạt động chương trình ORG LJMP MAIN MAIN: MOV TMOD,#11H ORG 000BH MOV TH0,#0 LJMP ISR_T0 MOV TL0,#0 BÀI TN LẬP TRÌNH NGẮT MOV 23H,#0 MOV A,20H MOV 22H,#0 CJNE A,#6,KT MOV 21H,#0 MOV 20H,#0 MOV 20H,#0 KT: MOV R0,#0 QUET: MOV R0,23H SETB TF0 SJMP TT LED_1: CJNE R1,#1,LED_2 ACALL QUET MOV R0,22H ACALL DISPLAY SJMP TT ACALL DELAY_LED LED_2: CJNE R1,#2,LED_3 ACALL KTRA_R1 MOV R0,21H SJMP LOOP SJMP TT ISR_T0: ACALL KTRA KTRA: CJNE R1,#0,LED_1 MOV R1,#0 MOV IE,#10000010B LOOP: RET LED_3: MOV R0,20H CLR TR0 TT: RET MOV TH0,#HIGH(-9216) KTRA_R1:INC R1 MOV TL0,#LOW(-9216) CJNE R1,#4,TT1 SETB TR0 MOV R1,#0 RETI TT1: RET INC 23H DISPLAY:MOV DPTR,#TABLE MOV A,23H MOV A,R1 CJNE A,#10,KT MOVC A,@A+DPTR MOV 23H,#0 MOV DPTR,#0 INC 22H ADD A,R0 MOV A,22H MOVX @DPTR,A CJNE A,#10,KT RET INC 21H MOV 22H,#0 DELAY_LED: MOV A,21H CJNE A,#10,KT CLR TR1 MOV TH1,#HIGH(- 9216) INC 20H MOV TL1,#LOW(-9216) MOV 21H,#0 SETB TR1 BÀI TN LẬP TRÌNH NGẮT JNB TF1,$ CLR TF1 CLR TR1 RET TABLE: DB 0E0H,0D0H,0B0H,70H END BÀI TẬP : DÙNG NGẮT CỔNG NỐI TIẾP Viết chương trình làm song song cơng việc sau: ấn phím bất k ỳ từ bàn phím (virtural terminal) led đoạn tăng từ tới sau lần ấn trở ( m ỗi lần ấn phím t ăng lên 1) Bật LED gắn vào P1.1 sw gắn vào P1.0 nhấn, tắt LED phím nhả ORG 0000H LJMP MAIN ORG 0023H LJMP ISR_SPI MAIN: MOV IE,#10010000B MOV SCON,#01010010B MOV TMOD,#20H ORL PCON,#80H MOV TH1,#-3 SETB TR1 MOV R7,#0 LOOP: MOV C,P1.0 MOV P1.1,C SJMP LOOP ISR_SPI:JB TI,TT CLR RI MOV A,SBUF BÀI TN LẬP TRÌNH NGẮT ACALL HIENTHI_LED SJMP KT TT: CLR TI KT: RETI HIENTHI_LED: MOV DPTR,#0000H INC R7 CJNE R7,#10,NEXT MOV R7,#0 NEXT: MOV A,R7 ADD A,#0D0H MOVX @DPTR,A RET END BÀI TẬP 2: DÙNG NGẮT TIMER0 Viết chương trình làm song song cơng việc sau: Viết chương trình hiển thị lên LED đoạn số có chữ số, ký số chứa ô nhớ 20H, 21H, 22H 23H Ô nhớ 20H chứa số hàng nghìn Bật LED gắn vào P1.1 SW gắn vào P1.0 nhấn, tắt LED phím nhả ORG 0000H MOV R1,#0 LJMP MAIN MOV IE,#10000010B ORG 000BH SETB TF0 LJMP ISR_T0 MAIN: MOV TMOD,#01H ;nap y gia tri dau LOOP: MOV C,P1.0 MOV P1.1,C SJMP LOOP MOV 20H,#1 MOV 21H,#6 ISR_T0: ACALL QUET MOV 22H,#1 ACALL DISPLAY MOV 23H,#5 ACALL NAPTIMER BÀI TN LẬP TRÌNH NGẮT ACALL KTRA END RETI QUET: VI CJNE R1,#0,K_1 ;HANG DON MOV R0,23H SJMP TT K_1: CHUC CJNE R1,#1,K_2 ; HANG MOV R0,22H SJMP TT K_2: TRAM CJNE R1,#2,K_3 ;HANG MOV R0,21H SJMP TT K_3: MOV R0,20H ;HANG NGHIN TT: RET DISPLAY:MOV DPTR,#TABLE MOV A,R1 MOVC A,@A+DPTR ADD A,R0 MOV DPTR,#0000H MOVX @DPTR,A RET KTRA: INC R1 CJNE R1,#4,NEXT MOV R1,#0 NEXT: RET NAPTIMER:CLR TR0 MOV TH0,#HIGH(-9216) MOV TL0,#LOW(-9216) SETB TR0 RET TABLE: DB 0E0H,0D0H,0B0H,70H BÀI TN LẬP TRÌNH NGẮT

Ngày đăng: 10/02/2022, 15:47

HÌNH ẢNH LIÊN QUAN

Nhận 1 byte từ máy tính và xuất ngược lại (echo) lên màn hình terminal - LAB_5_VI_X_LY_HCMUT
h ận 1 byte từ máy tính và xuất ngược lại (echo) lên màn hình terminal (Trang 1)

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w