编写初始化程序,要先写控制字,所以先假设8255A的端口A、端口B和控制字寄存器的端口地址分别为20H、21H和22H,那么初始化程序为:MOV DX,023H;MOV AL,10010000B;OUT DX,AL······(其中控制字为:10010000B,PC端多为输出端)。
8255A的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。
其中,方式控制字用于设置端口A,B,C的工作方式和数据传送方向,置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平,两个控制字公用一个端口地址。
扩展资料:
8255A具有3种基本的工作方式,在对8255A进行初始化编程时,应向控制字寄存器 写入方式选择控制字,用来规定8255A各端口的工作方式。
这3种基本工作方式是:
1、方式0——基本输入输出方式:适用于不需要用应答信号的简单输入输出场合,这种方式端口A和B可作为8位的端口,端口C的高4位和低4位可作为两个4位的端口;
2、方式1——选通输入输出方式:端口A和B作为数据口,均可工作于输入或输出方式,端口C的6根线用来产生或接受联络信号。
3、方式2——双向总线I/O方式:只有端口A可以工作于这种方式,端口A工作于方式2 时,端口C的5位(PC3~PC7)作A口的联络控制信号。
参考资料来源:百度百科-8255A芯片
单片机的C8255 EQU 8406H
D8255C EQU 8404H
D8255A EQU 8400H
SPDTR EQU 20H
STEPPT EQU 21H
DIRLEQU 22H
DIRHEQU 23H
SWITCH EQU 24H
ORG 0000H
LJMPSTART
ORG 000BH
LJMPRUNINT
ORG 0100H
START:
MOV SP,#40H
LCALL INIT
LCALL CHKSWITCH
SJMP$-3
INIT:
CLR EA
MOV DPTR,#C8255
MOV A,#90H
MOVX@DPTR,A
MOV DPTR,#MRSTEP
MOV DIRH,DPH
MOV DIRL,DPL
MOV SPDTR,#00H
MOV SWITCH,#00H
MOV TMOD,#00H
SETBET0
SETBEA
RET
CHKSWITCH:
MOV DPTR,#D8255A
MOVXA,@DPTR
ANL A,#8FH
CJNE A,SWITCH,$+6
LJMPSWITCHRET
MOV SWITCH,A
CLR TR0
RLC A
JC $+7
MOV DPTR,#MLSTEP
SJMP $+5
MOV DPTR,#MRSTEP
MOV DIRL,DPL
MOV DIRH,DPH
RLC A
RLC A
RLC A
RLC A
JC SPD4
RLC A
JC SPD3
RLC A
JC SPD2
RLC A
JC SPD1
SJMP SPD0
SPD4: MOV A,#04H
SJMP CHGSPD
SPD3: MOV A,#03H
SJMP CHGSPD
SPD2:MOV A,#02H
SJMP CHGSPD
SPD1: MOV A,#01H
SJMP CHGSPD
SPD0:MOV A,#00H
CHGSPD:MOV DPTR,#SPD
MOVCA,@A+DPTR
MOV SPDTR,A
JZ $+4
SETBTR0
SWITCHRET:RET
RUNINT:
PUSHPSW
PUSHACC
PUSHDPH
PUSHDPL
CLR TR0
MOV TH0,SPDTR
MOV TL0,#00H
SETBTR0
MOV DPH,DIRH
MOV DPL,DIRL
MOV A,STEPPT
INC A
ANL A,#07H
MOV STEPPT,A
MOVCA,@A+DPTR
MOV DPTR,#D8255C
MOVX@DPTR,A
POP DPL
POP DPH
POP ACC
POP PSW
RETI
SPD: DB 00H,17H,77H,0A7H,0C7H
MRSTEP:DB 01H,03H,02H,06H,04H,0CH,08H,09H
MLSTEP:DB 08H,0CH,04H,06H,02H,03H,01H,09H
END
接线是PA0-PA7接K1-K8
PC0-PC3接SMA-SMD
CS55接8400H
还有另外一种自动实现快速正转反转或慢速正转反转之类的.如果是微机原理课的用8086/8088
ORG 0003H
LJMP KEY
ORG 001BH
LJMP TINT
ORG 4000H
LJMP REST
ORG 4200H
REST: MOV SP,#70H
ANL TMOD,#0F0H
ORL TMOD,#02H
MOV TH0,#05H
MOV TL0,#05H
MOVX @DPTR,A
MOV DPTR,#1B31H
MOV A,#0D3H
MOVX @DPTR,A
MOV A,#2AH
MOVX @DPTR,A
MOV A,#00H
MOVX @DPTR,A
MOV A,#40H
MOVX @DPTR,A
MOV A,#90H
MOVX @DPTR,A
MOV 20H,#00H
MOV 21H,#00H
MOV 22H,#00H
MOV 23H,#00H
MOV 24H,#0FFH
MOV 25H,#00H
MOV R0,#21H
MOV R2,#02H
MOV R7,#33H
SETB EX0
SETB ET1
SETB EA
MAIN: LCALL MANI
LJMP MAIN
MANI: MOV DPTR,#1B31H
MOV A,#90H
MOVX @DPTR,A
MOV DPL,#30H
MANI1: MOV A,@R0
LCALL TABLE
MOVX @DPTR,A
INC R0
DJNZ R2,MANI1
MOV R0,#21H
MOV R2,#02H
RET
TABLE: INC A
MOVC A,@A+PC
RET
DB 3FH,06H,5BH,4FH
DB 66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DB 73H
KEY: PUSH ACC
PUSH PSW
PUSH DPL
MOV DPL,#30H
MOVX A,@DPTR
ANL A,#3FH
ACCEL: CJNE A,#02H,DECEL
CLR TR1
MOV 25H,#01H
MOV 21H,#0AH
MOV 23H,#00H
SETB TR1
LJMP OUTK
DECEL: CJNE A,#06H,BACK
CLR TR1
MOV 25H,#02H
MOV 21H,#0EH
MOV 23H,#0C0H
SETB TR1
LJMP OUTK
BACK: CJNE A,#03H,FRONT
MOV 20H,#01H
MOV 22H,#0BH
LJMP OUTK
FRONT: CJNE A,#07H,STOP
MOV 20H,#00H
MOV 22H,#0FH
LJMP OUTK
STOP: MOV 25H,#00H
CJNE A,#08H,STEP1
CLR TR1
MOV 21H,#00H
LJMP OUTK
STEP1: CJNE A,#09H,STEP2
CLR TR1
MOV 21H,#01H
MOV 23H,#00H
SETB TR1
LJMP OUTK
STEP2: CJNE A,#0AH,STEP3
CLR TR1
MOV 21H,#02H
MOV 23H,#3FH
SETB TR1
LJMP OUTK
STEP3: CJNE A,#0BH,STEP4
CLR TR1
MOV 21H,#03H
MOV 23H,#66H
SETB TR1
LJMP OUTK
STEP4: CJNE A,#0CH,STEP5
CLR TR1
MOV 21H,#04H
MOV 23H,#7FH
SETB TR1
LJMP OUTK
SREP5: CJNE A,#0DH,POINT
CLR TR1
MOV 21H,#05H
MOV 23H,#0C0H
SETB TR1
LJMP OUTK
POINT: CJNE A,#05H,OUTK
CLR TR1
MOV 21H,#0DH
LCALL DIREC
OUTK: POP DPL
POP PSW
POP ACC
RETI
TINT: PUSH ACC
PUSH PSW
PUSH DPL
LCALL DIREC
LCALL REL
OUTT: POP DPL
POP PSW
POP ACC
RETI
DIREC: MOV DPL,#08H
MOV R1,20H
MOV A,R7
CJNE R1,#00H,BACKD
FRONTD: RR A
LJMP OUTD
BACKD: CJNE R1,#01H,OUTD
RL A
OUTD: MOVX @DPTR,A
MOV R7,A
RET
REL: MOV R1,25H
CJNE R1,#01H,REL2
MOV A,23H
CJNE A,#0C0H,REL1
MOV TH1,A
RET
REL1: MOV TH1,A
INC A
MOV 23H,A
RET
REL2: CJNE R1,#02H,REL0
MOV A,23H
JNZ REL3
MOV TH1,A
RET
REL3: MOV TH1,A
DEC A
MOV 23H,A
RET
REL0: MOV TH1,23H
RET
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)