单片机c语言的各个中断函数模型
2个回答
展开全部
c51中断函数的介绍
C51编译器允许用c51创建中断服务程序,大家仅仅需要关心中断号和寄存器组的选择就可以了。编译器自动产生中断向量和程序的入栈及出栈代码。在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。
一、中断函数的定义
1、中断函数定义的格式为:
函数类型 函数名 interrupt n using n
其中:
Interrupt后面的n是中断号。
关键字using后面的n是所选择的寄存器组,取值范围是0-3.
定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。
2、8051的中断过程通过使用interrupt关键字和中断号来实现,中断号告诉编译器中断程序的入口地址。中断号对应着IE寄存器中的使能位,换句话说,IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0.
IE寄存器中的使能位与外部中断对应关系:
中断号 中断源
0 外部中断0
1 定时器0
2 外部中断1
3 定时器1中断
4 串行口中断
5 定时器2中断
二、使用中断函数时要注意的问题:
1. 在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。
中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR.
2. 中断函数不能传递参数。
3. 中断函数没有返回值。
4. 中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。
5. 中断函数使用浮点运算要保存浮点寄存器的状态。
C51编译器允许用c51创建中断服务程序,大家仅仅需要关心中断号和寄存器组的选择就可以了。编译器自动产生中断向量和程序的入栈及出栈代码。在函数声明时包括interrupt,将把所声明的函数定义为一个中断服务程序。另外,可以用using定义此中断服务程序所使用的寄存器组。
一、中断函数的定义
1、中断函数定义的格式为:
函数类型 函数名 interrupt n using n
其中:
Interrupt后面的n是中断号。
关键字using后面的n是所选择的寄存器组,取值范围是0-3.
定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。
2、8051的中断过程通过使用interrupt关键字和中断号来实现,中断号告诉编译器中断程序的入口地址。中断号对应着IE寄存器中的使能位,换句话说,IE寄存器中的0位对应着外部中断0,相应的外部中断0的中断号是0.
IE寄存器中的使能位与外部中断对应关系:
中断号 中断源
0 外部中断0
1 定时器0
2 外部中断1
3 定时器1中断
4 串行口中断
5 定时器2中断
二、使用中断函数时要注意的问题:
1. 在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。首先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果,这时有充足的时间等待中断是十分重要的。其次它可使中断服务程序的结构简单,不容易出错。
中断程序中放入的东西越多,他们之间越容易起冲突。简化中断服务程序意味着软件中将有更多的代码段,但可把这些都放入主程序中。中断服务程序的设计对系统的成败有至关重要的作用,要仔细考虑各中断之间的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR.
2. 中断函数不能传递参数。
3. 中断函数没有返回值。
4. 中断函数调用其他函数,则要保证使用相同的寄存器组,否则出错。
5. 中断函数使用浮点运算要保存浮点寄存器的状态。
追问
能不能把这四个中断的初始化写出来给我啊
意法半导体(中国)投资有限公司
2020-01-15 广告
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
5 个中断初始化
1.外中断0
void EX0init()
{
EA=1;
EX0=1;
IT0=1;//IT0为1 时,下降沿触发,为0时低电平触发
}
2.定时器T0中断//
void T0init()
{
TMOD=1;
TH0=(655536-50000)/256; //50ms定时为例
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
3.外中断1
void EX1init()
{
EA=1;
EX1=1;
IT1=1;//IT1为1时下降沿触发,为0时低电平触发
}
4.定时器T1中断
void T1init()
{
TMOD=1;
TH1=(655536-50000)/256; //50ms定时为例
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void URATinit()
{
TMOD = 0x20;
SCON = 0x50;//串口中断方式1,允许接收
TH1 = 0xfd; //11.0592hz晶振,9600pbs波特率
TL1 = TH1;
PCON = 0x00; 波特率无加倍,为0x01 加倍
EA = 1;
ES = 1;
TR1 = 1;
}
1.外中断0
void EX0init()
{
EA=1;
EX0=1;
IT0=1;//IT0为1 时,下降沿触发,为0时低电平触发
}
2.定时器T0中断//
void T0init()
{
TMOD=1;
TH0=(655536-50000)/256; //50ms定时为例
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
3.外中断1
void EX1init()
{
EA=1;
EX1=1;
IT1=1;//IT1为1时下降沿触发,为0时低电平触发
}
4.定时器T1中断
void T1init()
{
TMOD=1;
TH1=(655536-50000)/256; //50ms定时为例
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void URATinit()
{
TMOD = 0x20;
SCON = 0x50;//串口中断方式1,允许接收
TH1 = 0xfd; //11.0592hz晶振,9600pbs波特率
TL1 = TH1;
PCON = 0x00; 波特率无加倍,为0x01 加倍
EA = 1;
ES = 1;
TR1 = 1;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询