?? commcfg.c
字號:
#include "config.h"
#include "reg924.h"
#define P89LPCxx
unsigned char delay;
// buffer define
//串口接收循環緩沖
u8_t idata recvbuf[SBUFSIZE];
u8_t recvtail;
u8_t recvstart;
//串口發送循環緩沖
u8_t idata sendbuf[SBUFSIZE];
u8_t sendtail;
u8_t sendstart;
// 串口狀態
bit bSending;
//=================================================
//串口初始化函數
//=================================================
void SerialInit()
{
u8_t i;
#ifdef P89LPCxx
u16_t tmp;
BRGCON = 0; // disable band generate
PCON = PCON & 0xdf; // SMOD0 = 0; enable SM0 SM1
SCON = 0x00; // clear SCON
SCON = (SCON & 0x3F) | 0x40; // at mode1
tmp = (OSC_FREQ / COM_BAND) - 16;
BRGR0 = tmp;
BRGR1 = tmp >> 8;
//BRGR0 = 0xf0; BRGR1 = 0x02; // 9600
BRGCON = 0x03; // use BRG for comm bank generation
SSTAT = 0x00; // FE/BR/OE enable, DBUF
REN = 1;
#else //51xx
u8_t i;
TMOD = 0x21 ; //the timer/counter mode
IEN0 = 0x92 ; // enable to interrupt
TL1 = TH1 = 0xfd ; // 9600bPS;
TR1 = 1 ;
SCON = 0x70 ;
#endif //P89LPCxx
ES = 1 ;
for(i = 0; i < SBUFSIZE; i ++)
{
recvbuf[i] = 0;
sendbuf[i] = 0;
}
recvstart = recvtail = 0;
sendstart = sendtail = 0;
// initial RS485 at receive MODE
#ifdef COM_MODE_RS485
RS485_SW = ~RS485_RL;
#endif //COM_MODE_RS485
}
//=================================================
//串口中斷處理函數
//=================================================
void serial ( ) interrupt 4 using 1
{
if ( RI )
{
RS485_SW = RS485_RL;
RI = 0 ;
if((recvtail != (1+recvstart)) && (recvtail != (recvstart+1-SBUFSIZE)))
{
recvbuf[recvstart] = SBUF ;
recvstart ++;
if(recvstart == SBUFSIZE) recvstart = 0;
}
}
else
{
if ( TI )
{
#ifdef COM_MODE_RS485
RS485_SW = ~RS485_RL;
#endif
TI = 0;
if(sendtail != sendstart)
{
SBUF = sendbuf[sendtail];
sendtail ++;
if(sendtail == SBUFSIZE)
{
sendtail = 0;
}
}
#ifdef COM_MODE_RS485
else // send over
{
RS485_SW = RS485_RL;
bSending = 0;
}
#endif
}
}
}
//=================================================
//串口中斷處理函數
//=================================================
void SerialStart()
{
if(~bSending)
{
bSending = 1;
TI = 1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -