Bài 2: Giao tiếp vi xử lý với các bộ chỉ thị
2. Lập trình cho vi xử lý xuất dữ liệu qua cổng song song
VÝ dô 1:
Lập trình điều khiển 8 Led đơn nối với cổng máy in (LPT) của máy tính để bàn với yêu cầu 8 led đơn chớp tắt lặp lại liên tục. Biết rằng địa chỉ của thanh ghi dữ
liệu là 378H, đầu ra tích cực ở mức cao.
+ Sơ đồ nguyên lý.
S4 D0 D1 D2 D3 D4 D5 D6 D7 C0\C1\
C2 C3\
C4 S3
S5 S6 S7\
D0D1 D2D3 D4D5 D6D7 114
215 316 417 518 619 720 821 922 1023 1124 1225 13
J1
CONN-D 25M
SO DO DIEU KHIEN 8 LED DO N Q UA THANH G HI DATA
2 A0 B0 18
3 A1 B1 17
4 A2 B2 16
5 A3 B3 15
6 A4 B4 14
7 A5 B5 13
8 A6 B6 12
9 A7 B7 11
19 CE AB/BA 1
U1
74HC245
R1
1k
D1
LE D-RED
R2
1k
D2
LE D-RED
R3
1k
D3
LE D-RED
R4
1k
D4
LE D-RED
R5
1k
D5
LE D-RED
R6
1k
D6
LE D-RED
R7
1k
D7
LE D-RED
R8
1k
D8
LE D-RED
Bước 1: Vẽ lưu đồ giải thuật
- Lưu đồ giải thuật có thể tham khảo như sau:
Xác lập các khai báo Nạp địa chỉ cổng LPT
Nạp AL =0 Xuất ra cổng LPT
Tạo trễ Nạp AL =0FFH Xuất ra cổng LPT
Bắt đầu
Bước 2: Viết chương trình
;Chuong trinh viet dang EXE
.MODEL small ;khai báo quy mô sử dụng chương trình là nhỏ .DATA ;khai bao doan du lieu
du_lieu db "chop tat 8 led don $"
.STACK 100 ;khai bao doan
;***********************
.CODE ;khai bao doan ma
Main Proc ;bắt đầu chương trình chính
;dat cac thanh ghi doan
mov ax,data ;muon AX de nap dia chi du lieu vao thanh ghi doan du lieu mov ds,ax
lea dx,du_lieu ;nap du lieu vao dx
mov ah,9 ;ngat xuat du lieu lam trong ds ra man hinh( du lieu bat ;buoc ;ket thuc=$)
int 21h
; ngat cho doi nhan phim lap:
mov dx,378h mov al,0 out dx,al call delay mov al,0ffh out dx,al
call delay jmp lap ends
mov ax, 4ch ; thoat khoi he mo int 21h
delay:
mov cx,1000 loop $
ret
ends main ;ket thuc viec hop dich chuong trinh
VÝ dô 2:
Lập trình điều khiển 8 Led đơn nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu 8 led đơn chớp tắt lặp lại liên tục. Biết rằng địa chỉ của thanh ghi dữ
liệu là 378H, đầu ra tích cực ở mức cao.
Bước 1: Vẽ lưu đồ giải thuật
- Lưu đồ giải thuật có thể tham khảo như sau:
Xác lập các khai báo Nạp địa chỉ cổng LPT
Bắt đầu
- Tắt các led đầu ra - Xuất ra cổng LPT - Đặt cờ C lên 1
KiÓm tra
- Xoay thanh ghi AL qua cê C
- Xuất ra cổng LPT - Gọi trễ
C=0
Bước 2: Viết chương trình
;Chuong trinh viet dang EXE
.MODEL small ;khai báo quy mô sử dụng chương trình là nhỏ .DATA ;khai bao doan du lieu
du_lieu db " 8 led don sang dan $"
.STACK 100 ;khai bao doan
;***********************
.CODE ;khai bao doan ma
Main Proc ;bắt đầu chương trình chính
;dat cac thanh ghi doan
mov ax,data ;muon AX de nap dia chi du lieu vao thanh ghi doan du lieu mov ds,ax
lea dx,du_lieu ;nap du lieu vao dx
mov ah,9 ;ngat xuat du lieu lam trong ds ra man hinh( du lieu bat ;buoc ;ket thuc=$)
int 21h
; ngat cho doi nhan phim lap:
mov dx,378h mov al,0 out dx,al call delay nhan:
Stc
Rcl al,1 out dx,al call delay Jnc nhan jmp lap ends
mov ax, 4ch ; thoat khoi he mo int 21h
delay:
mov cx,0fffh lap2: push cx mov cx, 0ffffh loop $
pop cx loop lap2 ret
ends main ;ket thuc viec hop dich chuong trinh
VÝ dô 3:
Lập trình điều khiển Led 7 đoạn nối với cổng máy in ( LPT) của máy tính để bàn với yêu cầu đếm lên từ 0-9. Biết rằng địa chỉ của thanh ghi dữ liệu là 378H, thanh ghi trạng thái là 37Ah đầu ra tích cực ở mức cao.
Viết chương trình
.MODEL small ;khai báo quy mô sử dụng chương trình là nhỏ .DATA ;khai bao doan du lieu
du_lieu db " Dem lent tu 0 - 9 $"
.STACK 100 ;khai bao doan
;***********************
.CODE ;khai bao doan ma
Main Proc ;bắt đầu chương trình chính
;dat cac thanh ghi doan
mov ax,data ;muon AX de nap dia chi du lieu vao thanh ghi doan du lieu mov ds,ax
lea dx,du_lieu ;nap du lieu vao dx
mov ah,9 ;ngat xuat du lieu lam trong ds ra man hinh( du lieu bat ;buoc ;ket thuc=$)
int 21h
; ngat cho doi nhan phim
mov dx,37Ah ; thanh ghi ®iÒu khiÓn mov al,00010101b ; chọn led đơn vị out dx,al
lap:
mov dx,378h
mov al,0C0h ; mã số 0 out dx,al
call delay
mov al,0F9h ; mã số 1 out dx,al
call delay
mov al,0A4h ; mã số 2 out dx,al
call delay
mov al,0B0h ; mã số 3 out dx,al
call delay
mov al,99h ; mã số 4 out dx,al
call delay
mov al,92h ; mã số 5
out dx,al call delay
mov al,82h ; mã số 6 out dx,al
call delay
mov al,0F8h ; mã số 7 out dx,al
call delay
mov al,80h ; mã số 8 out dx,al
call delay
mov al,90h ; mã số 9 out dx,al
call delay jmp lap ends
mov ax, 4ch ; thoat khoi he mo int 21h
delay:
mov cx,50000 nhan:push cx mov cx,50000 loop $
pop cx loop nhan ret
ends main ;ket thuc viec hop dich chuong trinh Một số lỗi thường gặp
Thanh ghi điều khiển 37Ah có 3 bit đầu tiên có mức tích cực như sau:
/C0: strobe (đảo mức)
/C1: Auto Linefeed (đảo mức)
C2: Initialize Printer(Reset) (không đảo mức)
Do đó, trong quá trình lập trình xuất dữ liệu cần phải lưu ý đến đặc điểm này để ghi dữ liệu phù hợp.
Bài tập:
Bài tập 1: Viết chương trình cho vi xử lý điều khiển các led đơn thực hiện theo yêu cầu sau:
- Tắt dần
- Một điểm sáng chạy - Một điểm tối chạy
- Một điểm sáng một điểm tối xen kẽ nhâu - Sáng từ giữa ta, tắt từ giữa ra
- Sáng từ 2 bên vào, tắt từ 2 bên vào - Sáng dồn, tối dồn
Bài tập 2: Viết chương trình cho vi xử lý điều khiển các led đơn sáng dần 2 lần tắt dần 3 lần, chớp tắt 4 lần rồilặp lại.
Bài tập 3: Viết chương trình cho vi xử lý điều khiển các led đơn thực hiện theo yêu cầu sau:
- Bấm phím A thì các led đơn chớp tắt - Bấm phím B thì các led đơn sáng dần
Bài tập 4: Viết chương trình cho vi xử lý điều khiển led 7 đoạn thực hiện theo yêu cầu đếm lên từ 0 – 9 rồi đếm xuống từ 9 - 0
Bài tập 5: Viết chương trình cho vi xử lý điều khiển 2 led 7 đoạn đếm lên từ 00 - 99