You are on page 1of 15

ĐỀ CƯƠNG ĐIỆN TỬ SỐ:

1. Mạch so sánh hai số nhị phân sử dụng vi mạch 74LS85.

2. Bộ cộng hai số nhị phân sử dụng vi mạch 74LS83.

3.

4. Bộ đếm theo mã BCD sử dụng vi mạch 74LS93 và hiển thị lên LED 7 đoạn.
5. Bộ đếm từ 0 đến X (X=5,6,7,8) sử dụng vi mạch 74LS93 hiển thị lên LED 7 thanh.
5 = (11,22,33)
6 = (11,2and12,33)
7 = (11,24,34)
8 = (11,24,31)

6. Bộ đếm theo mã BCD sử dụng trigơ JK hiển thị lên LED 7 đoạn.

7. Mạch bỏ phiếu N đầu vào 1 đầu ra (N = 3,5,7).


ĐỀ CƯƠNG 8086
Viết chương trình bằng hợp ngữ dịch ra đuôi .EXE cho bộ vi xử lý Intel 8088 để thực hiện
công việc sau:
1. Nhập từ bàn phím 1 ký tự thường, sau 2.Nhập từ bàn phím 1 ký tự thường, thực
đó in ra màn hình lần lượt các ký tự từ ký hiện chuyển ký tự vừa nhập sang ký tự hoa
tự nhận được đến ký tự ‘z’ sao cho giữa sau đó in ra màn hình lần lượt các ký tự từ
các ký tự có 01 ký tự space. Code: ký tự nhận được lùi về đến ký tự ‘A’ sao
cho giữa các ký tự có 01 ký tự space.

.model small .model small


.stack 100h .stack 100h
.data .data
cach db " $" cach db " $"
.code .code
main proc main proc
mov ax,@data mov ax,@data
mov ds,ax mov ds,ax
int 21h int 21h
mov bl,al mov bl,al
ham: sub bl,32
mov ah,02 ham:
mov dl,bl mov ah,02
int 21h mov dl,bl
mov ah,09 int 21h
lea dx,cach mov ah,09
int 21h lea dx,cach
inc bl int 21h
cmp bl,122 sub bl,1
jna ham cmp bl,65
main endp jnb ham
ret main endp
end exit:
mov ax,4ch
int 21h
ret
end
3.In ra màn hình liên tiếp các ký tự từ ‘z’ 4.Hiển thị chuỗi kỹ tự “Hello World!” lên
về đến ‘a’ sao cho giữa các ký tự có 01 ký màn hình tại vị trí có hàng và cột được
tự space, kết thúc chương trình khi nhấn nhập từ bàn phím (hàng và cột là số có một
phím ESC (mã ASCII của phím ESC là 27 chữ số).
hay 1Bh).
.model small .model smail
.stack 100h .stack 100h
.data .data
str db 'z$' str db 'Hello World!'
str1 db '$' hang db ?,'$'
.code cot db ?,'$'
main proc .code
mov ax,@data mov ax,@data
mov ds,ax mov ds,ax
lap: mov ah,01h
mov ah,0Bh int 21h
int 21h sub al,30h
cmp al,00h mov hang,al
jne thoat mov ah,01h
mov ah,09h int 21h
lea dx,str1 sub al,30h
int 21h mov cot,al
mov ah,09h
mov dx,offset str mov ah,02h
int 21h mov dl,cot
cmp str,'a' mov dh,hang
jna thoat int 10h
dec str mov ah,09h
jmp lap lea dx,str
thoat: int 21h
mov ah,4ch
int 21h
5.Nhập 1 ký tự từ bàn phím, sau đó in ra 6.Nhập một số có một chữ số từ bàn phím và
màn hình mã ASCII của ký tự nhận được ở kiểm tra số đó là số chẵn hay số lẻ, hiển thị
dạng thập lục phân. kết quả kiểm tra ra màn hình.
.model small chucai: Code segment
.stack 100 add ah,55 Assume cs:code
.data so: Org 100h
xuong db 10,13,'$' mov dl, ah Start:jmp over
b1 db ? push dx Tb1 db 10,13, 'nhap ki tu so kt=$'
chia16 db 16 inc cx Tb2 db 10,13, 'day la so chan $'
.code xor ah,ah Tb3 db 10,13, 'day la so le$'
main proc cmp ax,0 Tb4 db 10,13, 'hay nhap lai voi(0<=kt<=9)$'
mov ax,@data jne Lap1 Over:
mov ds,ax hienthi: Nhap:mov ah,9
mov ah,1h pop dx Lea dx,tb1
int 21h mov ah,2 Int 21h
mov b1,al int 21h Mov ah,1
lea dx, xuong loop hienthi Int 21h
mov ah,9h mov dx,'h' Mov bl,al
int 21h mov ah,2h Cmp bl,30h
mov ax,0 int 21h Jae sosanh
mov al,b1 mov ah,4Ch Jmp loi
xor cx,cx int 21h Sosanh:
Lap1: ret Cmp bl,39h
xor dx,dx main endp Jbe inra
div chia16 end main Loi:mov ah,9
cmp ah,9 Lea dx,tb4
ja chucai Int 21h
add ah,30h Jmp nhap
jmp so Inra:test bl,1
Jne sole
Mov ah,9
Lea dx,tb2
Jmp thoat
Sole:mov ah,9
Lea dx,tb3
Thoat:int 21h
Int 20h
Code ends
End start
I. Cho 01 phím bấm nối với chân P3.2 và 08 LED đơn nối vào PORT 1 của vi điều khiển
8051, dùng thạch anh có tần số 12MHz. Viết chương trình:
1. Khi bấm phím lần 1 đèn LED ở P1.0 sáng (các đèn LED còn lại tắt), bấm phím lần 2 thì đèn
LED ở P1.0 sáng (các đèn LED còn lại tắt), ..., tiếp tục đến lần bấm phím thứ 8 thì đèn LED ở
P1.7 sáng(các đèn LED còn lại tắt); bấm phím lần 9 thì quay trở lại sáng đèn LED ở P1.0, ...

#include <sfr51.inc> CLR D4 RET


D1 BIT P1.0 JB PHIMNHAN,$ DELAY:
D2 BIT P1.1 LCALL DELAY MOV TMOD,#10H
D3 BIT P1.2 LCALL TURN MOV R7,#10
D4 BIT P1.3 CLR D5 LOOP:
D5 BIT P1.4 JB PHIMNHAN,$ MOV TH1,#HIGH(-50000)
D6 BIT P1.5 LCALL DELAY MOV TL1,#LOW(-50000)
D7 BIT P1.6 LCALL TURN SETB TR1
D8 BIT P1.7 CLR D6 JNB TF1,$
PHIMNHAN BIT P3.2 JB PHIMNHAN,$ CLR TR1
ORG 0 LCALL DELAY CLR TF1
MAIN: LCALL TURN DJNZ R7,LOOP
JB PHIMNHAN,$ CLR D7 RET
LCALL DELAY JB PHIMNHAN,$ END
LCALL TURN LCALL DELAY
CLR D1 LCALL TURN
JB PHIMNHAN,$ CLR D8
LCALL DELAY SJMP MAIN
LCALL TURN TURN:
CLR D2 SETB D1
JB PHIMNHAN,$ SETB D2
LCALL DELAY SETB D3
LCALL TURN SETB D4
CLR D3 SETB D5
JB PHIMNHAN,$ SETB D6
LCALL DELAY SETB D7
LCALL TURN SETB D8
2. Khi khởi động các đèn LED sáng từ P1.0 đến P1.7; khi bấm phím lần 1 đảo chiều sáng của các
đèn LED từ P1.7 đến P1.0; tiếp tục đảo chiều sáng các đèn LED ở lần bấm phím tiếp theo, ...

#include <sfr51.inc> lcall delay ret


org 00h lcall turn turn:
D1 bit P1.0 clr D6 setb D1
D2 bit P1.1 lcall delay setb D2
D3 bit P1.2 lcall turn setb D3
D4 bit P1.3 clr D7 setb D4
D5 bit P1.4 lcall delay setb D5
D6 bit P1.5 lcall turn setb D6
D7 bit P1.6 clr D8 setb D7
D8 bit P1.7 ret setb D8
bt bit P3.2 lap2: ret
main: lcall delay delay:
jb bt,$ lcall turn MOV TMOD,#10H
lcall lap1 clr D8 MOV R7,#10
jb bt,$ lcall delay LOOP:
lcall lap2 lcall turn MOV TH1,#HIGH(-50000)
sjmp main clr D7 MOV TL1,#LOW(-50000)
lap1: lcall delay SETB TR1
lcall delay lcall turn JNB TF1,$
lcall turn clr D6 CLR TR1
clr D1 lcall delay CLR TF1
lcall delay lcall turn DJNZ R7,LOOP
lcall turn clr D5 RET
clr D2 lcall delay end
lcall delay lcall turn
lcall turn clr D4
clr D3 lcall delay
lcall delay lcall turn
lcall turn clr D3
clr D4 lcall delay
lcall delay lcall turn
lcall turn clr D2
clr D5 lcall delay
lcall turn
clr D1
3. Khi không bấm phím thực hiện bật sáng các đèn LED sáng theo thứ tự từ P1.0 đến P1.7; khi
bấm phím thực hiện bật sáng các đèn LED sáng theo thứ tự từ P1.7 đến P1.0; khoảng thời gian
thay đổi trạng thái giữa các đèn LED là 1.0 giây sử dụng bộ định thời 0.

#include <sfr51.inc> clr D6 setb D1


org 00h lcall delay setb D2
D1 bit P1.0 lcall turn setb D3
D2 bit P1.1 clr D7 setb D4
D3 bit P1.2 lcall delay setb D5
D4 bit P1.3 lcall turn setb D6
D5 bit P1.4 clr D8 setb D7
D6 bit P1.5 ret setb D8
D7 bit P1.6 lap2: ret
D8 bit P1.7 lcall delay delay: ;CHUONG
bt bit P3.2 lcall turn TRINH CON DELAY
main: clr D8 500MS
jb bt,$ lcall delay MOV TMOD,#10H
lcall lap1 lcall turn MOV R7,#20 ;Thay d?i th?i
jb bt,$ clr D7 gian delay x50ms
lcall lap2 lcall delay LOOP:
sjmp main lcall turn MOV TH1,#HIGH(-50000)
lap1: clr D6 MOV TL1,#LOW(-50000)
lcall delay lcall delay SETB TR1
lcall turn lcall turn JNB TF1,$
clr D1 clr D5 CLR TR1
lcall delay lcall delay CLR TF1
lcall turn lcall turn DJNZ R7,LOOP
clr D2 clr D4 RET
lcall delay lcall delay end
lcall turn lcall turn
clr D3 clr D3
lcall delay lcall delay
lcall turn lcall turn
clr D4 clr D2
lcall delay lcall delay
lcall turn lcall turn
clr D5 clr D1
lcall delay ret
lcall turn turn:
II. Cho 01 phím bấm nối vào chân P3.2 , 01 LED 7 thanh ghép nối với vi điều khiển 8051 như
sau: các chân (A -> G) nối vào (P0.0 -> P0.6), chân cấp nguồn của LED nối vào P1.0. Vi điều
khiển 8051 sử dụng thạch anh có tần số 12MHz. Viết chương trình :
1. Xây dựng bộ đếm tiến từ 0 đến 9 hiển thị lên LED 7 đoạn, thời gian chuyển đổi giữa các giá trị
là 1.0 giây.
ĐẾM 0-9 ĐẾM 9-0
#include <sfr51.inc> #include <sfr51.inc>
ORG 000H ORG 000H
SW1 BIT P3.2 SW1 BIT P3.2
LED EQU P0 LED EQU P0
MOV DPTR,#BANGMA mov r0,#9
kiemtra: MOV DPTR,#BANGMA
jb sw1,$ kiemtra:
jnb sw1,main jb sw1,$
ljmp kiemtra jnb sw1,main
main: ljmp kiemtra
MOV A,R0 main:
MOVC A,@A+DPTR MOV A,R0
MOV P0,A MOVC A,@A+DPTR
LCALL DELAY MOV P0,A
INC R0 LCALL DELAY
CJNE R0,#10,main DEC R0
LJMP $ CJNE R0,#-1,main
delay: LJMP $
MOV TMOD,#10H delay:
MOV R7,#20 ;thay thoi gian delay x50ms MOV TMOD,#10H
LOOP: MOV R7,#20 ;thay thoi gian delay x50ms
MOV TH1,#HIGH(-50000) LOOP:
MOV TL1,#LOW(-50000) MOV TH1,#HIGH(-50000)
SETB TR1 MOV TL1,#LOW(-50000)
JNB TF1,$ SETB TR1
CLR TR1 JNB TF1,$
CLR TF1 CLR TR1
DJNZ R7,LOOP CLR TF1
RET DJNZ R7,LOOP
bangma: RET
db bangma:
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80 DB
H,9H 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H
END ,90H
END
2. Khi bấm phím lần 1 thực hiện bộ đếm tiến từ 0 đến 9 hiển thị lên LED 7 đoạn, thời gian chuyển
đổi giữa các giá trị là 2.0 giây; khi bấm phím lần 2 dừng bộ đếm.

#include <sfr51.inc> HIENTHI:


ORG 00H MOV DPTR, #MALED
LJMP MAIN MOV R7, #20
ORG 30H QUET:
MAIN: MOV A, R0
LCALL HIENTHI00 MOV B, #10
LCALL CT1 DIV AB
LJMP MAIN MOVC A, @A+DPTR
CT1: MOV P0, A
JB P3.2, $ ; NHAN NUT SETB P1.0
START THI BAT DAU CHAY LCALL DELAY
MOV R0, #01H CLR P1.0
DEM: DJNZ R7, QUET
JNB P3.3, STOP ; NHAN NUT RET
STOP THI DUNG DEM, STOP:
LCALL HIENTHI LCALL HIENTHI
INC R0 LJMP STOP
CJNE R0, #100, DEM RET
RET DELAY:
HIENTHI00: MOV TMOD, #01H
MOV P0, #0C0H MOV TH0, #HIGH(-50000)
SETB P1.0 MOV TL0, # LOW(-50000)
SETB P1.1 SETB TR1
RET JNB TF1, $
CLR TR1
CLR TF1
RET
MALED: DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
2.1 Khi bấm phím lần 1 thực hiện bộ đếm tiến từ 00 đến 99 hiển thị lên LED 7 đoạn, thời gian
chuyển đổi giữa các giá trị là 2.0 giây; khi bấm phím lần 2 dừng bộ đếm.

#include MOV P0, #0C0H STOP:


<sfr51.inc> SETB P1.0 LCALL HIENTHI
ORG 00H SETB P1.1 LJMP STOP
LJMP MAIN RET RET
ORG 30H HIENTHI: DELAY:
MAIN: MOV DPTR, MOV TMOD, #01H
LCALL #MALED MOV TH0, #HIGH(-50000)
HIENTHI00 MOV R7, #20 MOV TL0, # LOW(-50000)
LCALL CT1 QUET: SETB TR1
LJMP MAIN MOV A, R0 JNB TF1, $
CT1: MOV B, #10 CLR TR1
JB P3.2, $ DIV AB CLR TF1
; NHAN MOVC A, RET
NUT START THI @A+DPTR MALED: DB
BAT DAU CHAY MOV P0, A 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
MOV R0, #01H SETB P1.0 END
DEM: LCALL DELAY
JNB P3.3, STOP CLR P1.0
; NHAN MOV A,B
NUT STOP THI MOVC A, @A+
DUNG DEM, DPTR
LCALL HIENTHI MOV P0, A
INC R0 SETB P1.1
CJNE R0, #100, LCALL DELAY
DEM CLR P1.1
RET DJNZ R7, QUET
HIENTHI00: RET
3. Khi không bấm phím thực hiện đếm từ 0 đến 9 hiển thị lên LED 7 thanh; khi bấm phím thực
hiện đếm lùi từ 9 về 0 hiển thị lên LED 7 thanh, thời gian chuyển đổi giữa các số là 1.0 giây thực
hiện bằng bộ định thời 0.
III. Cho 02 LED 7 thanh ghép nối với vi điều khiển 8051 như sau: các chân (A->G) của cả 02
LED được nối vào (P0.0 -> P0.6), chân cấp nguồn của LED 1 nối vào P1.0; chân cấp nguồn
của LED 2 nối vào P1.1; 02 phím bấm nối vào chân P3.2 và P3.3. Vi điều khiển 8051 sử dụng
thạch anh có tần số 12MHz. Viết chương trình:

1. Thực hiện bộ đếm tiến từ 00 đến 99 hiển thị lên LED 7 đoạn, thời gian chuyển đổi giữa các giá
trị là 1.0 giây sử dụng bộ định thời 0.
#include <sfr51.inc> QUET:
ORG 00H MOV A, R0
LJMP MAIN MOV B, #10
ORG 30H DIV AB
MOV P0,#0 MOVC A, @A+ DPTR
MAIN: MOV P0, A
JNB P3.3,CT0099 SETB P1.0
LJMP MAIN LCALL DELAY1
HIENTHI00: CLR P1.0
SETB P1.0 MOV A, B
SETB P1.1 MOVC A, @A+ DPTR
RET MOV P0, A
CT0099: SETB P1.1
MOV R0, #00h LCALL DELAY1
LAP: CLR P1.1
LCALL CTHT DJNZ R1, QUET
INC R0 RET
CJNE R0, #0, LAP DELAY1:
RET MOV TMOD, #01H
CTHT: MOV TH0, #HIGH(-25000)
MOV DPTR , MOV TL0, #LOW(-25000)
#MALED SETB TR0
MOV R1, #20 JNB TF0, $
CLR TR0
CLR TF0
RET
MALED: DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
Bấm phím bắt đầu chạy từ 00-99
2. Xây dựng bộ đếm lùi từ 99 về 00 hiển thị lên LED 7 đoạn, chuyển đổi các giá trị đếm bằng cách
bấm phím trên chân P3.2.

#include <sfr51.inc> CTHT:


ORG 00H MOV R7,#5
MAIN: QUET:
LCALL CT9900 MOV A,R0
LJMP MAIN MOV B,#10
CT9900: DIV AB
MOV R0, #99 MOV DPTR,#MALED
KEY0: MOVC A,@A+DPTR
JNB P3.2,KEY0OK MOV P0,A
LJMP KEY1 LCALL DELAY
KEY0OK: MOV A,B
LCALL CTHT MOVC A,@A+DPTR
INC R0 MOV P2,A
KEY1: LCALL DELAY
JNB P3.3,KEY1OK DJNZ R7,QUET
LJMP KEY0 RET
KEY1OK: MALED: DB
LCALL CTHT 0C0H,0F9H,0A4H,0B0H,99H,92H,82
DEC R0 H,0F8H,80H,90H
LJMP KEY0 DELAY:
LJMP MAIN MOV R2,#150h
LOOP:
MOV R1,#200h
LOOP1:
DJNZ R1,LOOP1
DJNZ R2,LOOP
RET
END
3. khi bấm phím trên chân P3.2 thực hiện bộ đếm tiến từ 00 đến 99; khi bấm phím trên chân P3.3
thực hiện bộ đếm lùi từ 99 về 00 hiển thị lên LED 7 đoạn, thời gian chuyển đổi giữa các giá trị là
1.0 giây thực hiện bằng bộ định thời 0.

#include <sfr51.inc> LAP:


ORG 00H MOV A,R0
LJMP HT00 MOV B,#10
KEY10: DIV AB
JNB P3.3,KEY20 MOVC A,@A+DPTR
LCALL HT MOV P0,A
INC R0 SETB P1.0
CJNE R0,#100,KEY10 LCALL DELAY
LJMP HT00 CLR P1.0
KEY20: MOV A,B
JNB P3.2,KEY10 MOVC A,@A+DPTR
DEC R0 MOV P0,A
LCALL HT SETB P1.1
LJMP KEY20 LCALL DELAY
HT00: CLR P1.1
MOV R0,#0 DJNZ R7,LAP
JNB P3.2,KEY10 RET
MOV P0,#0C0H DELAY:
SETB P1.0 MOV TMOD,#01H
LCALL DELAY AGAIN: MOV TH0,#HIGH(-50000)
CLR P1.0 MOV TL0,#LOW(-50000)
SETB P1.1 SETB TR0
LCALL DELAY BACK: JNB TF0,BACK
CLR P1.1 CLR TF0
LJMP HT00 CLR TR0
HT: RET
MOV R7,#10 ; THAY MALED: DB
DELAY X 100 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
MOV DPTR,#MALED END

You might also like