Bài tập lớn Vi xử lý
Trang 1Bai tap lon
Vi xu ly
Sinh viên : Mai Đình Thế
Mssv: 20102229
Lớp : dk&tdh 1- k55
Email: maidinhthe @ gmail.com
Trang 2Câu 1: Viết CT đếm số âm trong miền nhớ 100 byte từ ô nhớ 123H tại RAM ngoài
e Lưu đồ thuật toán
e Chương trình
start Main program
Mov dptr,#123h
Movx a,@dptr
Jb Acc.7,tang_bdem
Jnc dptr
Dịnz r0,lap
Tang_bdem:
Inc r2
Ret
end
Trang 3
Câu 2: Viết CT chuyển 2 mảng dữ liệu 10 byte
và mảng 2 có địa chỉ 70H trong RAM trong
e Lưu đồ thuật toán
e Chương trình
Main program
Mov dptr,#1000h
Mov 10,#70h
Mov 12,#10
Loop:
Movyx a, @dptr
Xch a, @r0
Movx @dptr,a
Inc r0
Djnz rl,loop
End
Biết mảng 1 có địa chỉ 1000H trong RAM ngoài
A<@DPTR XCH A,@RO
@DPTRCA DPTR+1 R0+1 R1-1
Trang 4
Câu 3: Viết CT cộng hai số BCD 4 chit sé trong RAM trong, kết quả cất vào sô thứ 2 Biết số
thứ 1 đặt tại ô nhớ 70H, và số thứ 2 đặt tại ô nhớ 60H
Main program
Mov r0,#70h
Mov r1,#60h
Loop:
R0<70H
Addc a,@r1
Daa
Mov @r0,a
end
END
Trang 5Câu 4: Viết CT tính trung bình 10 byte trong Ram ngoài từ ô nhớ 1234H
Main program
Mov 17,#10
Mov 16,#00h
Mov 15,#00h
Mov 10,#1234h
Lap:
Mov a,#@r0
Mov b,#10d
Push b
Div ab
Add a,r6
Mov a,b
Pop b
Div ab
Add a,r6
Mov r6,a
Mov 15,b
Inc r0
Dịnz r7,lap
Tet
R7<-#10 R6<#00H R5<#00H RO<-#1234H
( A<@R0
B<-#10 PUSH B DIVAB A+R6 RECA ACB A+R5 POP B DIV AB A+R6 RECA RS¢B R0+1
R7-1
Trang 6Câu 5: Viết CT sử dụng Timer tạo xung tần số 1Hz tại chân P1.0 Biết xung nhịp thạch anh
12MHz ( Ton =50%, Toff = 50%)
Main program
START
Cir P1.0
Mov tmod,#01h
Mov th0,#3ch
TMOD<-#01H
Setb tr0
THO<-#3CH Mov 17,#0
Again
Jnb tf0,again
R7<#0 Inc r7
Cjne r7,#10,again
Cpl P1.0
Mov 17,#0
Sjmp again
END
CPL P1.0 R7=0
Trang 7Câu 6: Viết CT tạo xung 10Hz tai chan P1.2 Biét xung nhip thach anh 12MHz (Ton =30% va
Toff=70%)
© Lưu đồ thuậttoán START
TMOD<-#01H
THO<-#3CH TLO€-OBH P1.2=1 R3<¢-#00H TRO=1
R3<€#06H
Trang 8e Chương trình
Mov tmod ,#01h
Mov th0,#3ch
Moy tl0,30h
Setb P1.2
Mov 10,#00h
Setb tr0
Lap:
Jnb tí0,lap
Mov th0,#3ch
Mov tl0,b0h
Inc 13
Cjne r3,lap
Cpl P1.2
Jnb PI.2 toff
Mov 10,#0eh
Sjmp lap
Ton: mov r0,#06h
Sjmp lap
END
Trang 9Câu 7: Viết CT con đọc 300 byte dữ liệu từ cổng nối tiếp và cất vào vùng nhớ có địa chỉ đầu
100H Biết cổng nó:
xóa khi đọc xong I byte
Main program
mov dptr,#100h
moy r1,#02h
back:
mov r0,#150
again:
jnb ri,again
clr ri
mov a,sbuf ;sao sbuf len A khi RI=1
movx @dptr,a
inc dptr
djnz r0,again
địnz r1,back
ret
end
iép đã được khởi tạo sẵn, cổng cho phép đọc khi cờ RI =l, và cờ RI sẽ tự
100H->DPTR 02H>R1
_
RI=0
CLR RI SBUF>A A>@DPTR DPTR+1
v
Trang 10N ]
R0=0
Y
N
Câu 8: Viết CT điều khiển đèn giao thông tại l ngã tư
Lưu đồ thuật toán
1eh>p1
19h>r0
64h>r1
01>tmod TI0->0f0h Th0->0d8h Sectb tr0
Lcall one_sec
1dh->p1
03h->r0
Lcall one_sec
Lcall one_sec
Tf0=1
Clr tfO
2bh->p1
Lcall one_sec
33h->P1
—>| 21>r0
Clr tro
Trang 11Câu 9: Viết CT hién thi trén 2 LED 7 thanh đếm lùi từ 20s
phan cung truyen tin song song qua
cong p2 va 2 IC 7447
hien thi led 7 thanh qua bo giai ma IC7447
MAIN PROGRAM
mov r1,#14h;14h=20d
mov r0,#64h;64h=100d
displ:
mov al
mov b,#0ah; 0ah = 10d
div ab
swap a
add a,b
mov p2,a
Icall one_sec; tao tre 1s
địnz r1,displ
clr p2
here:
sjmp here
one_sec:
mov r0,#64h
back :
mov tmod,#01h
mov tl0,#0f0h
14H->R1
A P1
LCALL ONE_SEC
LCALL ONE_SEC
Trang 12
mov th0,#0d8h
setb tr0
again :
jnb tf0,again clr tr0
clr t0
địnz r0,back
ret
end
Trang 13Câu 10: Viết CT con đồi n ký tự thành chữ hoa (nếu đang là chữ thường) Biết chuỗi
ký tự trong bộ nhớ có địa chỉ đầu trong R0, độ dài trong R7
Main program
e = Thuat toan
Main program
Mov 12,17
Lap:
Mov a, @r0
Add a,#20h
Moy @r0,a
Inc r0
Djnz 12,lap
Ret
END