Professional Documents
Culture Documents
KHOA ĐI N T
H C PH N: VI X LÝ ậ VI ĐI U KHI N
MÃ HP: TEE408
BIÊN SO N: LÊ H I TRUNG
PH N: VI ĐI U KHI N 8051
org 0
;Khoi tao
main:
jb p1.0, OK
inc r0
cjne r0, #100, SoSanh
mov r0, #0
SoSanh:
ChoDoi:
jnb p1.0, ChoDoi
OK:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
hienthi r1, p3.0
hienthi r2, p3.1
jmp main
end
org 0
//khởi tạo
mov r0, #0
mov p2, #0
jmp main
mov a, led_data
mov p1, a
setb pin_ic_chot
clr pin_ic_chot
endm
main:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
call delay1s
inc r0
mov r0, #0
jmp main
Lap:
setb tr0
jnb tf0, $
clr tf0
clr tr0
ret
end
;khoi tao
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
mov a, ts1
movc a, @a+dptr
mov p2, a
endm
main:
jb p1.0, OK
inc r0
mov r0, #0
SoSanh:
ChoDoi:
OK:
hienthi r0
jmp main
end
org 0
jmp main
DUNG equ 0
PHAI equ 64
main:
call delay
call delay
call delay
call delay
call delay
call delay
call delay
jmp main
delay:
loop:
setb tr0
jnb tf0, $
clr tf0
clr tr0
ret
end
org 0
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
mov a, ts1
movc a, @a+dptr
mov p2, a
call delay
endm
hienthi r0
inc r0
mov r0, #0
OK:
hienthi r0
jmp main
delay:
mov r7, #5
ret
end
org 0
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
mov a, ts1
movc a, @a+dptr
mov p2, a
clr ts2
endm
main:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
call delay
inc r0
mov r0, #0
jmp main
delay:
mov r7, #5
ret
end
org 0
mov p2, #0
jmp main
setb ts1
clr ts2
call delay
endm
main:
setb p2.0
clr p2.0
jmp main
delay:
mov r7, #1
ret
end
org 0
;khoi tao
mov p2, #0xFF
mov r0, #0
jmp main
maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h
hienthi macro ts1
mov a, ts1
mov dptr, #maled
movc a, @a+dptr
mov p2, a
endm
main:
jb p3.2, OK
inc r0
cjne r0, #10, SoSanh
mov r0, #0
Created by Lê Hải Trung – K49KMT – TNUT 15
SoSanh:
ChoDoi:
jnb p3.2, ChoDoi
OK:
hienthi r0
jmp main
end
9. Thiết kế m ch và viết ch ơng trình hiển th các LED sáng liên tiếp trong m ch
có 8 LED đ ợc nối vào port P2 của vi điều khiển.( LED1 sáng, các LED còn
l i tắtầ., LED 2 sáng, các LED còn l i tắtầ). (kho ng th i gian trễ tùy ch n
để phù hợp v i hiển th )
org 0
mov p2, #0
jmp main
display macro ts1
setb ts1
call delay
mov p2, #0
endm
main:
display p2.0
display p2.1
display p2.2
display p2.3
display p2.4
Created by Lê Hải Trung – K49KMT – TNUT 16
display p2.5
display p2.6
display p2.7
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
10. Thiết kế m ch và viết ch ơng trình hiển th m ch có 8 LED đ ợc nối vào port
P1 của vi điều khiển các LED sáng l n l ợt từ LED1 đến LED8 (kho ng th i
gian trễ tùy ch n để phù hợp v i hiển th )
org 0
mov p1, #0
jmp main
hienthi macro ts1
setb ts1
call delay
endm
Created by Lê Hải Trung – K49KMT – TNUT 17
main:
hienthi p1.0
hienthi p1.1
hienthi p1.2
hienthi p1.3
hienthi p1.4
hienthi p1.5
hienthi p1.6
hienthi p1.7
mov p1, #0
call delay
jmp main
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
org 0
mov p3, #0
jmp main
sang_2ben macro ts1, ts2, ts3, ts4
setb ts1
setb ts2
call delay
setb ts3
setb ts4
call delay
endm
main:
sang_2ben p3.3, p3.4, p3.2, p3.5
sang_2ben p3.1, p3.6, p3.0, p3.7
mov p3, #0
call delay
jmp main
Created by Lê Hải Trung – K49KMT – TNUT 19
delay:
mov r7, #5
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
12. Viết ch ơng trình 6 LED xếp bi theo cơ chế stack. Led 1 sáng ngoài cùng bên
trái, Led 2 di chuyển từ ngoài cùng bên ph i đến xếp bên c nh Led 1, Led 3 di
chuyển từ ngoài cùng bên ph i đến xếp bên c nh Led 2... cứ nh vậy đến khi
đủ 6 Led cùng sáng
main:
mov p3, #0
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
surf p3.1, p3.2
call delay
surf p3.0, p3.1
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
surf p3.1, p3.2
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
surf p3.3, p3.4
call delay
surf p3.2, p3.3
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
Created by Lê Hải Trung – K49KMT – TNUT 21
surf p3.3, p3.4
call delay
setb p3.5
call delay
surf p3.4, p3.5
call delay
setb p3.5
call delay
jmp main
delay:
mov r7, #3
dl1: mov r6, #200
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
org 0
mov p2, #0xFF
D1 equ 0F9h
D2 equ 0A4h
D3 equ 0B0h
D4 equ 99h
D5 equ 92h
jmp main
main:
display p1.0, p1.1, p1.2, p1.3, p1.4
jmp main
end
14. Viết ch ơng trình gồm 2 nút b m. Nút thứ nh t (nối vào chân p1.0) tăng số
hiển th trên LED 7 thanh, nút thứ hai (nối vào chân p1.1) gi m số hiển th trên
LED 7 thanh. Yêu c u kho ng giá tr hiển th trên LED 7 thanh là từ 00 đến 99
org 0
mov r0, #0
mov p2, #0xFF
mov p3, #0
mov dptr, #maled
jmp main
setb ts2
clr ts2
endm
main:
NUT1:
jb p1.0, hienthi
inc r0
cjne r0, #100, OK
mov r0, #0
OK:
jnb p1.0, $
hienthi:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
display r1, p3.2
display r2, p3.3
NUT2:
jb p1.1, hienthi1
dec r0
cjne r0, #0, OK1
mov r0, #63h
OK1:
jnb p1.1, $
hienthi1:
mov a, r0
mov b, #10
div ab
mov r1, a
mov r2, b
display r1, p3.2
display r2, p3.3
jmp main
end
Created by Lê Hải Trung – K49KMT – TNUT 25
15. Viết ch ơng trình gồm 3 nút n để điều chỉnh hiển th dữ liệu lên LED 7 thanh.
n nút 1 (nối chân p1.0) thì tăng 1 giá tr , n nút 2 (nối chân p1.1) tăng 5 giá
tr , n nút 3 (nối chân p1.2) tăng 10 giá tr .
org 0
mov p2, #0xFF
mov p3, #0
mov r0, #0
mov dptr, #maled
jmp main
setb ts2
clr ts2
endm
hienthi_nut macro ts1, ts2
mov a, r0
mov b, #10
div ab
mov ts1, a
mov ts2, b
display ts1, p3.2
display ts2, p3.3
endm
Created by Lê Hải Trung – K49KMT – TNUT 26
main:
NUT1: //tang 1 don vi
jb p1.0, hienthi
inc r0
cjne r0, #100, OK
mov r0, #0
OK:
jnb p1.0, $
hienthi:
hienthi_nut r1, r2
NUT2: //tang 5 don vi
jb p1.1, hienthi1
mov a, r0
add a, #5
mov r0, a
cjne r0, #100, OK1
mov r0, #0
OK1:
jnb p1.1, $
hienthi1:
hienthi_nut r1, r2
NUT3: //tang 10 don vi
jb p1.2, hienthi2
mov a, r0
add a, #10
mov r0, a
cjne r0, #100, OK2
mov r0, #0
OK2:
jnb p1.2, $
hienthi2:
hienthi_nut r1, r2
jmp main
end
TIMER
M1 M0 Ch đ Ch đ ho t đ ng
0 1 1 Bộ đ nh th i 16 bit: không có đ t tr c.
1 0 2 Bộ đ nh th i 8 bit: tự n p l i.
16. Sử dụng Timer 0 ho c Timer 1 viết ch ơng trình t o 2 xung trên 2 chân P1.0 và
P1.1 v i t n số l n l ợt là 2KHz và 4KHz (Sử dụng osillocope để quan sát).
Biết t n số th ch anh là 12MHz
Tuy nhiên trong thao tác c u hình th i gian trễ b sai số, th ng là do câu lệnh
làm tăng th i gian trễ. Do đó, ta tăng giá tr TL0 cho hợp lý.
jmp main
delay:
mov tmod, #01h
mov th0, #0xFF
mov tl0, #0x92 //giá trị này tùy chỉnh do sai số
setb tr0
jnb tf0, $
clr tf0
clr tr0
ret
end
^SMOD ∗ Fxtal HZ
Baud =
^ − �� ∗ ∗ ∗ − ��
�� � �� �
TH1 = 256 - = 256 -
∗ ∗ � ∗ �
Các b c viết code thực hiện chức năng truy n:
1. N p thanh ghi TMOD: th ng dùng là timer 1 mode 2
2. N p thanh ghi TH1: để xác đ nh chế độ baud
3. N p thanh ghi SCON (v i giá tr 50H để báo chế độ nối tiếp. 1 để đóng
khung 8 bit dữ liệu, 1 bit start và 1 bit stop. Vì 50H = 0101.0000)
4. Bật c TR1 = 1 (để khởi động timer 1)
5. Byte kí tự c n ph i truyền đ ợc ghi vào thanh ghi SBUF
6. Ch đến khi c TI = 1 “xx:JNB TI, xx”
7. Xóa bit c TI bằng lệnh CLR TI
8. Truyền ký tự tiếp theo thì quay về b c 5
Ví dụ: Sử dụng cơ chế UART (truyền) để truyền ký tự ‘A’ vào máy tính. Biết Fxtal =
11,0592 MHz và tốc độ baud là 9600.
Gi i:
Đổi 11,0592 MHz = 11059200Hz
Tính toán giá tr thanh ghi TH1
main:
mov SBUF, #'A'
ChoDoi: jnb TI, ChoDoi
clr TI
call delay
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
Ví dụ: Hãy lập trình cho vi điều khiển 8051 để nhận các byte dữ liệu nối tiếp và đ t
chúng vào cổng P1. Đ t tốc độ baud là 4800, 8 bit dữ liệu và 1 bit stop. Cho t n số
th ch anh Fxtal = 11.0592
main:
jnb RI, main
mov A, SBUF
mov P1, A
clr RI
SJMP main
end
CÂU H I TH NG G P:
1. Viết ch ơng trình cho 8051 để truyền nối tiếp, liên tiếp một ký tự ‘B’ v i tốc
độ 19200 baud liên tục, Fxtal = 11.0592 MHz
Gi i:
Ta có giá tr thanh ghi TH1 = 256 - = 254,5. Vì m c đ nh là SMOD = 0 nên
∗
v i giá tr TH1 lẻ (254.5), ta sẽ l y TH1 – 1,5. Nh thế TH1 = 253 = FDh
main:
mov SBUF, #'B'
ChoDoi:
jnb TI, ChoDoi
clr TI
call delay
jmp main
delay:
mov r7, #1
dl1: mov r6, #255
dl2: mov r5, #255
dl3: djnz r5, dl3
djnz r6, dl2
djnz r7, dl1
ret
end
ORG 0
LJMP MAIN
MAIN:
MOV TMOD, #20H
MOV TH1, #-3
MOV TL1, TH1
MOV SCON, #50H
SETB TR1
TRUYEN:
MOV A, #"R"
CALL GUI
CALL DELAY
MOV A, #"E"
CALL GUI
CALL DELAY
MOV A, #"A"
CALL GUI
CALL DELAY
MOV A, #"D"
CALL GUI
CALL DELAY
MOV A, #"Y"
CALL GUI
CALL DELAY
CALL CHECK
Created by Lê Hải Trung – K49KMT – TNUT 35
JMP TRUYEN
GUI:
MOV SBUF, A
JNB TI, $
CLR TI
RET
DELAY:
MOV R7, #1
DL1: MOV R6, #255
DL2: MOV R5, #255
DL3: DJNZ R5, DL3
DJNZ R6, DL2
DJNZ R7, DL1
RET
CHECK:
JNB RI, $
MOV A, SBUF
MOV P2, A
CLR RI
CJNE A, #97H , THOAT
RET
THOAT:
RET
END
org 0
mov p2, #0
mov tmod, #20h
mov th1, #-3
mov tl1, th1
mov scon, #50h
setb tr1
jmp main
DUNG equ 0
TRAI equ 1
PHAI equ 2
main:
jnb RI, $
Created by Lê Hải Trung – K49KMT – TNUT 37
mov a, sbuf
clr RI
end
Bài 1:
Bài đ u tiên sẽ trình bày chi tiết. Các bài sau quá trình phân tích t ơng tự.
.MODEL SMALL Xác đ nh kích cỡ ch ơng trình (Tiny, Small, Medium, Large
hay Huge)
SRC DW 01H, 02H m ng define word mỗi giá tr chứa 2 byte dữ liệu bộ nh
ROM
LEA SI, SRC L u 2000H vào đây. Nguồn là tên biến trong đo n DS
MOV AX, [SI] Giá tr nằm trong ô nh SI. Không có ngo c là l y đ a chỉ L y
giá tr trong ô nh thứ 2000H
XCHG AX, [DI] Tráo đổi dữ liệu giữa đích và nguồn. Đích và nguồn ph i cùng độ
dài.
SI = 2000h
DI = 3000H
Tr c:
AX = 01h
DI = 06h
ADD SI, 02H Tăng giá tr của SI lên 02h. Ban đ u SI = 2000h Cộng lên là
2002h
DI cũng t ơng tự
Kết qu l u vào AX
Bài 3:
Kết qu bài 4:
Có 2 m ng 1 m ng DIFF ch a có giá tr
D l u vào AH
Th ơng l u vào AL
D l u vào DX
Th ơng l u vào AX
Ng i ta đư khai báo hai biến A kiểu DB (1 byte) có giá tr 22h, B kiểu DB(1 byte) có
giá tr 32h
Sau đó ng i ta chuyển A vào thanh ghi AL. Vì là thanh ghi AL nên chỉ có 8 bit mà
thôi.
Bài 7:
Ch ơng trình trên thực hiện phép chia một số 8 bit bởi một số 8 bit
Vì AH=0 lên AX chỉ còn AL. Gán AL bằng A thì AL là 56h. Khi chia đáng lẽ ra trong
tr ng hợp trên nguồn là 8 bit nh ng sẽ chia theo cách AX/nguồn = AL/nguồn =
AL/BL
Sau phép chia này AL sẽ chứa th ơng, AH sẽ chứa d . Kết qu đ ợc truyền vào 2
biên Q và R. Q l u AL, R l u AH.
Bài 9:
T ơng tự bài 8. Nh ng ch ơng trình này thực hiện phép chia một số 8 bit bởi một số
16 bit. Để ý ta th y AX gán cho A. Nên phép toán sẽ là DIV BL = AX/BL.
- Ch ơng trình trên thực hiện việc chia một số 16 bit cho một số 16 bit (nguồn là
16 bit)
- Phép toán quan tr ng là: DIV BX. Đây là phép toán chia v i nguồn là BX (16
bit)
- Sau khi thực hiện phép toán, AX l u th ơng chuyển vào Q, DX l u d chuyển
vào R
- A, B, Q, R đều là biến đ ợc khai báo kiểu define word (kiểu từ 2 byte). A, B
chứa giá tr khởi t o. Q, R không chứa giá tr khởi t o