1. Trang chủ
  2. » Thể loại khác

Vi xử lý phkkhanh bai2

14 174 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nó là một thiết bị I/O đa dụng có thể sử dụng với bất cứ P nào, có thể lập trình để truyền dữ liệu, từ I/O thông thường đến I/O interrupt.. Trong chế độ này, các kiểu truyền dữ liệu I/O

Trang 1

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 các vấn đề sau:

- Sử dụng phần mềm Emu8086 để mô phỏng hoạt động của vi xử lý

8086

THIẾT BỊ SỬ DỤNG

- Máy vi tính

- Phần mềm Emu8086

- Chương trình mô phỏng hoạt động của 8255A

1 Cơ sở lý thuyết

8255A là thiết bị xuất nhập song song lập trình được Nó là một thiết bị I/O đa dụng có thể sử dụng với bất cứ P nào, có thể lập trình để truyền dữ liệu,

từ I/O thông thường đến I/O interrupt

8255A có thể chia thành 3 Port: A, B và C; mỗi port 8 bit trong đó Port C

có thể sử dụng như 8 bit riêng hay chia thành 2 nhóm, mỗi nhóm 4 bit: PCH (PC7  PC4) và PCL (PC3  PC0)

8255A có thể hoạt động ở 2 chế độ (mode): BSR (Bit Set/Reset) và I/O

 Chế độ BSR: dùng để đặt hay xóa các bit của Port C

 Chế độ I/O: gồm có 3 chế độ:

- Chế độ 0: tất cả các Port làm việc như các Port I/O đơn giản

- Chế độ 1 (chế độ bắt tay: handshake): các Port A và B dùng các bit của Port C làm tín hiệu bắt tay Trong chế độ này, các kiểu truyền

dữ liệu I/O có thể được cài đặt, kiểm tra trạng thái và ngắt

- Chế độ 2: Port A có thể dùng để truyền dữ liệu song hướng dùng các tín hiệu bắt tay từ Port C còn Port B được thiết lập ở chế độ 0 hay 1

CS A1 A0 Chọn

0

0

0

0

1

0

0

1

1

x

0

1

0

1

x

Port A Port B Port C Thanh ghi điều khiển 8255A không hoạt động

Trang 2

Thanh ghi điều khiển:

Dùng để xác định chức năng của các Port Nội dung của thanh ghi này gọi

là từ điều khiển (CW: Control Word) Thanh ghi điều khiển sẽ được truy xuất khi A1 = A0 = 1 Chú ý rằng ta không thể thực hiện tác vụ Đọc đối với thanh ghi này

Nếu bit D7 = 0, Port C làm việc ở chế độ BSR nhưng từ điều khiển BSR không ảnh hưởng đến chức năng các Port A, B

Để giao tiếp với ngoại vi thông qua 8255A cần phải:

- Xác định địa chỉ của các port A, B, C và CR thông qua các chân chọn chip CS và giải mã A1, A0

- Ghi từ điều khiển vào thanh ghi điều khiển

- Ghi các lệnh I/O để giao tiếp với ngoại vi qua các port A, B, C

 Từ điều khiển BSR:

Từ điều khiển BSR khi được ghi vào thanh ghi điều khiển sẽ đặt hay xoá mỗi lần 1 bit

D7

Nhóm B

PCL (PC3  PC0) 1: Input

0: Output

PB 1: Input 0: Output

Mode 1: Mode 1 0: Mode 0

Nhóm A

PCH (PC7  PC4)

1: Input

0: Output

PA

1: Input

0: Output

Mode

1x: Mode 2

01: Mode 1

00: Mode 0

D6 D5 D4 D3 D2 D1 D0

1: Mode I/O

0: Mode BSR

Dạng từ điều khiển cho 8255A ở chế độ I/O

Trang 3

D7 D6 D5 D4 D3 D2 D1 D0

Mode

BSR

Không sử dụng Chọn bit

000: PC0 001: PC1 010: PC2 011: PC3 100: PC4 101: PC5 110: PC6 111: PC7

0: Xoá (Reset) 1: Đặt (Set)

Khi sử dụng ở mode BSR, cần chú ý các điều sau:

- Để đặt hay xoá các bit ở Port C, từ điều khiển được ghi vào thanh ghi điều khiển chứ không ghi vào Port C

- Một từ điều khiển BSR chỉ ảnh hưởng đến một bit của Port C

- Từ điều khiển BSR không ảnh hưởng đến I/O mode

2 Tiến trình thực hiện

Xét 8255 được kết nối phần cứng như sau:

- Port A: nối với 8 Led (theo thứ tự PA0 – PA7 nối với Led0 – Led7), trong đó Led sáng khi giá trị tương ứng gởi ra là 1

- Port B: nối với 4 công tắc nhấn trong đó 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 và khi nhấn công tắc bất kỳ, giá trị tương ứng tại Port B là 1; không nhấn thì = 0

- Port C: nối với 3 Relay 1,2,3 tương ứng nối với PC0,1,2 trong đó Relay đóng khi giá trị tương ứng tại Port C là 1 và ngắt khi = 0

Trang 4

Cửa sổ chương trình mô phỏng 8255:

3.1 Điều khiển Led

8 Led dữ liệu được kết nối với Port A của U5 (có địa chỉ là 300h), như vậy

nếu muốn xuất dữ liệu ra Led, ta dùng lệnh OUT DX,AL trong đó DX chứa địa

chỉ của Led (300h) và AL chứa dữ liệu muốn xuất ra Led

 Bài 2.1: Sáng 4 Led phải

Copy file 8255.exe vào thư mục C:\Emu8086\Devices và thực hiện

chương trình sau:

#start=8255.exe#

.model small

.stack 100h

Led nối Port A Phím nhấn nối Port B Địa chỉ cơ sở của 8255

Cho phép reset 8255

Vẽ dạng sóng tại ngõ ra PC6

Các Relay nối với Port C

Trang 5

.data

.code

main proc

mov ax,@data mov ds,ax mov ax,02h int 10h

mov dx,303h ;Địa chỉ CR của 8255

mov dx,300h ;Địa chỉ Port A (nối với Led) mov al,0Fh

out dx,al

exit:

mov ah,4Ch ;Kết thúc chương trình int 21h

main endp

END main

- Biên dịch và 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 trên cửa sổ chương trình mô phỏng

8255

- Nhấn nút Reset 8255

Nhận xét tác dụng của đoạn lệnh định cấu hình của 8255

 Bài 2.3: Sửa lại bài 2.1 để sáng 4 Led trái

 Bài 2.4: Sửa lại bài 2.1 để sáng 4 Led giữa

 Bài 2.5: Sửa lại bài 2.1 để sáng đồng thời Led 0 và Led 7

 Bài 2.6: nhấp nháy 8 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 ; Sáng 8 Led mov dx,300h

Trang 6

out dx,al call delay

mov al,0FFh ; Tắt 8 Led mov dx,300h

out dx,al call delay

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 8 Led 5 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 = 5 lap:

mov al,0 mov dx,300h out dx,al call delay

mov al,0FFh mov dx,300h out dx,al

Trang 7

call delay

loop lap ; Số lần lặp tuỳ theo CX 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.8: Sửa lại bài 2.7 để thực hiện nhấp nháy 2 Led giữa 10 lần

 Bài 2.9: Sửa lại bài 2.7 để thực hiện nhấp nháy đồng thời 2 Led 0

và Led 4 8 lần

 Bài 2.10: Sửa lại bài 2.7 để Led sáng tuần tự từ trái sang phải, mỗi lần 1 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 ; Sáng Led 7 mov dx,300h

out dx,al call delay

mov al,40h ; Sáng Led 6 mov dx,300h

out dx,al call delay

mov al,20h ; Sáng Led 5 mov dx,300h

out dx,al call delay

Trang 8

mov al,10h ; Sáng Led 4 mov dx,300h

out dx,al call delay

mov al,08h ; Sáng Led 3 mov dx,300h

out dx,al call delay

mov al,04h ; Sáng Led 2 mov dx,300h

out dx,al call delay

mov al,02h ; Sáng Led 1 mov dx,300h

out dx,al call delay

mov al,01h ; Sáng Led 0 mov dx,300h

out dx,al call delay

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 bài 2.10 để Led sáng tuần tự từ phải sang trái, mỗi lần 1 Led

 Bài 2.12: Sửa lại bài 2.10 để Led sáng dần từ trái sang phải

 Bài 2.13: Sửa lại bài 2.10 để Led sáng dần từ phải sang trái

 Bài 2.14: Sửa lại bài 2.10 để Led sáng từ ngoài vào trong, mỗi lần 2 Led

 Bài 2.15: Sửa lại bài 2.10 để Led sáng từ trong ra ngoài, mỗi lần 2 Led

 Bài 2.16: Sửa lại bài 2.10 nhưng lặp lại 5 lần

 Bài 2.17: Thực hiện bài 2.10 nhưng dùng vòng lặp

Trang 9

.model small

.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 ;PA: XUẤT, PB: NHẬP, PC: XUẤT mov dx,303h ;Địa chỉ CR của 8255

out dx,al ;Định cấu hình cho 8255

mov bx,0 mov dx,300h ; Địa chỉ Led

next1:

mov al,pa[bx]

out dx,al

call delay

inc bx

cmp bx,8 ; Led có 8 trạng thái

jne next1

exit:

mov ah,4Ch ; Kết thúc chương trình

int 21h

main ENDP

ret

END main

 Bài 2.18: Thực hiện bài 2.17 nhưng lặp lại 7 lần

 Bài 2.19: Thực hiện bài 2.17 nhưng sáng liên tục, khi nhấn một phím bất kỳ thì kết thúc chương trình

 Bài 2.20: Thực hiện bài 2.17 nhưng sáng liên tục, khi nhấn phím ESC thì kết thúc chương trình

 Bài 2.21: Viết chương trình cho Led sáng tuần tự từ trái sang phải 5 lần, nhấp nháy 2 Led giữa 3 lần, sáng dần từ phải sang trái 6 lần, tắt dần từ trái sang phải 4 lần, lặp lại toàn bộ quá trình 5 lần

Trang 10

3.2 Khảo sát Relay

Các Relay được nối với Port C của U5 Do đó, nếu muốn đóng Relay nào,

ta sẽ cho bit tương ứng của Port C = 1 còn nếu muốn ngắt Relay thì sẽ cho bit tương ứng = 0

Đó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 lần lượt các Relay 1, 2, 3 và sau đó đóng các Relay này theo thứ tự 3, 2, 1:

#start=8255.exe#

.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,00h ; Ngắt RL1 mov dx,303h

out dx,al call delay

mov al,02h ; Ngắt RL2 mov dx,303h

out dx,al call delay

mov al,04h ; Ngắt RL3 mov dx,303h

out dx,al call delay

mov al,05h ; Đóng RL3 mov dx,303h

out dx,al call delay

Trang 11

mov al,03h ; Đóng RL2 mov dx,303h

out dx,al call delay

mov al,01h ; Đóng RL1 mov dx,303h

out dx,al call delay

exit:

mov ah,4Ch int 21h main endp

ret

END main

 Bài 2.23: Chương trình tạo xung vuông tại PC6

#start=8255.exe#

.data

.code

main proc

mov ax,@data mov ds,ax

mov al,82h mov dx,303h out dx,al

lap:

mov al,0Ch mov dx,303h out dx,al call delay

mov al,0Dh mov dx,303h out dx,al

Trang 12

call delay jmp lap

exit:

mov ah,4Ch int 21h main endp

ret

END main

3.3 Khảo sát công tắc nhấn

Công tắc nhấn được nối với Port B của U5, khi nhấn SW thi bit tương ứng của Port B sẽ = 1 còn nếu không nhấn thì bằng 0 Như vậy, muốn kiểm tra công tắc nào được nhấn, ta phải kiểm tra bit tương ứng của Port B

 Bài 2.24: Chương trình kiểm tra công tắc nhấn như sau:

#start=8255.exe#

.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

Trang 13

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 al,3Ch mov dx,300h out dx,al jmp begin

Trang 14

exit:

mov ah,4Ch int 21h main endp

; -

loop $

ret

END main

 Bài 2.25: Viết chương trình kiểm tra các công tắc nhấn:

Nhấn SW1: led chạy liên tục từ trái sang phải, mỗi lần 1 led

Nhấn SW2: nhấp nháy liên tục 2 led giữa

Nhấn SW3: led chạy liên tục từ ngoài vào trong và từ trong ra ngoài

Nhấn SW4: dừng quá trình chạy

 Bài 2.26: Viết chương trình kiểm tra các công tắc:

Nhấn SW1: đóng RL1, phát 10 xung ra PC6

Nhấn SW2: đóng RL2, phát 5 xung ra PC6

Nhấn SW3: nhấp nháy đồng thời 2 Led 0 và 7 5 lần

Nhấn SW4: tắt các Led, ngắt RL1, RL2 và kết thúc chương trình

Ngày đăng: 21/01/2018, 11:37

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN