
一、实验目的
熟悉并行接口电路,掌握并行接口芯片8255A的应用及其编程技术。
二、实验内容
通过对8255芯片的编程,使得实验台上的步进电机按顺时针或逆时方向转动,同时数码管做0-9的加计数和减计数操作:
1.使用K0控制步进电机顺逆时针转动和数码管加减计数;
2.使用K1控制步进电机转速和数码管显示速度(分快和慢两种速度)。
3.使用K2启动和停止步进电机转动和数码管计数显示;
4.四个数码管轮流显示数据。
三、实验原理
将8255的A、B、C端口都设置在0工作方式(基本输出/
输入方式),A口输出信号控制步进电机转动和方向,
B口输出信号控制数码管显示,PC0—PC3口输入信号
控制步进电机和数码管的启动/停止,运动方向/加或减
计数,运动速度/计数速度。
PA0-PA4输出的一个4位二进制数值用于驱动步进电
机;PB0-PB7输出的一个8位二进制数值控制数码管的
计数显示;PC0-PC3分别输入3个控制信号。PC3—PC7
控制数码管的位选信号S0—S3。
3.1 步进电机的工作原理
3.2 数码管工作原理
3.3 8255端口、命令字、端口说明
3.3.1 8255端口说明
8255提供A、B、C 三个数据端口和一个控制端口进行并行数据的输入/输出和控制,这些端口对应的端口地址分别是:A端口: 288H
B端口: 2H
C端口: 28aH
控制口:28bH
3.3.2 8255工作方式说明
将8255设置在0工作方式,在方式0下8255提供:
.两个8位端口(PA0-PA7和PB0-PB7)
.两个4位端口(PC0-PC3和PC4-PC7)
A口和B口以及C口的高4位和低4位都可地设置为输入口和输出口,在此工作方式下,输出的数据被锁存,而输入的数据不被锁存。任何一个端口都可由CPU发出的I/O指令(IN、OUT)来进行读/写。
3.3.3 8255命令字说明
a)指定8255工作方式的控制字
b)8255 C口实现按位置位/复位功能的控制字
3.4 连线1.用导线将8255芯片的PA0-PA3端口分别与步进电机的BA、BB、BC和BD连接。
2.用导线将8255芯片的PB0-PB7端口与数码管的a、b、c、d、
e、f、g、dp连接。
3.用导线将8255芯片的PC0-PC1端口与开关K0-K1连接。
4.用导线将8255芯片的PC4-PC7端口与数码管S0-S3连接
5.用导线将8255_CS插孔与288H^28FH插孔连接。
3.5 程序流程图
四、程序代码
;用到的芯片:8255
;接线方式:
;1.PA0-PA7端口与显示灯的L1-L8连接;2.PB0-PB3端口分别与步进电机的BA、BB、BC和BD连接。
;3.PC0-PC1端口与开关K0-K1连接
;4.8255_CS插孔与288H^28FH插孔连接
;执行结果:
;1.K0=0,逆时针转;K0=1,顺时针转
;2.K1=0,慢转;K1=1,快转
data segment
buf1 db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;LED显示 buf2 byte 0 ;步进电机数据
buf3 byte 0 ;保存开关数据
buf4 byte 0 ;保存顺转数据
buf5 byte 9 ;保存反转数据
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov buf2,00110011b ;步进电机数据
mov dx,28bh ;8255控制口初始化
mov al,81h ;1000,0001
out dx,al
;-----------------------------逆转控制----------------
R0: mov dx,28ah ;读C口
in al,dx
mov buf3,al ;保存C口数据
test al,04 ;
jnz kai ;转反转test al,01 ;测试K0=1?
jnz L0 ;转反转
mov al,buf4 ;走马灯开始一步顺转 cmp al,9
jnz S1
call change9_0
S1: inc al ;数据加1
mov buf4,al
mov bx,offset buf1
xlat
mov dx,2h ;B口输出
out dx,al ;数据完成加1
mov al,buf2 ;电机开始一步逆转
ror al,1 ;数据左移
mov buf2,al
mov dx,288h ;A口输出
out dx,al ;电机完成一步逆转
mov al,buf3 ;回复C口数据
test al,02
jnz R1 ;转快转
call delay_s ;否则慢转
jmp R0
R1: call delay_q ;快转
jmp R0
;------------------------------顺转控制-----------------
L0: mov al,buf5 ;走马灯开始一步顺转
cmp al,0
jnz S2
call change0_9
S2: dec al ;数据减1
mov buf5,al ;
mov bx,offset buf1
xlat
mov dx,2h ;B口输出
out dx,al ;走马灯结束一步顺转 mov al,buf2 ;电机开始一步顺转 rol al,1 ;数据右移
mov buf2,al
mov dx,288h ;A口输出
out dx,al ;电机结束一步顺转 mov al,buf3 ;回复C口数据
test al,02
jnz L1 ;转快转
call delay_s ;否则慢转
jmp R0
L1: call delay_q ;快转
jmp R0
kai: mov dx,28ah ;读C口
in al,dx
mov buf3,al ;保存C口数据
test al,04 ;
jz L0 ;转反转
jmp kaiexit: mov ah,4ch
int 21h
delay_s proc near ;长延时 mov bx,20h
lp1: mov cx,0ffffh
lp2: loop lp2
dec bx
jnz lp1
ret
delay_s endp
delay_q proc near ;短延时 mov bx,1
lp11: mov cx,0ffffh
lp22: loop lp22
dec bx
jnz lp11
ret
delay_q endp
change9_0 proc near
mov buf4,-1
mov al,buf4
ret
change9_0 endp
change0_9 proc near
mov buf5,10
mov al,buf5
ret
change0_9 endp
code endsend start
五、实验体会
