Bài tập dài Kỹ thuật vi xử lý

Bài 1 : Viết CT đảo dấu 100 byte dữ liệu từ ô nhớ 100H tại Ram ngoài : chương trình : Org 0000h ljmp start org 0003h ; int ex0 nop reti org 000bh nop reti ; int timer0 org 0013h ; int ex1 nop reti org 001bh nop

doc21 trang | Chia sẻ: maiphuongtt | Lượt xem: 2599 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài tập dài Kỹ thuật vi xử lý, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bài tập dài Kỹ thuật vi xử lý Họ và tên : Nguyễn Văn Hùng Lớp : TBĐ1-K52 MSSV : 20071415 Email : hungbkpro_2007@yahoo.com Bài 1 : Viết CT đảo dấu 100 byte dữ liệu từ ô nhớ 100H tại Ram ngoài : cjne Yes No Ro = 64H Ro = 64H A @dptr A A A A + #01H @dptr A dptr + 1 Ro + 1 Start dptr #0100H Ro #00H chương trình : Org 0000h ljmp start org 0003h ; int ex0 nop reti org 000bh nop reti ; int timer0 org 0013h ; int ex1 nop reti org 001bh nop reti ; int timer1 org 0023h ; ngat truyen tin khong dung End nop reti org 0100h Start: Crl EA mov dptr , #0100H mov Ro ,#00H lap : movx A , @dptr cpl A add A , #01H movx @dptr , A Start inc dptr inc Ro R0 #50H dptr #1234H R1 #00H cjne R0 , #64H , lap End =================================== Bài 2 : Viết chương trình chuyển 2 mảng dữ liệu A @R0 R2 A A @dptr @R0 A A R2 dptr + 1 Ro + 1 R1 + 1 50 byte. Biết mảng 1 có địa chỉ 50H trong Ram trong và mảng 2 có địa chỉ 1234H trong Ram ngoài . Yes End Ro = 32H Chương trình : Org 0000h ljmp start org 0003h ; int ex0 nop reti org 000bh No nop reti ; int timer0 Yes org 0013h ; int ex1 nop reti org 001bh nop reti ; int timer1 org 0023h ; ngat truyen tin khong dung nop reti org 0100h Start: Crl EA mov A , #50H mov dptr , #1234H mov R1 , #00H lap : mov A , @R0 mov R2 , A movx A , @dptr mov @R0 , A mov A , R2 movx @dptr , A inc dptr inc R0 inc R1 cjne R1 , #32H , lap End Bài 3 : Viết chương trình cộng hai số BCD 4 chữ số trong Ram trong , kết quả cất vào số thứ 1 . Biết số thứ nhất đặt tại ô nhớ 40H , và số thứ 2 đặt tại ô nhớ 50H Start Chương trình : Cjne Yes No End R2 = # 04H A @R0 A A + @R1 + (C) DAA @R0 A R0 + 1 R1 + 1 R2 + 1 C #00H R0 #40H R1 #50H R2 #00H Org 0000h ljmp start org 0003h ; int ex0 nop reti org 000bh nop reti ; int timer0 org 0013h ; int ex1 nop reti org 001bh nop reti ; int timer1 org 0023h ; ngat truyen tin khong dung nop reti org 0100h Start: Clr EA Clr C mov R0 , #40H mov R1 , #50H mov R2 , #00H lap : mov A , @R0 addc A , @R1 da a mov @R0 , A inc R0 int R1 inc R2 cjne R3 , #04H , lap End ======================== Bài 4 : Viết chương trình trừ hai số 8 byte kết quả cất vào ô thứ 2 . Biết số thứ nhất đặt tại ô nhớ 60H tại Ram trong , số thứ 2 đặt tại Ram ngoài 1000H. End R1 = #08H A @dptr A A - @R0 – (C) @dptr A dptr + 1 R0 + 1 R1 + 1 C # 00H R0 #60H R1 #00H dptr #1000H Start Chương trình : Org 0000h Ljmp start org 0003h ; int ex0 nop reti org 000bh nop reti ; int timer0 org 0013h ; int ex1 nop reti cjne org 001bh nop reti ; int timer1 org 0023h ; ngat truyen tin khong dung nop No reti Org 0100h Yes Start : Clr EA Clr C mov R0 , #60H mov R1 , #00H mov dptr , #1000H lap: movx A , @dptr subb A , @R0 movx @dptr , A inc dptr inc R0 inc R1 cjne R1 , #08H , lap end Bài 5 : viết chương trình sử dụng timer tạo xung tần 100HZ tại chân P1.0 . Biết xung nhịp thạch anh 12 MHZ ( Ton = 50% , Toff = 50% ). Ta có : Xung tại chân P1.0 có : fxung = 100 Hz => Txung = 0,01 => thời gian cao và thấp là : 0,5 T = 0,005 = 5000 µs Bộ định thời có : fđt = .fthạch anh = .12 ( MHZ ) = 1 MHZ từ đó tần số Tđt = = 1µs Số nhịp đồng hồ : n = = 5000 nhịp Xác định giá trị nạp vào timer : 65536 – 5000 = 60536D = EC67H Giá trị nạp vào là : TL0 = 78H ; TH0 = ECH. SJMP JNB No Yes TL0 #78H TH0 #0ECH P1.5 P1.5 TF0 = 0 TL0 #78H TH0 #0ECH TR0 = 1 CLR P1.0 TMOD #10H Start Chương trình : ORG 0000H LJMP START ORG 0003H ; INT EX0 NOP RETI ORG 000BH NOP RETI ; INT TIMER0 ORG 0013H ; INT EX1 NOP RETI ORG 001BH NOP RETI ; INT TIMER1 ORG 0023H ; NGAT TRUYEN TIN KHONG DUNG OP RETI ORG 0100H START : CLR EA CLR P1.0 MOV TMOD , #10H MOV TL1 , #1AH MOV TH0 , #0ECH SETB TR0 BACK : JNB TFO , BACK MOV TL1 , #1AH MOV TH0 , #0ECH CPL P1.0 SJMP BACK END Bài 6 : Viết chương trình tạo xung 1HZ tại chân P1.7 . Biết xung nhịp thạch anh 12 MHZ ( Ton = 70 % , Toff = 30% ) Ta có : Với fthạch anh = 12 MHZ thì theo trên ta có Tđịnh thời = 1µs Xung tại chân P1.7 có : fxung = 1 Hz => Txung = 1s => Ton = 700 ms , Toff = 300 ms chọn giá trị ban đầu là : TL0 = B0H , TH0 = 3CH từ đó ta có sau mỗi chu kỳ bộ timer đếm được FFFFH - 3CBOH = 164 – 15536 = 50 000 lần tức là : 50 000 . 1µs = 0.05s = 50 ms Vậy ta cần thiết kế sao cho bộ timer đếm được : 700 / 50 = 14 lần . rồi chân P1.7 đổi trạng thái và đếm được : 300/50 = 6 lần . cứ như thế ta sẽ đáp ứng được yêu cầu của bài. SJMP SJMP CJNE JNB JNB YES YES YES NO NO NO R3 #06H R3 = #0EH P1.7 P1.7 R3 #0EH P1.7 = 0 TF0 = 0 TH0 #3CH TL0 #0B0H R3 + 1 TMOD #01H TH0 #3CH TL0 #0B0H P1.7 = 1 R3 # 00H TR0 = 1 Start Chương trình : ORG 0000H LJMP START ORG 0003H ; INT EX0 NOP RETI ORG 000BH NOP RETI ; INT TIMER0 ORG 0013H ; INT EX1 NOP RETI ORG 001BH NOP RETI ; INT TIMER1 ORG 0023H ; NGAT TRUYEN TIN KHONG DUNG OP RETI ORG 0100H START: MOV TMOD , #01H MOV TH0 , #3CH MOV TL0 , #0B0H SETB P1.7 MOV R0 , #00H SETB TR0 LAP: JNB TF0 , LAP MOV TH0 , #3CH MOV TL0,#B0H INC R3 CJNE R3 , LAP CPL P1.7 JNB P1.7 , TOFF MOV R0,#0EH SJMP LAP TON: MOV R0,#06H SJMP LAP END Bài 7 : Viết chương trình con đọc 500 byte dữ liệu từ cổng nối tiếp và cất vào vùng nhớ có địa chỉ đầu 456H . Biết cổng nối tiếp đã được khởi tạo sẵn , cổng cho phép đọc khi cờ RI = 1 , và cờ RI sẽ tự xóa khi đọc xong 1 byte. ret R0 = #FAH R1 = #02H R0 #FAH R1 + 1 A sbuf @dptr A dptr + 1 R0 + 1 RI = 1 R0 #00H R1 #00H dptr #0456h read Giải thuật và chương trình : Read: mov R0 , #00H mov R1 , #00H mov dptr , #0456H lap : jnb RI , lap jnb mov A , sbuf No movx @dptr , A Yes inc dptr cjne int R0 cjne R0 , #FAH , lap mov R0 , #FAH inc R1 cjne R1 , #02H , lap cjne Yes Yes No No ret Bài 8 : viết chương trình điều khiển đèn giao TMOD #01H TH0 # 03CH TLO #0B0H R1 #14H R2 #19H P1.0 = 0 P1.1 = 1 P1.2 = 1 P1.3 = 1 P1.4 = 1 P1.5 = 0 TR0 = 1 start thông tại 1 ngã tư theo yêu cầu : Điều khiển 0 là đèn sáng , 1 là đèn tắt. delay R2 - 1 P1.0 = 1 P1.1 = 0 R2 #03H R2 = 0 delay R2 -1 R2 = 0 ta có sơ đồ điều khiển trạng thái như sau : 1 2 3 4 1 X1 P1.0 0 1 1 1 0 V1 P1.1 1 0 1 1 1 Đ1 P1.2 1 1 0 0 1 X2 P1.4 1 1 0 1 1 V2 P1.4 1 1 1 0 1 Đ2 P1.5 0 0 1 1 0 Chương trình : Org 0000h djnz . . Yes No . reti org 0100h Start : ; back 1 mov TMOD,#01H mov TH0,#3CH djnz mov TL0,#0B0H No Yes mov R1 , #14H sjmp djnz No R2 = 0 delay R2 - 1 P1..3 = 1 P1.4 = 0 R2 #03H P1.1 = 1 P1.2 = 0 P1.3 = 0 P1.5 = 1 R2 # 21H R2 = 0 delay R2 - 1 mov R2 , #19H setb P1.0 setb P1.1 setb P1.2 djnz setb P1.3 setb P1.4 clr P1.5 setb TR0 back2 : lcall delay djnz R2 , back2 setb P1.0 clr P1.1 mov R2 ,#03H back2 : lcall delay djnz R2 , back2 setb P1.1 clr P1.2 clr P1.3 Yes setb P1.5 mov R2,#21H back3 : lcall delay djnz R2 , back3 setb P1.3 clr P1.4 mov R2,#03H delay back4: lcall delay1s jnb djnz R2 , back4 No TF0 = 1 ljmp back1 delay : jnb TF0 , delay Yes mov TH0,#3CH TH0 #3CH TL0 #0B0H R1 #14H R1 - 1 mov TL0,#0B0H djnz mov R1 ,#14H djnz R1 , delay ret No R1 = 0 Yes ret Bài 9 : viết chương trình hiển thị 2 LED 7 thanh đếm lùi từ 20s với sơ đồ phần cứng SV tự đề xuất lap R1 #00H lap R1 #10H TMOD #01H TH0 #3CH TL0 #0B0H R0 #14H P0 #20H TR0 = 1 start Chương trình : Org 0000h . . . reti org 0100h start : clr EA mov TMOD , #01H mov TH0 , #3CH sjmp mov TL0 , #0B0H mov R0, #14H mov P0, #20H setb TR0 mov R1 , #10H lcall lap mov R1 , #00H lcall lap lap: back: jnb TF0 back mov TH0, #3CH Yes Y No Yes No cjne No Yes Y djnz TF0 =1 ret R0 = #00H R2 = #00H R 2 – 1 A A + @R2 P0 A TH0 #3CH TL0 #0B0H R2 #0AH A R1 R0 - 1 lap mov TL0 , #0B0H mov R2 , #0AH mov A , R1 djnz R0 , back back1: dec R2 add A ,@ R2 mov P0 , A cjne R2 , #00H , back1 ret sjmp start