N76E003的中断向量函数

学习新唐 N76E003的中断向量函数


void UART0_ISR() interrupt 4 using 1 等价于 #pragma vector = 0x23
`串口0 中断IE4.4 的入口地址0x23


C51 中断向量表

8051系列的MCU 基本结构包括:

  • 32个I/O口(4组8bit端口);
  • 两个16位定时计数器;
  • 全双工串行通信;
  • 6个中断源 (2个外部中断,2个定时/计数器中断、1个串口输入/输出中断)
  • 两级中断优先级
  • 128字节内置RAM
  • 独立的64K 字节可寻址数据和代码区

中断入口地址被编译器放在中断向量种,中断向量位于代码段最低地址处,串口输入/输出中断共用一个中断向量。

8051的中断向量表如下:
中断源 中断向量
上电复位 0000H
外部中断0 0003H
定时器0 溢出 000BH
外部中断1 0013H
定时器1 溢出 001BH
串行口中断 0023H
定时器2 溢出 0028H

Interrupt 和 using 都是C51 的关键字。C51 中断过程通过使用interrupt 关键字和中断号(0-31)来实现。

IE寄存器 C51 中的8051的
使能位 中断号 中断源
IE0 0 外部中断0
IE1 1 定时器0 溢出
IE2 2 外部中断1
IE3 3 定时器1 溢出
IE4 4 串口中断
IE5 5 定时器2 溢出

Using 关键字用来指定中断服务程序使用的寄存器组。

用法: using 后跟一个0-3 的数,对应着4组工作寄存器。
一旦指定工作寄存器组,默认的工作寄存器组就不会被压栈,会节约32个处理周期。
缺点是,所有调用中断的过程都必须使用指定的同一个寄存器组,否则参数传递会发送错误。

示例代码1

 * FUNCTION_PURPOSE: serial interrupt, echo received data.
 * FUNCTION_INPUTS: P0.7(RXD) serial input
 * FUNCTION_OUTPUTS: P0.6(TXD) serial output
 */
void SerialPort0_ISR(void) interrupt 4 
{
    if (RI==1) 
    {                                       /* if reception occur */
        clr_RI;                             /* clear reception flag for next reception */
        UART_BUFFER[u16CNT] = SBUF;
        u16CNT ++;
		riflag =1;
    }
    if(TI==1)   { clr_TI;   }                  /* if emission occur */

}	//UART0 接收中断
#pragma vector = 0x23     //串行口中断入口地址
__interrupt void uart0_recv(void)
{
  if(RI==1)       {     clr_RI;     }         //接收中断处理
}

示例代码2

//UART0 接收中断
#pragma vector = 0x23     //串行口中断入口地址
__interrupt void uart0_recv(void)
{
       if(RI==1)     {   clr_RI;    }   //接收中断处理      
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值