TCON应该为01010101B
中断标志与中断控制寄存器
:
TCON地址(88H)可位寻址(高四位控制计数与定时)(启动定时器)
D7 D6 D5 D4 D3 D2 D1 D0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TR1、TR0是T1、T0的启动控制位,置1起动。置0停止定时/计数器。
TF1、TF0是T1、T0的溢出标志位,溢出时由硬件置1,cp响应中断后由硬件清0软件查询时由软件清0(硬件控制,所以不用管它)
IT0、IT1为外部中断0、1的触发控制位IT0/1=0时为电平触发=1时下降沿触发
IE0、IE1为外部中断0、1请求标志,当有中断信号时由硬件置1,完成中断时由硬件清0(硬件控制,所以不用管它)
INT0/1为1下降沿触发 为0电平触发 ,而下降沿触发IE0和IE1可以自动清零,而电平触发得人为把IE0和IE1清零,要不然会一直启动中断。IE0/1可以自动清零,所以一般用下降沿触发
1、设置TI=1,是人为的设置了串行发送请求完毕的中断请求标志。但是你并没有致能(es=1)串口中断。实际上你的interrupt5的处理程序也没有写,是空的。(注意这点)
2、你既然没有设置it0=1(跳变触发中断),那么就是IT0=0(低电平触发)。
3、当一个低电平来的时候,就进入你的interrupt0处理程序。并且硬件自动清标记位置。执行完毕 beer=1。
4、这个时候还有一个中断请求标志IT=1,于是产生了中断嵌套。执行完高级中断后,进入低级中断interrupt5。之后是空白。。。。
5、结果就是你描述的:蜂鸣器一直响,数码管停止显示。
不知道我这样描述,你能不能理解。呵呵
1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUPA51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。
2、导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断允许,打开中断的总开关。
3、分别打开外部中断0和外部中断1的分开关,即EX0=1和EX1=1,同时设置中断的触发方式为跳沿触发,可以避免增加额外的电路。
4、如果不添加别的代码的话,此时这两个中断的优先级是外部中断0>外部中断1,如果一个中断正在执行来了另外一个中断是不会打断前一个中断的执行过程的,这里需要为中断设置优先级。
5、编写完主函数后,我们要为两个中断分别编写对应的中断服务函数,才能在中断发生后产生相应的响应,注意外部中断0和外部中断1的中断号分别是0和2。
6、然后到Project菜单中的output项目中勾选Create Hex File,OK后点击编译按钮,如果没有错误,即可生成可以烧录或者仿真的hex文件。
7、最后把生成出的hex烧入进51单片机进行运行或者装载入Proteus仿真系统进行仿真。
下面是修改的代码。你注意注释部分:
ORG 0000H
JMP START
ORG 13H //这里要改,因为it0和it1的中断向量表地址不同,这个地方要
//看你的单片机类型,51的话,就不是13这数值,你看看你的
//it0的中断起始地址应该是什么,把13H改了。
JMP INT_0 //改为INT_0
START: MOV IE,#10000100B //IE也需要改,设置中断控制寄存器:
//改为MOV IE,#01001000B
MOV SP,#30H
SETB IT1 //这里要改为SETB IT0
MOV A,#01010101B
LOOP: MOV P0,A
CALL DELAY
CPL A
JMP LOOP
INT_0: PUSH PSW
PUSH ACC
SETB RS0
MOV R0,#3
INT_LOOP:MOV A,#0FEH
MOV R1,#7
INT_LOOPL:MOV P0,A
CALL DELAY
RL A
DJNZ R1,INT_LOOPL
MOV R1,#7
INT_LOOPR:MOV P0,A
CALL DELAY
RR A
DJNZ R1,INT_LOOPR
DJNZ R0,INT_LOOP
POP ACC
POP PSW
RETI
DELAY: MOV R7,#200
D1: MOV R6,#250
DJNZ R6,$
DJNZ R7,D1
RET
END
需要改的就这几个地方,希望你看看。因为你没有具体的限制是什么类型的单片机,这样的话,指令和中断地址就不能非常具体的给你改。你结合我的提示,改改吧。
以上就是关于某8051单片机系统有四个中断源:T0、T1、INT0、INT1。全部的内容,包括:某8051单片机系统有四个中断源:T0、T1、INT0、INT1。、单片机实验 按钮触发外部中断 以下程序中为什么IT0和IT1为1即为什么是负跳变而不是低电平触发、51单片机问题,想问一下IT0=1和TI=1有什么区别,尽量解释清楚一些,谢谢!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)