void UART1_ISR(void) interrupt 4 using 1 { unsigned char ch; //½ÓÊÕÊý¾Ý if(RI) { RI = 0;//Çå³ýRIλ ch=SBUF; UART1_Rx_Buffer[Uart1_Write_Count]=ch; //½«½ÓÊÕµ½µÄÊý¾ÝдÈ뻺³åÇø UART1_Buffer_PntAdd(&Uart1_Write_Count);//д´®¿Ú1»º³åÇøÖ¸Õë¼Ó1 if(Uart1_Write_Count == Uart1_Read_Count)//Èç¹û¶Á¡¢Ð´»º³åÇøÖ¸ÕëÖصþ,Ôò¶ÁÖ¸Õë¼Ó1,Õâʱ½«¶ªÊ§1¸ö×Ö½ÚÊý¾Ý { UART1_Buffer_PntAdd(&Uart1_Read_Count);//¶Á´®¿Ú1»º³åÇøÖ¸Õë¼Ó1 } Uart1_Delay = 20;//´®¿Ú1½ÓÊÕÊý¾ÝÖ¡ÑÓʱ(ms)£¬ÑÓʱʱ¼äµ½µ±1Ö¡Êý¾Ý½ÓÊÕÍê³É } //·¢ËÍÊý¾Ý if (TI) { TI = 0; //Çå³ýTIλ busy = 0; //Çåæ±êÖ¾(1æ,0¿ÕÏÐ) } }
时间: 2024-02-04 16:02:05 浏览: 89
exp_micro_s.rar_4 3 2 1_UART MODELSIM_UART 波形_exp with vhdl _ex
这是一个用于UART1串口中断的中断服务(ISR),用于UART1串口的接收和发送事件。以下是该ISR的解释:
1. `if (RI)`:检测接收中断标志RI是否置位,表示接收到了数据。
- `RI = 0;`:清除接收中断标志RI。
- `ch = SBUF;`:将接收到的数据从SBUF寄存器中读取到变量ch中。
- `UART1_Rx_Buffer[Uart1_Write_Count] = ch;`:将接收到的数据存储到UART1接收缓冲区(UART1_Rx_Buffer)中,位置为Uart1_Write_Count。
- `UART1_Buffer_PntAdd(&Uart1_Write_Count);`:更新UART1接收缓冲区指针,将Uart1_Write_Count加1。
如果读写指针相等,表示接收缓冲区已满,则将读指针加1,丢弃一个字节的数据。
- `Uart1_Delay = 20;`:设置一个延迟时间,用于判断一帧数据的接收完成。
2. `if (TI)`:检测发送中断标志TI是否置位,表示发送完成。
- `TI = 0;`:清除发送中断标志TI。
- `busy = 0;`:将忙标志busy置为0,表示发送完成。
通过编写这个中断服务程序,可以实现UART1串口的数据接收和发送功能。请注意,这段代码可能是针对特定的嵌入式系统或芯片编写的,具体细节可能需要根据具体情况进行适当调整。
阅读全文