学习新唐 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; } //接收中断处理
}
上一篇:N76E003的学习之路(ADC简单小例程篇)
下一篇:新手如何入门新塘N76E003单片机
推荐阅读最新更新时间:2024-11-11 14:06
设计资源 培训 开发板 精华推荐
- LT1764ET-1.8 3.3 VIN 至 2.5 VOUT LDO 稳压器的典型应用
- EVAL-ADUM3151Z,用于评估 iCoupler ADuM3153BRSZ 数字隔离器的评估板
- 基于L6230的STM32 Nucleo三相无刷直流电动机驱动器扩展板
- ELRS 2.4G发射-TFT彩屏版
- DHT11温湿度上报器
- TCR2LN28 200mA、2.8V输出电压CMOS低压降稳压器的典型应用
- 基于STM32F334R8的数字电源控制套件STEVAL-DPS334C1
- HV9922DB2、离线、非隔离、23V、45mA 辅助电源演示板
- DC2085A-D,具有 LTC2000A-16、16 位、2.7Gsps DAC 和 DDR LVDS 接口的演示板
- ssss