?? rxdtxd.h
字號:
volatile unsigned char bm[10]; //定義接收的數據幀的存放地址
volatile unsigned char recestate=0; // 0--接收空閑;1--正在接收;3--總超時; 4--頭超時;5--間隔超時;6--接收完成(字節超時)
volatile unsigned char recest_time=0; //接收時間,1次為0.5個字節,對于9600波特率的。
volatile unsigned char recestlen=0; //幀的長度
//********************定時器。0.3個字節定時
SIGNAL (SIG_OVERFLOW0) //64分頻,4計數
{
recest_time++;
//if(recest_time<127)
//PORTD|=(1<<PD3);
//if(recest_time>124)
//PORTD&=~(1<<PD3);
if(recest_time>250)
recest_time=0;
}
//~~~~~~~~~~~~~~~~~設置串口的參數~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void USART_Init( unsigned int baud )
{
/* 設置波特率9600*/
UBRRH = 0;
UBRRL = 47;
/* 接收器與發送器使能*/
UCSRB = (1<<TXCIE)|(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* 設置幀格式: 8 個數據位, 2 個停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2); //485輸出使能
/* 等待發送緩沖器為空 */
while ( !( UCSRA & (1<<UDRE)) )
;
/* 將數據放入緩沖器,發送數據 */
UDR = data;
}
unsigned char USART_Receive( void )
{
/* 等待接收數據*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 從緩沖器中獲取并返回數據*/
return UDR;
}
SIGNAL (SIG_UART_RECV) //接收中斷
{
if(recestlen<6) //設定接收數據的長度
{
bm[recestlen]=UDR; //接收數據
recestlen++;
if(recestlen>=6)
{
recestlen=0;
UCSRB &= ~( (1<<RXCIE) | (1<<RXEN) ); //關閉接收使能
}
}
}
//****************************************************************************
SIGNAL (SIG_UART_TRANS) //發送結束中斷
{PORTD&=~(1<<PD2); } //485輸入使能
//****************************************************************************
//*p要發送的數據
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -