Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
474,53 KB
Nội dung
Tài liệu thực hành Vixửlý BÀI 2: GIAO TIẾP CÁC THIẾT BỊ ĐƠN GIẢN DÙNG 8255A MỤC ĐÍCH Giúp sinh viên khảo sát vấn đề sau: - Sử dụng phần mềm Emu8086 để mô hoạt động vixửlý 8086 THIẾT BỊ SỬ DỤNG - Máy vi tính Phần mềm Emu8086 Chương trình mô hoạt động 8255A Cơ sở lý thuyết 8255A thiết bị xuất nhập song song lập trình Nó thiết bị I/O đa dụng sử dụng với P nào, lập trình để truyền liệu, từ I/O thơng thường đến I/O interrupt 8255A chia thành Port: A, B C; port bit Port C sử dụng bit riêng hay chia thành nhóm, nhóm bit: PCH (PC7 PC4) PCL (PC3 PC0) 8255A hoạt động chế độ (mode): BSR (Bit Set/Reset) I/O Chế độ BSR: dùng để đặt hay xóa bit Port C Chế độ I/O: gồm có chế độ: - Chế độ 0: tất Port làm việc Port I/O đơn giản - Chế độ (chế độ bắt tay: handshake): Port A B dùng bit Port C làm tín hiệu bắt tay Trong chế độ này, kiểu truyền liệu I/O cài đặt, kiểm tra trạng thái ngắt - Chế độ 2: Port A dùng để truyền liệu song hướng dùng tín hiệu bắt tay từ Port C Port B thiết lập chế độ hay CS A1 A0 0 0 0 1 x 1 x GV: Phạm Hùng Kim Khánh Chọn Port A Port B Port C Thanh ghi điều khiển 8255A không hoạt động Trang 16 Tài liệu thực hành Vixửlý Thanh ghi điều khiển: Dùng để xác định chức Port Nội dung ghi gọi từ điều khiển (CW: Control Word) Thanh ghi điều khiển truy xuất A1 = A0 = Chú ý ta thực tác vụ Đọc ghi Nếu bit D7 = 0, Port C làm việc chế độ BSR từ điều khiển BSR không ảnh hưởng đến chức Port A, B D7 D6 D5 D4 D3 D2 D1 D0 1: Mode I/O 0: Mode BSR Nhóm A Nhóm B PCH (PC7 PC4) 1: Input 0: Output PCL (PC3 PC0) 1: Input 0: Output PA 1: Input 0: Output PB 1: Input 0: Output Mode 1x: Mode 01: Mode 00: Mode Mode 1: Mode 0: Mode Dạng từ điều khiển cho 8255A chế độ I/O Để giao tiếp với ngoại vi thông qua 8255A cần phải: - Xác định địa port A, B, C CR thông qua chân chọn chip CS giải mã A1, A0 Ghi từ điều khiển vào ghi điều khiển Ghi lệnh I/O để giao tiếp với ngoại vi qua port A, B, C Từ điều khiển BSR: Từ điều khiển BSR ghi vào ghi điều khiển đặt hay xoá lần bit GV: Phạm Hùng Kim Khánh Trang 17 Tài liệu thực hành Vixửlý D7 Mode BSR D6 x D5 x D4 X Không sử dụng D3 D2 D1 Chọn bit D0 S/R 000: PC0 0: Xoá (Reset) 001: PC1 1: Đặt (Set) 010: PC2 011: PC3 100: PC4 101: PC5 110: PC6 111: PC7 Khi sử dụng mode BSR, cần ý điều sau: - Để đặt hay xoá bit Port C, từ điều khiển ghi vào ghi điều khiển không ghi vào Port C Một từ điều khiển BSR ảnh hưởng đến bit Port C Từ điều khiển BSR không ảnh hưởng đến I/O mode Tiến trình thực Xét 8255 kết nối phần cứng sau: - Port A: nối với Led (theo thứ tự PA0 – PA7 nối với Led0 – Led7), Led sáng giá trị tương ứng gởi - Port B: nối với cơng tắc nhấn cơng tắc SW1 nối với PB7, SW2 nối với PB6, SW3 nối với PB5, SW4 nối với PB4 nhấn công tắc bất kỳ, giá trị tương ứng Port B 1; khơng nhấn = - Port C: nối với Relay 1,2,3 tương ứng nối với PC0,1,2 Relay đóng giá trị tương ứng Port C ngắt = GV: Phạm Hùng Kim Khánh Trang 18 Tài liệu thực hành Vixửlý Cửa sổ chương trình mơ 8255: Led nối Port A Phím nhấn nối Port B Địa sở 8255 Cho phép reset 8255 Vẽ dạng sóng ngõ PC6 Các Relay nối với Port C 3.1 Điều khiển Led Led liệu kết nối với Port A U5 (có địa 300h), muốn xuất liệu Led, ta dùng lệnh OUT DX,AL DX chứa địa Led (300h) AL chứa liệu muốn xuất Led Bài 2.1: Sáng Led phải Copy file 8255.exe vào thư mục C:\Emu8086\Devices thực chương trình sau: #start=8255.exe# model small stack 100h GV: Phạm Hùng Kim Khánh Trang 19 Tài liệu thực hành Vixửlý data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al ;PA: XUẤT, PB: NHẬP, PC: XUẤT ;Địa CR 8255 ;Định cấu hình cho 8255 mov dx,300h mov al,0Fh out dx,al ;Địa Port A (nối với Led) exit: mov ah,4Ch int 21h main endp END main ;Kết thúc chương trình - Biên dịch thực thi chương trình Bài 2.2: Bỏ đoạn in nghiêng, thực thi chương trình: - Khơng nhấn nút Reset 8255 cửa sổ chương trình mơ 8255 - Nhấn nút Reset 8255 Nhận xét tác dụng đoạn lệnh định cấu hình 8255 Bài 2.3: Sửa lại 2.1 để sáng Led trái Bài 2.4: Sửa lại 2.1 để sáng Led Bài 2.5: Sửa lại 2.1 để sáng đồng thời Led Led Bài 2.6: nhấp nháy Led liên tục #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al lap: mov al,0 mov dx,300h GV: Phạm Hùng Kim Khánh ; Sáng Led Trang 20 Tài liệu thực hành Vixửlý out dx,al call delay mov al,0FFh mov dx,300h out dx,al call delay ; Tắt Led jmp lap exit: mov ah,4Ch int 21h main endp ; delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp end main Bài 2.7: nhấp nháy Led lần #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al mov cx,5 ; Gán CX = lap: mov al,0 mov dx,300h out dx,al call delay mov al,0FFh mov dx,300h out dx,al GV: Phạm Hùng Kim Khánh Trang 21 Tài liệu thực hành Vixửlý call delay loop lap exit: mov ah,4Ch int 21h main endp delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp end main ; Số lần lặp tuỳ theo CX Bài 2.8: Sửa lại 2.7 để thực nhấp nháy Led 10 lần Bài 2.9: Sửa lại 2.7 để thực nhấp nháy đồng thời Led Led lần Bài 2.10: Sửa lại 2.7 để Led sáng từ trái sang phải, lần Led #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al mov al,80h mov dx,300h out dx,al call delay ; Sáng Led mov al,40h mov dx,300h out dx,al call delay ; Sáng Led mov al,20h mov dx,300h out dx,al call delay ; Sáng Led GV: Phạm Hùng Kim Khánh Trang 22 Tài liệu thực hành Vixửlý mov al,10h mov dx,300h out dx,al call delay ; Sáng Led mov al,08h mov dx,300h out dx,al call delay ; Sáng Led mov al,04h mov dx,300h out dx,al call delay ; Sáng Led mov al,02h mov dx,300h out dx,al call delay ; Sáng Led mov al,01h mov dx,300h out dx,al call delay ; Sáng Led exit: mov ah,4Ch int 21h main endp delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp end main Bài 2.11: Sửa lại 2.10 để Led sáng từ phải sang trái, lần Led Bài 2.12: Sửa lại 2.10 để Led sáng dần từ trái sang phải Bài 2.13: Sửa lại 2.10 để Led sáng dần từ phải sang trái Bài 2.14: Sửa lại 2.10 để Led sáng từ vào trong, lần Led Bài 2.15: Sửa lại 2.10 để Led sáng từ ngoài, lần Led Bài 2.16: Sửa lại 2.10 lặp lại lần Bài 2.17: Thực 2.10 dùng vòng lặp GV: Phạm Hùng Kim Khánh Trang 23 Tài liệu thực hành Vixửlý model small stack 100h data pa db 80h,20h,40h,10h,08h,04h,02h,01h code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al ;PA: XUẤT, PB: NHẬP, PC: XUẤT ;Địa CR 8255 ;Định cấu hình cho 8255 mov bx,0 mov dx,300h ; Địa Led next1: mov al,pa[bx] out dx,al call delay inc bx cmp bx,8 jne next1 ; Led có trạng thái exit: mov ah,4Ch ; Kết thúc chương trình int 21h main ENDP ; delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp END main Bài 2.18: Thực 2.17 lặp lại lần Bài 2.19: Thực 2.17 sáng liên tục, nhấn phím kết thúc chương trình Bài 2.20: Thực 2.17 sáng liên tục, nhấn phím ESC kết thúc chương trình Bài 2.21: Viết chương trình cho Led sáng từ trái sang phải lần, nhấp nháy Led lần, sáng dần từ phải sang trái lần, tắt dần từ trái sang phải lần, lặp lại tồn q trình lần GV: Phạm Hùng Kim Khánh Trang 24 Tài liệu thực hành Vixửlý 3.2 Khảo sát Relay Các Relay nối với Port C U5 Do đó, muốn đóng Relay nào, ta cho bit tương ứng Port C = muốn ngắt Relay cho bit tương ứng = Đóng RL1 (PC0 = 1): từ điều khiển 0000 0001b = 01h Ngắt RL1 (PC0 = 0): từ điều khiển 0000 0000b = 00h Đóng RL2 (PC1 = 1): từ điều khiển 0000 0011b = 03h Ngắt RL2 (PC1 = 0): từ điều khiển 0000 0010b = 02h Đóng RL3 (PC2 = 1): từ điều khiển 0000 0101b = 05h Ngắt RL3 (PC2 = 0): từ điều khiển 0000 0100b = 04h Bài 2.22: Chương trình ngắt Relay 1, 2, sau đóng Relay theo thứ tự 3, 2, 1: #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al mov mov out call al,00h dx,303h dx,al delay ; Ngắt RL1 mov mov out call al,02h dx,303h dx,al delay ; Ngắt RL2 mov mov out call al,04h dx,303h dx,al delay ; Ngắt RL3 mov mov out call al,05h dx,303h dx,al delay ; Đóng RL3 GV: Phạm Hùng Kim Khánh Trang 25 Tài liệu thực hành Vixửlý mov mov out call al,03h dx,303h dx,al delay ; Đóng RL2 mov mov out call al,01h dx,303h dx,al delay ; Đóng RL1 exit: mov ah,4Ch int 21h main endp ; -delay proc push cx mov cx,0FFh loop $ pop cx ret delay endp END main Bài 2.23: Chương trình tạo xung vng PC6 #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov al,82h mov dx,303h out dx,al lap: mov mov out call al,0Ch dx,303h dx,al delay mov al,0Dh mov dx,303h out dx,al GV: Phạm Hùng Kim Khánh Trang 26 Tài liệu thực hành Vixửlý call delay jmp lap exit: mov ah,4Ch int 21h main endp ; -delay proc push cx mov cx,0FFh loop $ pop cx ret delay endp END main 3.3 Khảo sát công tắc nhấn Công tắc nhấn nối với Port B U5, nhấn SW thi bit tương ứng Port B = khơng nhấn Như vậy, muốn kiểm tra công tắc nhấn, ta phải kiểm tra bit tương ứng Port B Bài 2.24: Chương trình kiểm tra cơng tắc nhấn sau: #start=8255.exe# model small stack 100h data code main proc mov ax,@data mov ds,ax mov ax,02h int 10h mov al,82h mov dx,303h out dx,al begin: mov dx,301h in al,dx and al,0F0h cmp al,10110000b je sw1 GV: Phạm Hùng Kim Khánh Trang 27 Tài liệu thực hành Vixửlý cmp al,11010000b je sw2 cmp al,11100000b je sw3 cmp al,01110000b je sw4 jmp begin sw1: mov al,0Fh mov dx,300h out dx,al call delay mov al,0 mov dx,303h out dx,al call delay mov al,2 out dx,al call delay mov al,4 out dx,al jmp begin sw2: mov al,0F0h mov dx,300h out dx,al call delay mov al,1 mov dx,303h out dx,al call delay mov al,3 out dx,al call delay mov al,5 out dx,al jmp begin sw3: jmp exit sw4: mov mov out jmp al,3Ch dx,300h dx,al begin GV: Phạm Hùng Kim Khánh Trang 28 Tài liệu thực hành Vixửlý exit: mov ah,4Ch int 21h main endp ; -delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp END main Bài 2.25: Viết chương trình kiểm tra công tắc nhấn: Nhấn SW1: led chạy liên tục từ trái sang phải, lần led Nhấn SW2: nhấp nháy liên tục led Nhấn SW3: led chạy liên tục từ vào từ ngồi Nhấn SW4: dừng q trình chạy Bài 2.26: Viết chương trình kiểm tra cơng tắc: Nhấn SW1: đóng RL1, phát 10 xung PC6 Nhấn SW2: đóng RL2, phát xung PC6 Nhấn SW3: nhấp nháy đồng thời Led lần Nhấn SW4: tắt Led, ngắt RL1, RL2 kết thúc chương trình GV: Phạm Hùng Kim Khánh Trang 29 ... 8255.exe vào thư mục C:Emu8086Devices thực chương trình sau: #start=8255.exe# model small stack 100h GV: Phạm Hùng Kim Khánh Trang 19 Tài liệu thực hành Vi xử lý data code main proc mov ax,@data... 28 Tài liệu thực hành Vi xử lý exit: mov ah,4Ch int 21h main endp ; -delay proc push cx mov cx,0Fh loop $ pop cx ret delay endp END main Bài 2.25: Vi t chương trình kiểm... Relay đóng giá trị tương ứng Port C ngắt = GV: Phạm Hùng Kim Khánh Trang 18 Tài liệu thực hành Vi xử lý Cửa sổ chương trình mơ 8255: Led nối Port A Phím nhấn nối Port B Địa sở 8255 Cho phép reset