📄 uart0 接收1.c
字号:
//USART设置//
//1.USART0的设置
U0CTL=0x11;
U0TCTL=0x21; //时钟源选择系统主时钟SMCLK //0x10; //时钟源选择辅助时钟ACLK
U0RCTL=0x00; //只有接收到无差错字符(即FE=0,PE=0,OE=0,BRK=0)时,才会将当前接收到的字符装入U0RXBUF中(同时使U0RXIFG=1)
U0BR0=0x00; //0x03;
U0BR1=0x03; //0;
U0MCTL=0x00;//0x15; //BAUD=7372800/(0X300+(0+0+0+0+0+0+0+0)/8)=9600 //BAUD=32768/(0X03+(0+0+0+1+0+1+0+1)/8)=9709.04
U0CTL&=0xfe;
//SFR中的中断控制位的设置//
ME1=0xc0; // bit7=1,bit6=1: UART0 Transmit/Receive enabled
ME2=0; //0x30; //先禁止USART1的发送和接收
IFG1=0;
IFG2=0;
IE1=0x40; //bit7=0: UART0 transmit interrupt disable;
//bit6=1: UART0 receive interrupt enabled;
IE2=0; //0x30; //bit5=0,bit4=0: UART1 Transmit/Receive interrupt disable
//变量初始化
fUart0Received=0;
fUart0Receiving=0;
pUart0Rx=0;
/***********************************************************************
*
* 函数名:Uart0Rx()
* 说 明:UART0接收中断服务函数
* 入口值:无
* 返回值:存入aUart0RxBuf[72]数组中
* 日 期:02-6-21 15:56
*
***********************************************************************/
interrupt [UART0RX_VECTOR] void Uart0Rx(void)
{
byte bU0rxbufTemp;
switch(pUart0Rx){ // 注意:URXIFG0由硬件清零
case 0:
if(U0RXBUF<=0x7F){
aUart0RxBuf[0]=U0RXBUF;
pUart0Rx++;
fUart0Receiving=1;
}
break;
case 1:
bU0rxbufTemp=~U0RXBUF;
if(aUart0RxBuf[0]==bU0rxbufTemp){
pUart0Rx++;
}
else{
if(U0RXBUF<=0x7F)
aUart0RxBuf[0]=U0RXBUF;
else
pUart0Rx=0;
}
break;
case 2: //可以去掉,但为了便于分析,暂且保留
aUart0RxBuf[1]=U0RXBUF;
if(aUart0RxBuf[1]==0){ // 其后数据长度
pUart0Rx=0;
fUart0Received=1;
fUart0Receiving=0;
}
else
pUart0Rx++;
break;
default:
aUart0RxBuf[pUart0Rx-1]=U0RXBUF;
if(pUart0Rx==(aUart0RxBuf[1]+2)){
pUart0Rx=0;
fUart0Received=1;
fUart0Receiving=0;
}
else
pUart0Rx++;
break;
} // End switch(pUart0Rx)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -