📄 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 + -