Tài liệu ôn thi và đáp án ngân hàng câu hỏi môn Vi xử lý - Vi điều khiển - Lê Hải Trung

- 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) DIV BX sẽ tương đương với DXAX/BX. Vì DX = 0 nên phép toán được rút gӑn lại là AX/BX. - 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

pdf47 trang | Chia sẻ: linhmy2pp | Ngày: 19/03/2022 | Lượt xem: 120 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Tài liệu ôn thi và đáp án ngân hàng câu hỏi môn Vi xử lý - Vi điều khiển - Lê Hải Trung, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRNG ĐI HC KỸ THUT CÔNG NGHIP KHOA ĐIN T B MÔN: TIN H C CÔNG NGHIP TÀI LIU ÔN THI ậ ĐÁP ÁN NGỂN HÀNG CỂU HI . HC PHN: VI X LÝ ậ VI ĐIU KHIN . Mà HP: TEE408 BIÊN SON: LÊ HI TRUNG THÁI NGUYÊN, 2015 ÔN THI VI X LÝ ậ VI ĐIU KHIN PHN: VI ĐIU KHIN 8051 Các code mình vit đu đư test hot đng bình thng, s dụng phn mm Keil µVision 5 và Proteus 8.1. Ni dung đ bài đợc ly t ngân hàng câu hi thi kt thúc hc phn VXL ậ VĐK, có bổ sung thêm mt số dng bài thng gặp. Phn I. Các bài toán led đơn, led 7 thanh (dng cơ bn) 1. Thiết kế mch gồm một công tắc và 2 LED 7 thanh. Hiển th số ln bm công tắc từ 00  99 trên 2 LED. org 0 ;Khoi tao mov p2, #0xFF mov p3, #0 mov dptr, #maled mov r0, #0 jmp main maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h //(common anode) Created by Lê Hải Trung – K49KMT – TNUT 1 hienthi macro ts1, ts2 mov a, ts1 movc a, @a+dptr mov p2, a setb ts2 clr ts2 endm 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 Created by Lê Hải Trung – K49KMT – TNUT 2 2. Viết chơng trình đếm số từ 00-99 hiển th lên 2 LED 7 thanh. Yêu cu khong thi gian delay là 1s org 0 //khởi tạo mov r0, #0 mov p2, #0 mov dptr, #maled jmp main maled: db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h hienthi macro led_data, pin_ic_chot mov a, led_data Created by Lê Hải Trung – K49KMT – TNUT 3 movc a, @a+dptr 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 hienthi r1, p2.0 hienthi r2, p2.1 call delay1s inc r0 cjne r0, #100, main mov r0, #0 jmp main Created by Lê Hải Trung – K49KMT – TNUT 4 delay1s: //hàm delay 1 giây mov r7, #20 mov tmod, #01h Lap: mov th0, #03ch mov tl0, #0b0h setb tr0 jnb tf0, $ clr tf0 clr tr0 djnz r7, Lap ret end 3. Thiết kế mch đếm số ln n 1 công tắc trên chân p1.0 từ 0  9 hiển th lên 1 LED 7 thanh. Created by Lê Hải Trung – K49KMT – TNUT 5 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 p1.0, OK inc r0 cjne r0, #10, SoSanh mov r0, #0 SoSanh: ChoDoi: jnb p1.0, ChoDoi OK: hienthi r0 jmp main end Created by Lê Hải Trung – K49KMT – TNUT 6 4. Thiết kế mch cu H điều khiển động cơ 1 chiều. Xoay trái 3s – Dừng 1s – Xoay phi 2s. org 0 jmp main DUNG equ 0 PHAI equ 64 TRAI equ 128 main: mov p3, #TRAI call delay call delay call delay Created by Lê Hải Trung – K49KMT – TNUT 7 mov p3, #DUNG call delay mov p3, #PHAI call delay call delay mov p3, #DUNG call delay jmp main delay: mov r7, #20 mov tmod, #01h loop: mov th0, #03ch mov tl0, #0B0h setb tr0 jnb tf0, $ clr tf0 clr tr0 djnz r7, loop ret end Created by Lê Hải Trung – K49KMT – TNUT 8 5. Thiết kế mch đếm số thứ tự từ 0 đến 9 hiển th trên 1 LED 7 thanh. org 0 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 call delay endm Created by Lê Hải Trung – K49KMT – TNUT 9 main: hienthi r0 inc r0 cjne r0, #10, OK mov r0, #0 OK: hienthi r0 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 Created by Lê Hải Trung – K49KMT – TNUT 10 6. Thiết kế mch đếm số thứ tự từ 00 đến 99 hiển th trên 2 LED 7 thanh. org 0 mov dptr, #maled mov p2, #0xFF mov r0, #0 jmp main maled: db 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h hienthi macro ts1, ts2 mov a, ts1 movc a, @a+dptr mov p2, a Created by Lê Hải Trung – K49KMT – TNUT 11 setb ts2 clr ts2 endm main: mov a, r0 mov b, #10 div ab mov r1, a mov r2, b hienthi r1, p3.0 hienthi r2, p3.1 call delay inc r0 cjne r0, #100, main mov r0, #0 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 Created by Lê Hải Trung – K49KMT – TNUT 12 7. Thiết kế mch gồm 6 LED đơn. Trong đó có 1 LED nhp nháy di chuyển từ trái qua phi và ngợc li. org 0 mov p2, #0 jmp main trai_phai macro ts1, ts2 setb ts1 clr ts2 call delay endm main: setb p2.0 trai_phai p2.1, p2.0 trai_phai p2.2, p2.1 Created by Lê Hải Trung – K49KMT – TNUT 13 trai_phai p2.3, p2.2 trai_phai p2.4, p2.3 trai_phai p2.5, p2.4 trai_phai p2.4, p2.5 trai_phai p2.3, p2.4 trai_phai p2.2, p2.3 trai_phai p2.1, p2.2 trai_phai p2.0, p2.1 clr p2.0 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 Created by Lê Hải Trung – K49KMT – TNUT 14 8. Thiết kế mch và viết chơng trình đếm số ln nhn công tắc trên chân P3.2 hiển th trên 1 LED 7 thanh. 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ế mch và viết chơng trình hiển th các LED sáng liên tiếp trong mch 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 li tắtầ., LED 2 sáng, các LED còn li tắtầ). (khong thi gian trễ tùy chn để phù hợp vi 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ế mch và viết chơng trình hiển th mch có 8 LED đợc nối vào port P1 của vi điều khiển các LED sáng ln lợt từ LED1 đến LED8 (khong thi gian trễ tùy chn để phù hợp vi 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 Created by Lê Hải Trung – K49KMT – TNUT 18 11. Thiết kế mch và viết chơng trình hiển th mch có 8 LED đợc nối vào port P3 của vi điều khiển các LED sáng ln lợt từ LED giữa sang dn 2 bên(khong thi gian trễ tùy chn để phù hợp vi hiển th) 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 phi đến xếp bên cnh Led 1, Led 3 di chuyển từ ngoài cùng bên phi đến xếp bên cnh Led 2... cứ nh vậy đến khi đủ 6 Led cùng sáng Created by Lê Hải Trung – K49KMT – TNUT 20 org 0 jmp main surf macro ts1, ts2 setb ts1 clr ts2 endm 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 mov p3, 0xFF call delay mov p3, #0 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 Created by Lê Hải Trung – K49KMT – TNUT 22 13. Viết chơng trình gồm có 5 nút n. Hiển th giá tr khi n từng nút lên 1 LED 7 thanh. Ví dụ: n nút số 1 thì hiển th số 1, chuyển qua n nút số 2 thì hiển th số 2... trên LED 7 thanh. org 0 mov p2, #0xFF D1 equ 0F9h D2 equ 0A4h D3 equ 0B0h D4 equ 99h D5 equ 92h display macro ts1, ts2, ts3, ts4, ts5 jb ts1, next1 mov p2, #D1 jmp xong next1: jb ts2, next2 mov p2, #D2 jmp xong next2: jb ts3, next3 mov p2, #D3 jmp xong next3: jb ts4, next4 mov p2, #D4 jmp xong next4: jb ts5, xong Created by Lê Hải Trung – K49KMT – TNUT 23 mov p2, #D5 xong: endm 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 bm. Nút thứ nht (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) gim số hiển th trên LED 7 thanh. Yêu cu khong 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 maled: db 0C0h, 0F9h, 0A4h, 0B0h, 99h, 92h, 82h, 0F8h, 80h, 90h display macro ts1, ts2 Created by Lê Hải Trung – K49KMT – TNUT 24 mov a, ts1 movc a, @a+dptr mov p2, a 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 maled: db 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h display macro ts1, ts2 mov a, ts1 movc a, @a+dptr mov p2, a 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 Created by Lê Hải Trung – K49KMT – TNUT 27 PHN II. Các bài toán Timer hoặc Truyn thông nối tip TIMER *Bng các chế độ của Timer cn nắm vững: M1 M0 Ch đ Ch đ hot đng 0 0 0 Bộ đnh thi 13 bit: 8 bit là bộ đnh thi/bộ đếm, 5 bit đt trc. 0 1 1 Bộ đnh thi 16 bit: không có đt trc. 1 0 2 Bộ đnh thi 8 bit: tự np li. 1 1 3 Chế độ bộ đnh thi chia tách. Dựa vào bng này ta chn chế độ cho timer (timer mode – tmod) Ví dụ: TMOD = 0000 0001 (01H): chế độ 1 của bộ đnh thi Timer 0 đợc chn. TMOD = 0010 0000 (20H): chế độ 2 của bộ đnh thi Timer 1 đợc chn. TMOD = 0001 0010 (12H): chế độ 1 của bộ đnh thi Timer 1 và chế độ 2 của Timer 0 đợc chn. 16. Sử dụng Timer 0 hoc Timer 1 viết chơng trình to 2 xung trên 2 chân P1.0 và P1.1 vi tn số ln lợt là 2KHz và 4KHz (Sử dụng osillocope để quan sát). Biết tn số thch anh là 12MHz Gii: Vì tn số thch anh là 12Mhz nên chu kỳ bộ đnh thi là: 12/12Mhz = 1us Chn timer0 chế độ 1 (16 bit) Để to xung vi tn số là f = 2kHz  chu kỳ là 1/f = 1/2kHz = 500us  Thi gian ON/OFF của xung là 500us/2 = 250us Ta có: 1 nhp  1us ? nhp  250us vậy số nhp là 250. Ta ly 65536 – 250 = 65286 là điểm bắt đu np (FF 06h) Để to xung vi tn số là 4khz  Ta cho chu kỳ xung ứng vi tn số 2kHz gim đi một nửa, bởi chu kỳ luôn tỉ lệ nghch vi tn số. Tuy nhiên trong thao tác cu hình thi gian trễ b sai số, thng là do câu lệnh làm tăng thi gian trễ. Do đó, ta tăng giá tr TL0 cho hợp lý. Created by Lê Hải Trung – K49KMT – TNUT 28 org 0 jmp main main: //p1.0 la 2KHZ, p1.1 la 4kHz call delay cpl p1.1 call delay cpl p1.1 cpl p1.0 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 Created by Lê Hải Trung – K49KMT – TNUT 29 TRUYỀN THÔNG NỐI TIẾP 1. Truyền thông Gửi (Transmit) 2. Truyền thông Nhận (Receive) Một số khái niệm cn lu ý: +Tốc độ Baud: tốc độ truyền thông +Tn số Fxtal: Tn số thch anh +Tn số FOSC: Tn số máy +SMOD: Chế độ x2 tốc độ Baud (mc đnh SMOD = 0) +Thanh ghi TH1 +C TR (Timer run): Bằng 1 thì timer hot động +C TI (Transmit Interrupt): c ngắt truyền +C RI (Receive Interrupt): c ngắt nhận +Thanh ghi TMOD: Chế độ làm việc của timer Vì baud đợc tính nh sau: Baud = ^SMOD ∗ Fxtal HZ Nên một ^−��cách thu gn, thanh∗∗ ghi ∗TH1 đợc− �� tính nh sau: TH1 = 256 - = 256 - ��� ��� Các bc viết code thực hi∗ện ch∗�ức năng truyn: ∗� 1. Np thanh ghi TMOD: thng dùng là timer 1 mode 2 2. Np thanh ghi TH1: để xác đnh chế độ baud 3. Np thanh ghi SCON (vi 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ự cn phi 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ề bc 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. Gii: Đổi 11,0592 MHz = 11059200Hz Tính toán giá tr thanh ghi TH1 TH1 = 256 - = 253 = FDh (hexa) ∗ Created by Lê Hải Trung – K49KMT – TNUT 30 Chế độ timer là timer 1 mode 2, thanh ghi SCON sẽ có giá tr là 50h Chơng trình nh sau: org 0 mov TMOD, #20h //l o c a (256-253) = -3 mov TH1, #-3 ấy đả ủ mov TL1, TH1 mov SCON, #50h setb TR1 jmp main 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 Created by Lê Hải Trung – K49KMT – TNUT 31 Các bc viết code thực hiện chức năng nhn: 1. Np thanh ghi TMOD: thng dùng là timer 1 mode 2 2. Np thanh ghi TH1: để xác đnh chế độ baud 3. Np thanh ghi SCON (vi 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. Ch đến khi c nhận đủ dữ liệu: RI = 1. “xx:JNB RI, xx” 6. Khi RI đợc thiết lập thì trong SBUF đư có 1 byte. Lu nội dung đó vào nơi an toàn 7. Xóa c ngắt RI: CLR RI 8. Để nhận tiếp thì quay về bc 5 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 tn số thch anh Fxtal = 11.0592 Gii: Ta có TH1 = 256 - = 250 32 Created by Lê Hải Trung – ∗ K49KMT – TNUT Chơng trình nh sau: org 0 mov TMOD, #20h mov TH1, #-6 mov TL1, TH1 mov SCON, #50h setb TR1 main: jnb RI, main mov A, SBUF mov P1, A clr RI SJMP main end CÂU HI THNG GP: 1. Viết chơng trình cho 8051 để truyền nối tiếp, liên tiếp một ký tự ‘B’ vi tốc độ 19200 baud liên tục, Fxtal = 11.0592 MHz Gii: Ta có giá tr thanh ghi TH1 = 256 - = 254,5. Vì mc đnh là SMOD = 0 nên vi giá tr TH1 lẻ (254.5), ta sẽ ly TH1 – 1,5. Nh thế TH1 = 253 = FDh ∗ Chn timer 1 mode 2. Nh vậy TMOD sẽ là 20h Giá tr thanh ghi SCON = 50h Created by Lê Hải Trung – K49KMT – TNUT 33 Chơng trình nh sau: org 0 mov TMOD, #20h mov TH1, #-3 mov TL1, TH1 mov SCON, #50h setb TR1 jmp main 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 Created by Lê Hải Trung – K49KMT – TNUT 34 2. Viết chơng trình truyền thông chữ ‘READY’ chỉ một ln. Biết tốc độ là 19200 Baud và Fxtal = 11, 0592 MHz 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 Created by Lê Hải Trung – K49KMT – TNUT 36 3. Viết chơng trình truyền thông nối tiếp nhận các ký tự T, P, D để điều khiển động cơ xoay trái khi n ký tự ‘T’, xoay phi khi n ký tự ‘P’, dừng khi n ký tự ‘D’. Biết tốc độ Baud = 19200 và Fxtal = 11,0592 MHz 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 cjne a, #'D', next1 mov p2, #DUNG jmp xong next1: cjne a, #'T', next2 mov p2, #TRAI jmp xong next2: cjne a, #'P', xong mov p2, #PHAI jmp xong xong: jmp main end Created by Lê Hải Trung – K49KMT – TNUT 38 Gii chi tit ngân hàng câu hi VXL ậ VĐK phn vi x lý 80x86 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) .DATA Khai báo đon lu dữ liệu ORG 2000H  V trí ô nh bắt đu để lu dữ liệu SRC DW 01H, 02H  mng define word  mỗi giá tr chứa 2 byte dữ liệu bộ nh ROM Cú pháp đnh nghĩa: Tên bin ậ kiu dữ liu ậ giá tr .CODE  Khai báo đon bắt đu viết code MOV AX, @DATA  Truy xut đa chỉ rom nội MOV DS, AX  Khởi to thanh ghi đon DS DS là 1 thanh ghi đon dữ liu. AX là 1 thanh ghi 16 bit. DS chứa đa chỉ bắt đu của dữ liu Có khai báo DS thì mi chứa đợc DST , SRC Created by Lê Hải Trung – K49KMT – TNUT 39 Lệnh LEA ĐệCH  Nguồn : Np đa chỉ hiệu dụng vào thanh ghi LEA SI, SRC  Lu 2000H vào đây. Nguồn là tên biến trong đon DS LEA DI, DST  Lu 3000H vào đây. MOV CX, 05H  Truyền giá tr 5 cho thanh ghi CX MOV AX, [SI]  Giá tr nằm trong ô nh SI. Không có ngoc là ly đa chỉ  Ly 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 phi cùng độ dài. SI = 2000h DI = 3000H Trc: AX = 01h DI = 06h XCHG  đổi dữ liệu Sau đó thì AX = 06h và DI = 01h 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ự LOOP AGAIN: gim thanh ghi CX xuống 1 đơn v và nhy về nhãn AGAIN nếu CX cha bằng 0. Ban đu CX = 05h  Vậy lp 5 ln. Sau 5 ln đó  Dữ liệu 2 mng đợc chuyển cho nhau Vy: Đây là chơng trình chuyn đổi dữ liu giữa 2 mng data word Câu lnh quan trng nht: XCHG DW ậ Kiu dữ liu define word lu t 2 byte Created by Lê Hải Trung – K49KMT – TNUT 40 Bài 2: Chơng trình này để cộng hai số 16 bit. Kết qu lu vào AX Ngi ta đư sử dụng 3 biến A, B, C kiểu define word 2 byte. A và B chứa giá tr, C không chứa giá tr. Sau khi tính toán ngi ta đa kết qu từ AX vào C Bài 3: MOV AX, A  ly đa chỉ của A đa vào AX. Nhng mà ly luôn giá tr bởi đó là giá tr lu trong biến, không phi mng. MOV BX, B  ly đa chỉ của B đa vào BX SUB AX, BX: trừ AX - BX Created by Lê Hải Trung – K49KMT – TNUT 41 Bài 4: MOV SUM, AX chuyển giá tr vào SUM Kết qu bài 4: Mng sum sẽ gồm 2 phn tử: 9999h, 9999h Chơng trình này thực hiện cộng 2 phn tử 32 bit không du Created by Lê Hải Trung – K49KMT – TNUT 42 Bài 5: Chơng trình này để trừ hai số vi 32 bit Có 2 mng 1 mng DIFF cha có giá tr SUB AX, NUM2+2. Ly AX – NUM2+2 và kết qu lu vào AX. Sau đó li đa vào DIFF Kết qu lu vào DIFF Lệnh: MUL nguồn -Nguồn 8 bit: nguồn * AL  AX -Nguồn 16 bit: nguồn * AX  DXAX Lệnh: DIV nguồn -Nguồn 8 bit : AX / nguồn D lu vào AH Thơng lu vào AL -Nguồn 16 bit: DXAX / nguồn D lu vào DX Thơng lu vào AX Created by Lê Hải Trung – K49KMT – TNUT 43 Bài 6: Chơng trình nhân hai số vi nguồn 8 bit Ngi 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 đó ngi 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 thực hiện nhân ko du hai số vi nguồn là 16 bit. MUL BX  AX*BX kết qu thu đợc lu vào DX, AX. Để ly đợc DX AX, ngi ta truy xut đến v trí ô nh của mng PROD. V trí số 1 lu AX, v trí số 2 lu DX. Created by Lê Hải Trung – K49KMT – TNUT 44 Bài 8: 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 trng hợp trên nguồn là 8 bit nhng 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 lu AL, R lu AH. Bài 9: Tơng tự bài 8. Nhng 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 thy AX gán cho A. Nên phép toán sẽ là DIV BL = AX/BL. Thơng lu vào AL. D lu vào AH. Nh thế Q sẽ chứa AL, R sẽ chứa AH Created by Lê Hải Trung – K49KMT – TNUT 45 Bài 10: - 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 trng là: DIV BX. Đây là phép toán chia vi nguồn là BX (16 bit) DIV BX sẽ tơng đơng vi DXAX/BX. Vì DX = 0 nên phép toán đợc rút gn li là AX/BX. - Sau khi thực hiện phép toán, AX lu thơng chuyển vào Q, DX lu 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 to. Q, R không chứa giá tr khởi to Created by Lê Hải Trung – K49KMT – TNUT 46

Các file đính kèm theo tài liệu này:

  • pdftai_lieu_on_thi_va_dap_an_ngan_hang_cau_hoi_mon_vi_xu_ly_vi.pdf