完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
[img=110,0][/img] [img=110,0][/img] 以上是电路图,但是中断无法响应 出现如下的情况,8259一直都在写ICW控制字。[img=110,0][/img] 不知道是什么原因 程序如下: OY0 EQU 0C400H ;片选IOY0对应的端口始地址 IOY1 EQU 0C440H ;片选IOY1对应的端口始地址 IOY2 EQU 0C480H ;片选IOY2对应的端口始地址 IOY3 EQU 0C4C0H ;片选IOY3对应的端口始地址 INTR2 EQU 0AH ;中断类型码 ;***************************************************************** MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址 MY8253_0 EQU IOY2+00H*2 ;8253的A口地址 MY8253_1 EQU IOY2+01H*2 ;8253的B口地址 MY8253_2 EQU IOY2+02H*2 ;8253的C口地址 DATA SEGMENT TABLE DB 79H,24H,30H,19H,12H,02H,78H,00H,18H ;7段共阴数码表1~9 TES DB ? ;用于保存是否是违规抢答 ;CS_B DW ?;保存INTR2原中断处理程序入口段地址变量 ;IP_B DW ?;保存INTR2原中断处理程序入口偏移地址的变量 ;IM_B DW ?;保存INTR2原中断屏蔽字的变量 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX ;8259A初始化 MOV DX,IOY1+00H MOV AL,13H;初始化8259A的ICW1 OUT DX,AL MOV DX,IOY1+02H MOVAL,08H;送中断类型码基值,8259A的ICW2 OUTDX,AL MOV DX,IOY1+02H MOVAL,03H;一般中断结束方式,8259A的ICW4 OUTDX,AL ;8255初始化 MOV DX,MY8255_MODE ;初始化8255工作方式 MOV AL,98H ;工作方式0,A口输入,B口输出,C口高4位输入,低4位输出 OUT DX,AL XOR AL,AL;清0 MOV DX,MY8255_B;B口初始化 OUT DX,AL MOV DX,MY8255_C ;C口初始化 OUT DX,AL ;8253初始化 MOV DX,MY8253_0;置8253通道0控制字 MOV AL,37H;可读/写,先低后高,方式3,BCD计数 OUT DX,AL MOV AL,00H OUT DX,AL MOV AL,80H OUT DX,AL;置8253通道0计数初值为8000 MOV DX,MY8253_1 ;置8253通道1控制字 MOV AL,73H;可读/写,先低后高,方式1,BCD计数 OUT DX,AL MOV AL,00H OUT DX,AL MOV AL,75H OUT DX,AL;置8253通道1计数初值为7500 MOV DX,MY8253_2;置8253通道2控制字 MOV AL,0B7H;可读/写,先低后高,方式3,BCD计数 OUT DX,AL MOV AL,00H OUT DX,AL MOV AL,00H OUT DX,AL;置8253通道2计数初值为0 ;中断设置 CLI MOV AX,0 MOV ES,AX ;目的地址基址为ES,其值为0 MOV DI,INTR2*4 MOV AX,OFFSET SELECT MOV ES:[DI],AX;设置当前中断处理程序入口偏移地址 MOV AX,SEG SELECT MOV ES:[DI+2],AX;设置当前中断处理程序入口段地址 Sti ;主程序 LOPM: MOV DX,MY8255_C IN AL,DX;读PC5端口 TEST AL,20H;检测开始键 JZ LOP3;开始键未按下即PC5=0,则跳转检测 LOP2: MOV DX,MY8255_C IN AL,DX;读PC5端口 TEST AL,20H;检测开始键 JNZ LOP2;开始键是否弹起即PC5=0?否,则继续循环 MOV DX,MY8255_B MOV AL,0FFH;关闭LED显示器 OUT DX,AL;送到B口 MOV DX,MY8255_C MOV AL,09H;绿灯变亮,启动倒计时 OUT DX,AL;送到C口 MOV TES,0FFH;置违规抢答标志 STI;开中断请求 LOP3:MOV DX,MY8255_C IN AL,DX;读PC4端口 TEST AL,10H;检测复位键 JZ LOPM;复位键未按下即PC5=0,则跳转检测 LOP4:MOV DX,MY8255_C IN AL,DX;读PC4端口 TEST AL,10H;检测复位键 JNZ LOP4;复位键是否弹起即PC5=0?否,则继续循环 MOV DX,MY8255_B MOV AL,0FFH;关闭LED显示 OUT DX,AL MOV DX,MY8255_C MOV AL,00H;关闭指示灯显示 OUT DX,AL MOV TES,00H;清除违规抢答标志 STI JMP LOPM ;中断程序 SELECT PROC FAR PUSH AX PUSH BX PUSH DX PUSH DS CLI;并使本次中断压入堆栈中的IF=0 ;(关中断) MOV DX,MY8255_A ;读A口 IN AL,DX NOT AL ;将按键信息按位取反 MOV CX,8 ;循环技计数8次 LOP1: SHR AL,1 ;逻辑右循 MOV AX,CX ;获取按键选环 LOOPNZ LOP1 ;非0时循环手号 MOV BX,OFFSET TABLE ;查询7段码表格 XLAT ;将选手号转换为7段码 MOV DX,MY8255_B ;写B口 OUT DX,AL ;LED显示 TEST TES,0FFH ;判断违规抢答标志位是否为FFH JZLOP5 MOV DX,MY8253_2 MOV AL,00H OUT DX,AL MOV AL,10H OUT DX,AL ;抢答成功,扬声器响,频率1KHz MOV DX,MY8255_C MOV AL,01H OUT DX,AL ;黄灯变亮,同时关闭定时器 JMP QUIT LOP5:MOV DX,MY8255_C MOV AL,04H OUT DX,AL ;红灯亮抢答违规 MOV DX,MY8253_2 MOV AL,00H OUT DX,AL MOV AL,20H ;违规抢答,扬声器响,频率0.5KHz OUT DX,AL QUIT: MOV DX,IOY1+00H MOV AL,62H OUT DX,AL ;给8259发中断结束命令,写OCW2 POP DS POP DX POP BX POP AX IRET SELECT ENDP MOV AX,4C0H INT 21H CODE ENDS END START
|
|
相关推荐
1个回答
|
|
啊!又是汇编,路过不懂!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
635 浏览 0 评论
【原创】收藏!单片机输出4种波形的函数信号发生器毕设(Proteus仿真+原理图+源码和论文)
1921 浏览 1 评论
6568 浏览 6 评论
《Proteus实战攻略从简单电路到单片机电路的仿真》+读后总结与推荐
995 浏览 0 评论
请问2020版本ADS中的symbol如何设置出layout look-alike
68348 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-2 14:33 , Processed in 0.323684 second(s), Total 41, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号