论坛元老
 
- 积分
- 6662
- 金钱
- 6662
- 注册时间
- 2016-5-29
- 在线时间
- 910 小时
|
发表于 2017-12-20 13:07:41
|
显示全部楼层
本帖最后由 操作系统 于 2017-12-20 17:04 编辑
//串口空闲中断,我来给你一个完美的初始化程序.
#define uc unsigned char
void init_uart(void)
{
#ifdef UART_EN
#define SYSTIME_CLK 16000000
#define UART_RATE 256000
#define AAAA (SYSTIME_CLK/UART_RATE)
UART1_BRR2 = (uc ) ((AAAA>>8)&0X00F0)|(AAAA&0X000F);
UART1_BRR1 = (uc)((AAAA <<4)>>8);
UART1_CR2 = 0x3C; // 打开发送,打开接收,接收中断,空闲中断打开
UART1_CR1 = 0;
#endif
}
// 中断服务程序
#pragma vector = VECTOR_UART1_RX
__interrupt void uart_rx(void)
{
volatile uc t;
t= UART1_SR;
if(t & bit4)
{// 空闲中断发生了.产生事件标志位,以在大循环查询处理
me.uartRecFlag = 1;
t = UART1_DR;
}
else
{
uartBuf[uartRecDataLen++] = UART1_DR;
}
}
//其它的必要的声明什么的.自己加上
|
|