51的中断程序用C怎么写

用c语言的话中断程序是单独写在中断服务函数中的,51单片机的中断服务函数的定义:
void functionname(void) interrupt num  //functionname是自己定义的函数名字,num对应实际的中断向量号
 

进入中断要执行中断子程序,不同的中断源要进入不同的中断子程序。对于51的C编程,可以用中断标号,如‘interrupt 0 ’来使中断进入不同的中断。

中断标号与它们的中断优先级一致,即

外部中断0 interrupt 0

定时器中断0 interrupt 1

外部中断1 interrupt 2

定时器中断1 interrupt 3

串行中断 interrupt 4

 

//----------------------------------------------------------------------------- // Interrupt Priorities //-----------------------------------------------------------------------------

#define INTERRUPT_INT0             0   // External Interrupt 0 #define INTERRUPT_TIMER0           1   // Timer0 Overflow #define INTERRUPT_INT1             2   // External Interrupt 1 #define INTERRUPT_TIMER1           3   // Timer1 Overflow #define INTERRUPT_UART0            4   // Serial Port 0 #define INTERRUPT_TIMER2           5   // Timer2 Overflow #define INTERRUPT_SPI0             6   // Serial Peripheral Interface 0 #define INTERRUPT_SMBUS0           7   // SMBus0 Interface #define INTERRUPT_USB0             8   // USB Interface #define INTERRUPT_ADC0_WINDOW      9   // ADC0 Window Comparison #define INTERRUPT_ADC0_EOC         10  // ADC0 End Of Conversion #define INTERRUPT_PCA0             11  // PCA0 Peripheral #define INTERRUPT_COMPARATOR0      12  // Comparator0 #define INTERRUPT_COMPARATOR1      13  // Comparator1 #define INTERRUPT_TIMER3           14  // Timer3 Overflow #define INTERRUPT_VBUS_LEVEL       15  // VBUS level-triggered interrupt #define INTERRUPT_UART1            16  // Serial Port 1

 
实例:
问题:
外部中断0 外部中断1对应的是一个中断程序吗?
如果是对应一个中断程序,那2个外部中断 能对应2种动作吗?(正用中断做了电子表按键选择,按键加是用的查询法,想把这个键也用中断 跳变触发。)
如果不是,请举一下例子好吗,只说一下中断程序的程序名也好。
 
回答:
void in0 (void) interrupt 0
{
...
}
 
void in1 (void) interrupt 2
{
...
}
 
参考网页:http://zhidao.baidu.com/question/175774567.html
http://zhidao.baidu.com/question/430911697.html
http://wenwen.soso.com/z/q268299339.htm
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #include <reg52.h>//定义中断向量 #define INT0_VECTOR 0x03 #define INT1_VECTOR 0x0b//定义外部中断0和1,分别是P3.2和P3.3 #define INT0 P3_2 #define INT1 P3_3//定义中断服务程序入口地址 void INT0_Service(void) interrupt INT0_VECTOR; void INT1_Service(void) interrupt INT1_VECTOR;//中断服务程序实现 void INT0_Service(void) interrupt INT0_VECTOR { //中断服务程序代码 }void INT1_Service(void) interrupt INT1_VECTOR { //中断服务程序代码 }//初始化外部中断 void Init_INT(void) { //配置INT0和INT1的IO口 //... //配置INT0和INT1的中断类型 //... //使能INT0和INT1 //... }void main() { //初始化中断 Init_INT(); while(1) { //程序代码 } }这是一个关于51单片机中断程序的问题,我不是很了解,但可以提供一些建议:首先,应该定义中断向量;然后,定义外部中断0和1,分别是P3.2和P3.3;接着,定义中断服务程序入口地址;最后,初始化外部中断,使能INT0和INT1。 ### 回答2: 下面是使用C语言编的基于51单片机的简单中断程序的示例代码: ```c #include<reg51.h> /* 定义中断服务函数 */ void interrupt_isr() interrupt 0 { /* 在此处编中断服务函数的代码 */ /* 中断发生时执行此处代码 */ } /* 主函数 */ void main() { EA = 1; // 开启总中断允许位 EX0 = 1; // 开启外部中断0允许位 while(1) { // 主循环中的其他任务 } } ``` 在上面的程序中,我们首先定义了一个名为`interrupt_isr`的中断服务函数。在函数主体中,你可以编中断处理程序的实际代码,用于处理特定的中断事件。在示例中,中断服务函数被定义为外部中断0的中断源,即在外部中断0触发时执行。 然后,在主函数中,我们首先启用总中断允许位`EA`,这允许中断服务函数被执行。然后,我们还启用外部中断0允许位`EX0`,这使得当外部中断0触发时,中断服务函数被调用。 最后,我们进入一个无限循环`while(1)`,在这个循环中执行主程序的其他任务。这个无限循环是为了确保程序不会在中断发生后退出。 ### 回答3: 下面是一段基于51单片机的中断程序的C语言代码: ```c #include <reg52.h> // 定义中断向量地址 #define TIMER0_VECTOR 1 // 定义全局变量,用于计数 volatile unsigned int count = 0; // 定义中断处理函数 void timer0_isr() interrupt TIMER0_VECTOR { count++; // 每次中断计数器加1 } // 主函数 void main() { // 初始化定时器0,配置为定时模式,设置中断时间间隔 TMOD = 0x01; TH0 = 0xFC; TL0 = 0x67; // 设置中断允许并开启定时器0中断 ET0 = 1; TR0 = 1; EA = 1; while (1) { // 等待中断发生,计数达到一定值后执行相应操作 if (count >= 1000) { // 执行中断处理操作 // ... // 清零计数器 count = 0; } // 继续执行其他主程序操作 // ... } } ``` 以上代码实现了一个基于51单片机的中断程序。在主函数中,首先配置定时器0为定时模式,并设置中断时间间隔。然后开启中断允许,允许定时器0中断,并开启定时器0。然后进入一个无限循环,等待中断发生。当计数器`count`的值达到一定值(这里设置为1000)时,执行相应的中断处理操作,并将计数器清零。然后继续执行其他主程序操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值