You are on page 1of 8

BÀI 1: LẬP TRÌNH GIAO TIẾP LED ĐƠN VÀ PHÍM ĐƠN

THÍ NGHIỆM 1:Viết chương trình thực hiện việc đọc liên tục trạng thái của nút nhấn được
nối đến P1.0 và hiển thị ra led được nối tại chân P3.0 (bit thứ 0 của led thanh BL202).
ORG 2000H
LOOP:
SETB P1.0
MOV C, P1.0
MOV P3.0,C
SJMP LOOP
END
- LED nối vào P1.0 và P3.0 đều bị tác động. LED tại P1.0 bị tác động do phần cứng, khi nhấn
phím, mức điện áp trên P1.0 bằng 0, đầu còn lại của LED được nối với điện trở và nối lên
VCC nên đèn tại P1.0 sáng. Tương tự, tại P3.0, 1 đầu LED được nối vào điện trở và nối đến
VCC, đầu còn lại nối đến P3.0. Khi nhấn nút, P1.0 có mức điện áp thấp, phần mềm sẽ đọc
mức điện áp và đặt cho P3.0 mức điện áp thấp nên đèn sáng.
- Tất cả các chân trên P1 và P3 đều có thể sử dụng do tất cả các chân đều có thể dùng làm
chân IO.

THÍ NGHIỆM 2:
Biên dịch và thử nghiệm chương trình cho sẵn sau:
ORG 2000H
MAIN:
CPL P3.0
JMP MAIN
END
- Theo lý thuyết, với thạch anh 11.0592MHz, chương trình trên sẽ tạo ra sóng vuông trên
P3.0 với chu kì 6.5us
- Vẽ dạng sóng:
- Tần số tối đa một xung tuần hoàn có chu kỳ nhiệm vụ 50% có thể đạt được là 153600Hz với
đoạn code như trên
THÍ NGHIỆM 3:
Viết chương trình tạo xung vuông 1 KHz, chu kỳ nhiệm vụ 50% trên P3.0
ORG 2000H
CONT:
CPL P3.0
ACALL DELAY05MS
SJMP CONT
DELAY05MS:
MOV R7,#230
LOOP:
DJNZ R7,LOOP
RET
END
- Vòng trễ tạo ra với thời gian trễ 0.5ms. Mỗi vòng lặp DJNZ có thời gian thực thi 2 chu kì
máy, mỗi chu kì máy có thời gian bằng 12 chu kì thạch anh. Gọi n là số lần lặp:
1
0.5(10^-3) = 2n.Tmáy = 2n.12Txtal = 24n.(11059200) => n = 230.4 => chọn n = 230
- Vẽ lại dạng sóng:
- Sai số nhỏ nhất có thể đạt được: (230.4-230)/230.4=0.17%

THÍ NGHIỆM 4:
Viết chương trình con Delay1sIns và dùng chương trình con này để chớp/tắt LED đơn gắn
vào P1.0 sau mỗi khoảng thời gian 1s.
ORG 2000H
LOOP:
CPL P1.0
ACALL DELAY1SINS
SJMP LOOP
DELAY1SINS:
MOV R7,#7
LOOP1:
MOV R6,#250
LOOP2:
MOV R5,#250
LOOP3:
DJNZ R5,LOOP3
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
END
- Tính thời gian delay 1s:
1
1=2n.Tmáy=2n.12Txtal=24n.( 11059200) => n=460800 => chọn n1=250; n2=250; n3=7
THÍ NGHIỆM 5:
Viết chương trình tạo hiệu ứng quay LED: các LED đơn trên BARLED1 sáng lần lượt từ trái
sang phải sau thời gian 1s và lặp lại. Sử dụng chương trình con 1s đã viết ở trên.
ORG 2000H
MOV DPTR,#SIGNAL
LAP1:
MOV R1,#8
LAP2:
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
ACALL DELAY1SINS
DJNZ R1,LAP2
MOV P1,#0FFH
SJMP LAP1
DELAY1SINS:
MOV R7,#25
LOOP1:
MOV R6,#250
LOOP2:
MOV R5,#250
LOOP3:
DJNZ R5,LOOP3
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
SIGNAL:
DB 00H,01H,03H,07H,0FH,1FH,3FH,7FH
END
- LED ngoài cùng bên trái nối với MSB của P1
BÀI 2: LẬP TRÌNH TIMER VÀ HIỂN THỊ LED 7 ĐOẠN
THÍ NGHIỆM 1:
Viết chương trình tạo sóng vuông 1 KHz trên chân P1.0 sử dụng timer 0 ở chế độ 1
- Có dùng timer mod 2 kết hợp vòng lặp
ORG 2000H
LOOP:
CPL P1.0
ACALL DELAY05MS
SJMP LOOP
DELAY05MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-461)
MOV TL0,#LOW(-461)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END

- Dạng sóng có thể bị sai số, để hạn chế sai số, ta nên tính toán giá trị nạp vào TH0 và TL0
bằng tần số xtal của mạch
THÍ NGHIỆM 2:
Viết chương trình tạo sóng vuông 10 KHz trên chân P1.0 sử dụng timer 0 ở chế độ 2
ORG 2000H
MOV TMOD,#02H
MOV TH0,#-46
SETB TR0
LOOP:
JNB TF0,$
CLR TF0
CPL P1.0
SJMP LOOP
END
- Ở chế độ 2, độ trễ gây ra do các câu lệnh đảo giá trị bit gây sai số cho dạng sóng ngõ ra.
Tuy nhiên sai số là không lớn

THÍ NGHIỆM 3:
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
ORG 2000H
MOV R7, #128 ; Giá trị ví dụ
LCALL BI2BCD
AGAIN: ; HIEN THI HANG DON VI
MOV A, 21H
MOV DPTR, #DONVI
MOVC A, @A+DPTR
MOV DPTR, #0000H
MOVX @DPTR, A
LCALL DELAY ; HIEN THI HANG CHUC
MOV A, 22H
MOV DPTR, #CHUC
MOVC A, @A+DPTR
MOV DPTR, #0000H
MOVX @DPTR, A
LCALL DELAY ; HIEN THI HANG TRAM
MOV A, 23H
MOV DPTR, #TRAM
MOVC A, @A+DPTR
MOV DPTR, #0000H
MOVX @DPTR, A
LCALL DELAY
SJMP EXIT
DELAY:
MOV TH0, #HIGH(-1000)
MOV TL0, #LOW(-1000)
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
RET
RET
BI2BCD:
MOV A, R7
MOV B, #10
DIV AB
MOV 21H, B ; LUU HANG DON VI
MOV B, #10
DIV AB
MOV 22H, B ; LUU HANG CHUC
MOV 23H, A ; LUU HANG TRAM
RET
DONVI:
DB 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0E6H, 0E7H, 0E8H, 0E9H
CHUC:
DB 0D0H, 0D1H, 0D2H, 0D3H, 0D4H, 0D5H, 0D6H, 0D7H, 0D8H, 0D9H
TRAM:
DB 0B0H, 0B1H, 0B2H, 0B3H, 0B4H, 0B5H, 0B6H, 0B7H, 0B8H, 0B9H
EXIT:
NOP
END THÍ NGHIỆM 4:
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
ORG 2000H
MOV R0,#0
LOOP:
ACALL DISPLAYLED0
INC R0
ACALL DELAY1S
CJNE R0,#10,LOOP
MOV R0,#0
SJMP LOOP
DISPLAYLED0:
MOV A,R0
ADD A,#0E0H
MOV DPTR,#0000H
MOVX @DPTR,A
RET
DELAY1S:
MOV R7,#18
TIMELOOP:
MOV TMOD, #01H
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R7,TIMELOOP
RET
END

You might also like