?? scom.c
字號:
#include <common.h>
#include <scom.h>
#ifdef T1AsBaudGN
void InitUART_T1(void)
{
TB8 = 0; //8-bit UART, Model1
SM2 = 0; //MCU set RI, no matter RB8=0 or RB8=1
PCON |= 0x80; //SMOD==PCON.7, double UART0 BaudRate
SCON |= 0x50; //8-bit UART, Model1(SM0=0,SM1=1,SM2=0),enable UART receive
TMOD |= 0x20; //T/C1 Mode 2:8-bit with auto-reload from TH1
TH1 = T1BAUD; //UART's BaudRate is 9600bps
TR1 = 1; //start Timer1
RI = 0;
TI = 0;
ES = 1; //eable UART interrupt
}
#endif
#ifdef T2AsBaudGN
void InitUART_T2(void)
{
uint temp;
RCLK = 1; //RCLK==T2CON.5, designate T2 as UART Receive baudrate generator
TCLK = 1; //RCLK==T2CON.4, designate T2 as UART Transmit baudrate generator
TB8 = 0; //8-bit UART, Model1
SM2 = 0; //MCU set RI, no matter RB8=0 or RB8=1
//SM2 = 1; //9-bit UART, exist RB8/TB8,1bit StartBit and 1bit EndBit, RB8==0 or RB8==1
PCON |= 0x80; //SMOD==PCON.7, double UART BaudRate
SCON |= 0x50; //8-bit UART0, Model1(SM0=0,SM1=1,SM2=0), enable UART receive
temp = T2BAUD; //UART's BaudRate is 9600bps, T2BAUD = - XTAL /(32L * BAUDRATE2)
RCAP2H = temp/256;
RCAP2L = temp%256;
TR2 = 1;
RI = 0;
TI = 0;
ES = 1; //eable UART interrupt
}
#endif
//---------------------------------------------------------
//功能:從上位機接收"選擇通道"命令并傳遞給相應的變量
//形參:無
//---------------------------------------------------------
void INT_UART_REC(void) interrupt 4 using 3
{
//uchar RecBuf[3]; //Frame: Head(0xaa) ISPChannel_num checksum
uchar CheckSum=0;
uchar i = 0;
uint j = 0;
ES = 0;
if( _testbit_(TI) ) {goto GOBACK;} //意外情況引起的"發送中斷",清TI,退出
//{ ES = 1; return; }
if( _testbit_(RI) )
{
RecBuf[0] = SBUF;
}
if(RecBuf[0]==0xaa)
{
while( i<2 && j<500 ) //to receive expected bytes within 5ms
{
if( _testbit_(RI) )
{
RecBuf[i+1] = SBUF;
i++;
}
j++;
}
if(i == 2) //have received expected bytes within 5ms
{
CheckSum += RecBuf[0];
CheckSum += RecBuf[1];
CheckSum += RecBuf[2];
if(CheckSum == 0) //check correct
{
COMFlag=SUCCESS;
if(RecBuf[1]==1)
{
LED = 0;
}
if(RecBuf[1]==2)
{
LED = 1;
}
}
}
}
GOBACK:
ES = 1;
}
//---------------------------------------------------------
//功能:通過UART0發送一個字節數據
//形參:DataSend待發送數據
//----------------------------------------------------------
//#pragma rb(2)
void SendUART(uchar DataToSend)
{
ES = 0;
TI = 0;
SBUF = DataToSend;
while( TI==0 ) ;
TI = 0;
ES = 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -