用一片8253产生周期为20秒的连续方波信号,已知8253端口地址为210-213H,系统
1个回答
关注
展开全部
8253延时程序:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
CODE ENDS
END START
硬件延时控制跑马灯:
CODE SEGMENT
ASSUME CS:CODE
MOV AL,10010010H;8255初始化
MOV DX,283H
OUT DX,AL
;8253硬件延时程序
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
;8255输出程序
MOV AL,01H
MOV BL,AL;将Al值送到BL暂存
;8253输出电平上升沿进入
XUN1:
MOV DX,281H;从8255B口输入
IN AL,DX
TEST AL,01H;测试8253是否为高电平
JNZ XUN1;否,继续循环测试
XUN2:
MOV DX,280H;从8255A口输入
IN AL,DX
TEST AL,01H;测试开关输出是否为高电平
JNZ XUN2;否,继续循环测试
咨询记录 · 回答于2021-12-13
用一片8253产生周期为20秒的连续方波信号,已知8253端口地址为210-213H,系统
8253延时程序:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
CODE ENDS
END START
硬件延时控制跑马灯:
CODE SEGMENT
ASSUME CS:CODE
MOV AL,10010010H;8255初始化
MOV DX,283H
OUT DX,AL
;8253硬件延时程序
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
;8255输出程序
MOV AL,01H
MOV BL,AL;将Al值送到BL暂存
;8253输出电平上升沿进入
XUN1:
MOV DX,281H;从8255B口输入
IN AL,DX
TEST AL,01H;测试8253是否为高电平
JNZ XUN1;否,继续循环测试
XUN2:
MOV DX,280H;从8255A口输入
IN AL,DX
TEST AL,01H;测试开关输出是否为高电平
JNZ XUN2;否,继续循环测试
8253延时程序:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
CODE ENDS
END START
硬件延时控制跑马灯:
CODE SEGMENT
ASSUME CS:CODE
MOV AL,10010010H;8255初始化
MOV DX,283H
OUT DX,AL
;8253硬件延时程序
START:
MOV DX,29BH
MOV AL,00110101B;8253初始化,选择通道0,采用BCD计数方式
OUT DX,AL
MOV DX,298H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,50H
OUT DX,AL
MOV DX,29BH
MOV AL,01110111B;8253初始化,选择通道1,采用BCD计数方式
OUT DX,AL
MOV DX,299H
MOV AL,00H;写计数器初值,先写低字节,后写高字节
OUT DX,AL
MOV AL,04H
OUT DX,AL
;8255输出程序
MOV AL,01H
MOV BL,AL;将Al值送到BL暂存
;8253输出电平上升沿进入
XUN1:
MOV DX,281H;从8255B口输入
IN AL,DX
TEST AL,01H;测试8253是否为高电平
JNZ XUN1;否,继续循环测试
XUN2:
MOV DX,280H;从8255A口输入
IN AL,DX
TEST AL,01H;测试开关输出是否为高电平
JNZ XUN2;否,继续循环测试
MOV AL,BL;将暂存在BL中的值送到AL中
MOV DX,282H
OUT DX,AL;C口输出
;8253输出电平下降沿退出
XUN3:
MOV DX,281H;从8255B口输入
IN AL,DX
TEST AL,01H;测试8253是否为高电平
JZ XUN3;是,继续循环测试
;左移一位,暂存在BL中,防止AL被修改
ROL BL,1
JMP XUN1;循环检测该程序
CODE ENDS
END START
好的,谢谢
好的,谢谢
如果我的回答对你有帮助的话,期待你的赞。
已赞过
评论
收起
你对这个回答的评价是?