微机原理 基础硬件实验实验一 8255控制灯实验

微机原理 基础硬件实验实验一 8255控制灯实验,第1张

MODEL TINY

COM_ADD EQU 0F003H

PA_ADD EQU 0F000H

PB_ADD EQU 0F001H

PC_ADD EQU 0F002H

STACK 100

DATA

LED_Data DB 01111101B

DB 11111101B

DB 10111101B

DB 11010111B

DB 11011111B

DB 11011011B

CODE

START: MOV AX,@DATA

MOV DS,AX

NOP

MOV DX,COM_ADD

MOV AL,80H

OUT DX,AL

MOV DX,PA_ADD

MOV AL,0FFH

OUT DX,AL

LEA BX,LED_Data

START1: MOV AL,0

XLAT

OUT DX,AL

CALL DL5S

MOV CX,6

START2: MOV AL,1

XLAT

OUT DX,AL

CALL DL500ms

MOV AL,0

XLAT

OUT DX,AL

CALL DL500ms

LOOP START2

MOV AL,2

XLAT

OUT DX,AL

CALL DL3S

MOV AL,3

XLAT

OUT DX,AL

CALL DL5S

MOV CX,6

START3: MOV AL,4

XLAT

OUT DX,AL

CALL DL500ms

MOV AL,3

XLAT

OUT DX,AL

CALL DL500ms

LOOP START3

MOV AL,5

XLAT

OUT DX,AL

CALL DL3S

JMP START1

DL500ms PROC NEAR

PUSH CX

MOV CX,60000

DL500ms1: LOOP DL500ms1

POP CX

RET

DL500ms ENDP

DL3S PROC NEAR

PUSH CX

MOV CX,6

DL3S1: CALL DL500ms

LOOP DL3S1

POP CX

RET

ENDP

DL5S PROC NEAR

PUSH CX

MOV CX,10

DL5S1: CALL DL500ms

LOOP DL5S1

POP CX

RET

ENDP

END START

这个就是流水灯的程序,不过是在开发箱上做的。

单片机的

C8255 EQU 8406H

D8255C EQU 8404H

D8255A EQU 8400H

SPDTR EQU 20H

STEPPT EQU 21H

DIRL EQU 22H

DIRH EQU 23H

SWITCH EQU 24H

ORG 0000H

LJMP START

ORG 000BH

LJMP RUNINT

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

SETB ET0

SETB EA

RET

CHKSWITCH:

MOV DPTR,#D8255A

MOVX A,@DPTR

ANL A,#8FH

CJNE A,SWITCH,$+6

LJMP SWITCHRET

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

MOVC A,@A+DPTR

MOV SPDTR,A

JZ $+4

SETB TR0

SWITCHRET:RET

RUNINT:

PUSH PSW

PUSH ACC

PUSH DPH

PUSH DPL

CLR TR0

MOV TH0,SPDTR

MOV TL0,#00H

SETB TR0

MOV DPH,DIRH

MOV DPL,DIRL

MOV A,STEPPT

INC A

ANL A,#07H

MOV STEPPT,A

MOVC A,@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

CODE SEGMENT

ASSUME CS:CODE

IOCONPT EQU 0FF2BH

IOAPT EQU 0FF28H

IOBPT EQU 0FF29H

IOCPT EQU 0FF2AH

ORG 10e0H

START: MOV DX,IOCONPT

MOV AL,80H

OUT DX,AL

MOV DX,IOBPT

MOV AL,00H

OUT DX,AL

MOV DX,IOCPT

MOV AL,0FH ;H

OUT DX,AL

CALL DELAY1

IOLED0: MOV AL,01011010B ;13L 24H

MOV DX,IOCPT

OUT DX,AL

CALL DELAY1

CALL DELAY1

MOV AL,00001010B ;13LN

OUT DX,AL

MOV CX,8H

IOLED1: MOV DX,IOBPT

MOV AL,50H

OUT DX,AL

CALL DELAY2

MOV AL,00H

OUT DX,AL

CALL DELAY2

LOOP IOLED1

MOV DX,IOCPT

MOV AL,10100101B

OUT DX,AL

CALL DELAY1

CALL DELAY1

MOV AL,00000101B

OUT DX,AL

MOV CX,8H

IOLED2: MOV DX,IOBPT

MOV AL,0A0H

OUT DX,AL

CALL DELAY2

MOV AL,00H

OUT DX,AL

CALL DELAY2

LOOP IOLED2

MOV DX,IOCPT

MOV AL,0FH

OUT DX,AL

CALL DELAY2

JMP IOLED0

DELAY1: PUSH AX

PUSH CX

MOV CX,0030H

DELY2: CALL DELAY2

LOOP DELY2

POP CX

POP AX

RET

DELAY2: PUSH CX

MOV CX,8000H

DELA1: LOOP DELA1

POP CX

RET

CODE ENDS

END START

当然能用了,你是现在初学C++的话用VC++60。适合初学者不是最新就好,VS太高级了所以适合就好,如果需要孙鑫的教程,hi我

我可以帮助你,你先设置我最佳答案后,我百度Hii教你。

希望对你有帮助

我记得有个8255A芯片,是端口拓展用的,时间太长了,具体记不清。

1、查数据手册,找8255A的指令用法,学会必须的指令。

2、查数据手册,找8255A的数据线、地址线的连接方法,看管脚图,确定原理图。

3、查数据手册,找8255A的封装,绘制电路板,Protel里有这个芯片的封装,可以直接用。

4、制板、焊件、调试,如果是面包板,就确定该连接的都连接好。

5、程序思路:

1、给8255A初始化指令,让A\B\C口都输出高或低电平,连接LED查看是否工作正常。

2、程序要求出方波,就是一会儿出高电平,一会儿出低电平就是方波。

3、主程序中:

1、初始化51的各个寄存器。

2、初始化8255A

3、发指令给8255A,让A口0线出低电平

4、第一个延时程序,控制低电平持续时间,可以用加法比较延时,也可用定时器。

5、发指令给8255A,让A口0线出高电平

6、第二个延时程序,控制高电平持续时间,同4

7、LOOP循环到程序3位置。死循环即可。

用示波器看输出的波形,调整4、6的参数,使得方波满足你要的高低电平时间,不要特意计算程序一条指令是多少时间,延时多少时间,那样即麻烦,又不准,8255A是有执行延迟的,所以用示波器看输出最准。

这些是02年我大二时学的,好久不用。

估计你是用来完成老师的作业,实际干活,没人用8255的。不知我猜对了没有。

总线周期的含义是什么。8086/8088CPU的基本总线周期由几个时钟组成。如果一个设置8255A工作方式,8255A的控制口地址为OOC6H。

要求端口A工作在方式1,输入;

,XWDvpF

以上就是关于微机原理 基础硬件实验实验一 8255控制灯实验全部的内容,包括:微机原理 基础硬件实验实验一 8255控制灯实验、12编写实验程序,利用8255的输出来控制步进电机的运转、微机原理 8255A应用——交通控制程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10161313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存