以STC89c52(一款典型的51系列52子系列单片机)为例
假设P34接蜂鸣器低电平控制,程序下载后处于循环等待状态,
当外部中断1发出中断,CPU响应后进入中断服务程序
蜂鸣器响
#include<re52h>
sbit fm=P3^4 //位声明
void main()
{
EA=1;//开CPU总中断
EX1=1;//开外部中断1
IT1=1;//外部中断1中断方式为下降沿触发
while(1);//循环等待外部中断1发出中断
}
void ex1() interrupt 2 //外部中断1中断服务程序,using 1(或者2,3)只中断服务程序分配特殊能寄存器,不写是可以的因为系统可以自动分配特殊功能寄存器区
{
fm=0;//蜂鸣器响,你想要处理其他事件也可加入到这里
}
#include<reg52h>
voidIntConfiguration()
{ //设置INT0
IT0=1;//外部中断0跳变沿触发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;//设置外部中断1为跳变沿触发方式
EX1=1;//打开外部中断0中断允许
EA=1;//打开总中断
void main()
{
IntConfiguration(); //外部中断初始化
P1=0xff; //设定P1口的初始状态
while(1)
{
} //在此等待进入外部中断
}
void zhongduan()interrupt 0
{
P1=~P1;
}
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(硬件控制,所以不用管它)
下面是修改的代码。你注意注释部分:
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
需要改的就这几个地方,希望你看看。因为你没有具体的限制是什么类型的单片机,这样的话,指令和中断地址就不能非常具体的给你改。你结合我的提示,改改吧。
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仿真系统进行仿真。
效果是一样的,不过你好像写错了吧,应该是INT0和INT1吧?
INT0优先级更高,INT0是除了复位之外优先级最高的中断了。
低电平触发就是只要中断输入引脚为低电平,那么程序就一直停留在中断程序里,直到检测到高电平。
上升沿和下降沿触发的话,分别是在低电平变高电平和高电平变低电平的一瞬间执行一次,执行完中断程序之后会自动退出中断程序,回到主程序。
概念:引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。
80C51的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套(就是可以在嵌套过程中再次响应嵌套) 。
中断源
1、INT0(P32),外部中断1。可由IT0(TCON0)选择其为低电平有效还是下降沿有效。当CPU检测到P32引脚上出现有效的中断信号时,中断标志IE0(TCON1)置1,向CPU申请中断。
2、INT1(P33),外部中断2。可由IT1(TCON2)选择其为低电平有效还是下降沿有效。当CPU检测到P33引脚上出现有效的中断信号时,中断标志IE1(TCON3)置1,向CPU申请中断。
3、TF0(TCON5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
4、TF1(TCON7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
5、RI(SCON0)或TI(SCON1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
中断请求标志
1、TCON的中断标志
IT0(TCON0):外部中断0触发方式控制位。
当IT0=0时:为电平触发方式。
当IT0=1时:为边沿触发方式(下降沿有效)。
IE0(TCON1):外部中断0中断请求标志位。
IT1(TCON2):外部中断1触发方式控制位。
IE1(TCON3):外部中断1中断请求标志位。
TF0(TCON5):定时/计数器T0溢出中断请求标志位。
TF1(TCON7):定时/计数器T1溢出中断请求标志位。
单片机TCON辅助设置工具
2、SCON的中断标志
RI(SCON0),串行口接收中断标志位。当允许串行口接收数据时,每接收完一个串行帧,由硬件置位RI。同样,RI必须由软件清除。
TI(SCON1),串行口发送中断标志位。当CPU将一个发送数据写入串行口发送缓冲器时,就启动了发送过程。每发送完一个串行帧,由硬件置位TI。CPU响应中断时,不能自动清除TI,TI必须由软件清除。
80C51中断的控制
中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
EX0(IE0):外部中断0允许位;
ET0(IE1):定时/计数器T0中断允许位;
EX1(IE2):外部中断0允许位;
ET1(IE3):定时/计数器T1中断允许位;
ES(IE4):串行口中断允许位;
EA (IE7): CPU中断允许(总允许)位。
单片机IE自动设计工具
中断优先级控制
80C51单片机有两个中断优先级,即可实现二级中断服务嵌套。每个中断源的中断优先级都是由中断优先级寄存器IP中的相应位的状态来规定的 。
PX0(IP0),外部中断0优先级设定位;
PT0(IP1),定时/计数器T0优先级设定位;
PX1(IP2),外部中断0优先级设定位;
PT1(IP3),定时/计数器T1优先级设定位;
PS (IP4),串行口优先级设定位;
PT2(IP5),定时/计数器T2优先级设定位。
单片机IP自动设计工具
中断优先级规则:
CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
正在进行的低优先级中断服务,能被高优先级中断请求所中断。
中断系统总结:
TCON和SCON是中断请求,以及控制外部中断的有效方式。IE控制是否允许CPU响应中断,是否允许响应某一个中断。IP控制中断的优先级。
00
以上就是关于某系统要启用外部中断1和外部中断2,要使用哪些引脚,怎样配置全部的内容,包括:某系统要启用外部中断1和外部中断2,要使用哪些引脚,怎样配置、用外部中断INT1实现对P1口8个LED状态取反、某8051单片机系统有四个中断源:T0、T1、INT0、INT1。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)