THÍ NGHIỆM 1Viết chương trình con DisplayLed0 hiển thị lên LED 7 đoạn số 0 giá trị chứa trong thanh ghi R0 Viết chương trình chính hiển thị số 9 lên LED 7 đoạn số 0 bằng cách cho R0 bằng
Trang 1THÍ NGHIỆM 1
Viết chương trình con DisplayLed0 hiển thị lên LED 7 đoạn số 0 giá trị chứa trong thanh ghi R0
Viết chương trình chính hiển thị số 9 lên LED 7 đoạn số 0 bằng cách cho R0 bằng 9 và gọi chương trình con DisplayLed0
Code1:
DisplayLed0:
MOV A,#0E0H
ADD A, R0
MOV DPTR, #0000H
MOVX @DPTR,A
RET
Code2:
ORG 2000H
MAIN:
MOV R0,#9
LCALL DisplayLed0
DisplayLed0:
MOV A,#0E0H
ADD A, R0
MOV DPTR, #0000H
MOVX @DPTR,A
RET
END
Trang 2Yêu cầu
Viết chương trình hiển thị lên LED 7 đoạn số 0 các con số từ 0 đến 9 sau các khoảng thời gian 1s
Code:
ORG 2000H
MAIN:
MOV R0,#0
LOOP:
LCALL DisplayLed0
LCALL Delay1s
INC R0
CJNE R0,#10,LOOP
SJMP MAIN
DisplayLed0:
MOV A,#0E0H
ADD A, R0
MOV DPTR, #0000H
MOVX @DPTR,A
RET
Delay1s:
MOV R7,#8
LAP2: MOV R6,#240
LAP1: MOV R5,#240
DJNZ R5, $
DJNZ R6, LAP1
DJNZ R7, LAP2
RET
END
Trang 3THÍ NGHIỆM 3
Yêu cầu
Viết chương trình con DisplayLED xuất giá trị chứa trong thanh ghi R0 lên LED 7 đoạn có
số thứ tự chứa trong thanh ghi R1
R0 nằm trong tầm từ 0-9 và R1 trong tầm từ 0-3
Sau đó dùng chương trình con này viết chương trình chính xuất giá trị 1 lên LED 7 đoạn số 3
Viết chương trình con:
Cách 1:
DisplayLED:
MOV DPTR,#TABLE
MOV A,R1
MOVC A,@A+DPTR
ADD A,R0
MOV DPTR, #0000H
MOVX @DPTR, A
RET
TABLE: DB 0E0H, 0D0H, 0B0H,70H
Cách 2:
DisplayLED:
MOV B, R1; Đưa nội dung trong R1 vào B
INC B; Tăng giá trị B lên 1
MOV A, #11110111B ;bit số 3 bằng 0, bốn bit cao bằng 1
Trang 4DJNZ B,SHIFTLOOP ; Giảm B đi 1, nếu khác 0 thì quay lại nhãn SHIFTLOOP
ANL A, #0F0H ; Nếu B giảm đến 0 thì giữ lại 4 bit cao của A
PUSH ACC; Cất Acc vào StackPointer
MOV A, R0; Đưa nội dung R0 vào A
ANL A, #0FH; Giữ lại 4 bit thấp của A
MOV R0, A; Đua nội dung của A vào R0
POP ACC ;Lấy lại A từ StackPointer
ORL A, R0; Cộng A với R0, rồi lưu vào A
RET
CHƯƠNG TRÌNH CHÍNH:
ORG 0000H
MOV R1,#3
MOV R0,#1
LCALL DisplayLED
SJMP $
DisplayLED:
MOV DPTR, #0000H
MOVX @DPTR, A
RET
END
Câu hỏi
Giải thích ý nghĩa các lệnh của đoạn chương trình trong hướng dẫn
Trang 5THÍ NGHIỆM 5
Yêu cầu
Viết chương trình hiển thị số 1 lên LED7 đoạn 0, sau đó 1s hiển thị số 2 lên LED 7 đoạn 1, sau đó 1s hiển thị số 3 lên LED 7 đoạn 2, sau đó 1s hiển thị số 4 lên LED 7 đoạn 3 Quá trình này lặp đi lặp lại Việc hiển thị này sử dụng chương trình con DisplayLED đã viết ở trên
Giảm thời gian trễ xuống còn 100 ms Quan sát hiện tượng
Tính toán thời gian trễ sao cho không còn thấy LED nhấp nháy và áp dụng vào chương trình Giảm thời gian trễ xuống bằng 0 (không sử dụng hàm delay) Quan sát hiện tượng
Kiểm tra
CODE:
ORG 0000H
MAIN:
MOV R1,#0
MOV R0,#1
LOOP:
LCALL DisplayLED
LCALL Delay1s
INC R1
INC R0
CJNE R1,#4,LOOP
SJMP MAIN
DisplayLED:
Trang 6MOVC A,@A+DPTR
ADD A,R0
MOVX @DPTR, A
RET
Delay1s:
MOV R7,#8
LAP2: MOV R6,#240
LAP1: MOV R5,#240
DJNZ R5, $
DJNZ R6, LAP1
DJNZ R7, LAP2
RET
TABLE: DB 0E0H, 0D0H, 0B0H,70H
END
Câu hỏi
Thời gian trễ để không còn thấy LED nhấp nháy là bao nhiêu theo lý thuyết? Giải thích cách tính
- Cách tính: Với tần số thạch anh sử dụng là 11.0592 MHz , ta có:
1 MC= 12/ 11.0592 MHz= 1.085 µs
Trang 7Xét sơ đồ sau:
Ta thấy, khoảng cách giữa 2 lần LED X sáng/tắt là 4T Mà theo lý thuyết, nếu số lần LED sáng tắt lớn hơn 24 lần trong 1 giây thì mắt người coi như LED sáng liên tục Suy ra, thời gian trễ lớn nhất cần tìm là: 1s=24*4T T= 10 416 µs= 9600 MCs
Khi giảm rất nhỏ thời gian trễ, hiện tượng xảy ra là gì? Giải thích
- Hiện tượng: Không thấy LED 7 đoạn sáng
- Giải thích: Tần số chớp tắt quá nhanh, mắt người không nhìn được
T
Trang 8ORG 0000H
MAIN:
MOV 00H,#0 ;GTLED0
MOV 01H,#0 ;GTLED1
MOV 02H,#0 ;GTLED2
MOV 03H,#0 ;GTLED3
BACK: MOV R4,#0 ; CHON LED
;CHON R5 LAM BIEN TRUNG GIAN
MOV R5, 00H
LCALL DisplayLED
LCALL Delay
INC R4
MOV R5, 01H
LCALL DisplayLED
LCALL Delay
INC R4
MOV R5, 02H
LCALL DisplayLED
LCALL Delay
INC R4
Trang 9MOV R5, 03H
LCALL DisplayLED
LCALL Delay
LCALL GIATRI
SJMP BACK
GIATRI:
INC 00H
CJNE R0,#10, NEXT0
INC 01H
MOV 00H,#0
CJNE R1,#10, NEXT0
INC 02H
MOV 00H,#0
MOV 01H,#0
CJNE R2, #10, NEXT0
INC 03H
MOV 00H,#0
MOV 01H,#0
MOV 02H,#0
CJNE R3, #10, NEXT0
SJMP MAIN
NEXT0: RET
Trang 10MOV DPTR,#TABLE
MOV A,R4
MOVC A,@A+DPTR
ADD A,R5
MOVX @DPTR, A
RET
Delay:
MOV R7,#20
LAP: MOV R6,#240
DJNZ R6, $
DJNZ R7, LAP
RET
TABLE: DB 0E0H, 0D0H, 0B0H,70H
END