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

Vi xử lý phkkhanh bai3

10 175 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 358,11 KB

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

Nội dung

Vi xử lý phkkhanh bai3 tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài tập lớn về tất cả các lĩnh vực kinh...

Trang 1

BÀI 3: TRUYỀN DỮ LIỆU QUA PORT

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

- Máy vi tính

- Phần mềm Emu8086

- Chương trình mô phỏng hoạt động của I/O port

1 Cơ sở lý thuyết

Khi giao tiếp với thiết bị ngoại vi, ngoài cách giao tiếp thông qua 8255, ta cũng có thể giao tiếp trực tiếp với hệ thống thông qua các mạch giải mã địa chỉ

và lập trình trực tiếp thông qua các địa chỉ này, thông thường ta gọi là các port giao tiếp

Các port giao tiếp có thể kết nối với các mạch điện tử cơ bản như: Led đơn, Led 7 đoạn, …

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

2.1 Xuất / nhập dữ liệu qua Port

Cửa sổ chương trình IOPort.exe:

 Bài 3.1: Copy file ioport.exe vào thư mục C:\Emu8086\Devices và thực

hiện chương trình sau:

#start=ioport.exe#

.model small

Dữ liệu ghi ra port Dữ liệu đọc vào từ port

Địa chỉ port ghi Địa chỉ port đọc

Trang 2

.stack 100h

.data

msg db 'Gia tri nhap:$'

msg1 db 'Gia tri xuat:$'

msg2 db 'Nhan ''N'' de nhap gia tri, ''X'' de xuat gia tri, ESC de thoat$'

.code

main proc

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

mov ah,02h ; Chuyển toạ độ con trỏ đến mov dx,0101h ; hàng 1, cột 1

int 10h mov ah,09h ; Xuất chuỗi msg ra màn hình lea dx,msg

int 21h

mov ah,02h mov dx,0201h ; Hàng 2, cột 1 int 10h

mov ah,09h lea dx,msg1 int 21h

mov ah,02h mov dx,0D01h ; Hàng 13, cột 1 int 10h

mov ah,09h lea dx,msg2 int 21h begin:

mov ah,08h ; Chờ phím nhấn int 21h

cmp al,'N' ; Nhấn N thì nhập

je Nhap cmp al,'n'

je Nhap cmp al,'X' ; Nhấn X thì xuất

je Xuat cmp al,'x'

je Xuat cmp al,27 ; Nhấn ESC thì thoát

je exit jmp begin

Trang 3

mov dx,300h ; Địa chỉ port nhập

in al,dx mov dx,010Eh ; Hàng 1, cột 15 mov ah,02h

mov bh,0 int 10h call Xuatthapphan ; Xuất giá trị vừa nhập jmp begin

Xuat:

mov dx,020Eh ; Hàng 2, cột 15 mov ah,02h

mov bh,0 int 10h call Nhapthapphan ; Nhập giá trị từ bàn phím mov dx,301h

out dx,al ; Xuất ra port có địa chỉ 301h jmp begin

exit:

mov ah,4Ch int 21h main endp

Xuatthapphan proc

mov ah,0 ; Xuất số hàng trăm mov bl,100

div bl push ax mov dl,al add dl,'0' mov ah,02h int 21h pop ax

mov al,ah ; Xuất số hàng chục mov ah,0

mov bl,10 div bl push ax mov dl,al add dl,'0' mov ah,02h int 21h pop ax

mov dl,ah ; Xuất số hàng đơn vị add dl,'0'

mov ah,02h int 21h ret

Trang 4

Xuatthapphan endp

; -

Nhapthapphan proc

mov ah,01h ; Nhập số hàng trăm int 21h

sub al,'0' mov ah,0 mov bl,100 mul bl mov bh,al

mov ah,01h ; Nhập số hàng chục int 21h

sub al,'0' mov ah,0 mov bl,10 mul bl add bh,al

mov ah,01h ; Nhập số hàng đơn vị int 21h

sub al,'0' add al,bh ret

Nhapthapphan endp

END main

- Thực thi chương trình

- Nhấn nút ‘N’, quan sát giá trị nhập.trên màn hình Dùng chương trình IOPort thay đổi giá trị tại địa chỉ 300h và nhấn ‘N’ Quan sát và nhận xét kết quả

- Nhấn nút ‘X’, nhập một số thập phân có 3 chữ số và quan sát giá trị thay đồi tại địa chỉ 301h của chương trình IOPort

 Bài 3.2: Thực hiện lại bài 3.1 nhưng thay đổi port nhập là 202h và port xuất là 302h trong chương trình IOPort

 Bài 3.3: Thực hiện bài 3.1 nhưng xuất ra màn hình là giá trị thập lục phân

 Bài 3.4: Thực hiện bài 3.1 nhưng xuất ra màn hình là giá trị nhị phân

 Bài 3.5: Thực hiện bài 3.1 nhưng không nhập giá trị từ bàn phím mà lấy giá trị đã nhập từ port nhập để đưa ra port xuất

Trang 5

2.2 Điều khiển Led 7 đoạn

Cửa sổ chương trình Led 7 đoạn:

Hiển thị theo mã Led Số lượng Led hiển thị

(1 – 4 Led) Địa chỉ các Led

Hiển thị theo số nhị

phân từ 0 – 9, A - F

Cho phép hiện dấu chấm hay không

Trang 6

Đối với phần hiển thị là Led 7 seg, quy ước Led dạng cathode chung

(nghĩa là Led sáng tương ứng bit điều khiển = 1) va thứ tự từ MSB đến LSB là:

dp -> g -> f -> e -> d -> c -> b -> a

 Bài 3.6: Copy file Led7seg.exe vào thư mục C:\Emu8086\Devices

và thực hiện chương trình sau (dùng chế độ hiển thị trong chương trình Led7seg là Binary):

#start=led7seg.exe#

.model small

.stack 100h

.data

.code

main proc

mov ax,@data mov ds,ax mov ax,02h int 10h mov al,1 ; Xuất 1 mov dx,300h

out dx,al mov al,2 ; Xuất 2 mov dx,301h

out dx,al mov al,3 ; Xuất 3 mov dx,302h

out dx,al mov al,4 ; Xuất 4 mov dx,303h

out dx,al mov ah,4Ch int 21h main endp

END main

 Bài 3.7: Thực hiện chương trình sau (dùng chế độ hiển thị trong chương trình Led7seg là Binary):

#start=led7seg.exe#

.model small

.stack 100h

.data

.code

main proc

mov ax,@data mov ds,ax mov ax,02h int 10h mov ax,2345 call XuatLED mov ah,4Ch

Trang 7

main endp

XuatLED proc

; Xuất nội dung trong thanh ghi AX ra 4 Led

mov dx,0 mov bx,1000 ; Chia cho 1000 div bx ; AX = thương số (số hàng ngàn) ; DX = số dư

push dx mov dx,300h ; Xuất ra Led out dx,al

pop dx

mov ax,dx mov dx,0 mov bx,100 ; Chia cho 100 div bx ; AX = số hàng trăm

push dx mov dx,301h out dx,al pop dx

mov ax,dx mov dx,0 mov bx,10 ; Chia cho 10 div bx ; AX = số hàng chục

push dx mov dx,302h out dx,al pop dx

mov ax,dx mov dx,303h ; Xuất số hàng đơn vị out dx,al

ret XuatLED endp

END main

 Bài 3.8: Đếm các giá trị tăng dần trên 4 Led 7 đoạn từ 0000 đến

2345 (chế độ hiển thị là Binary)

 Bài 3.9: Thực hiện chương trình sau (dùng chế độ hiển thị trong chương trình Led7seg là Led 7 seg):

#start=led7seg.exe#

.model small

.stack 100h

.data

.code

main proc

Trang 8

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

mov al,06h ; Mã của số 1 mov dx,300h

out dx,al

mov al,3Fh ; Mã của số 0 mov dx,301h

out dx,al

mov al,7Fh ; Mã của số 8 mov dx,302h

out dx,al

mov al,6Fh : Mã của số 9 mov dx,303h

out dx,al

mov ah,4Ch int 21h main endp

END main

 Bài 3.10: Thực hiện chương trình sau (dùng chế độ hiển thị trong chương trình Led7seg là Led 7 seg):

#start=led7seg.exe#

.model small

.stack 100h

.data

MaLed7 db 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh .code

main proc

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

mov ax,1234 call XuatLED

mov ah,4Ch int 21h main endp

XuatLED proc

; Xuat noi dung trong thanh ghi AX ra 4 Led

Trang 9

mov bx,1000 div bx

push dx mov bx,ax mov al,MaLed7[bx]; Chuyển sang mã Led 7 đoạn mov dx,300h ; trước khi xuất

out dx,al pop dx

mov ax,dx mov dx,0 mov bx,100 div bx

push dx mov bx,ax mov al,MaLed7[bx]

mov dx,301h out dx,al pop dx

mov ax,dx mov dx,0 mov bx,10 div bx push dx mov bx,ax mov al,MaLed7[bx]

mov dx,302h out dx,al pop dx

mov ax,dx mov bx,ax mov al,MaLed7[bx]

mov dx,303h out dx,al ret

XuatLED endp

END main

 Bài 3.11: Đếm các giá trị tăng dần trên 4 Led 7 đoạn từ 0000 đến

1234 (chế độ hiển thị là Led 7 seg)

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