📄 uart.c
字号:
//UART.C
#include <C8051F020.H>
#include "API/API.H"
#define SYSCLK 22118400
//----------------------------------------------//
// 串 口 初 始 化 宏 定 义 //
//----------------------------------------------//
//sbit SMOD0 = PCON ^ 7;
sfr16 RCAP2 = 0xCA;
//--- UART1 使用Timer2作为波特率发生器 ---/
#define UART0_Enable() {ES0=1;}
#define UART0_Timer2_8n1(x) {SCON0=0x50;T2CON=0x34;RCAP2=-(SYSCLK/x/32);}
sfr16 RCAP4 = 0xE4;
#define IsTI1 (SCON1&0x02)
#define IsRI1 (SCON1&0x01)
#define ClrTI1() SCON1&=~0x02;
#define ClrRI1() SCON1&=~0x01;
//--- UART1 使用Timer4作为波特率发生器 ---/
#define UART1_Enable() {EIE2|=0x40;}
#define UART1_Timer4_8n1(x) {SCON1=0x50;T4CON=0x34;RCAP4=-(SYSCLK/x/32);}
//---------------------------------------//
// 串 口 初 始 化 //
//---------------------------------------//
void UART_Init(unsigned char com)
{
if(com)
{ // UART1
UART1_Timer4_8n1(9600);
UART1_Enable();
//TI0 = 0;
//RI0 = 0;
}
else
{ // UART0
UART0_Timer2_8n1(9600);
UART0_Enable();
}
}
//-----------------//
// 通 讯 接 口 //
//-----------------//
void UART0_IRQ(void) interrupt 4
{
bit EA_SAVE;
EA_SAVE = EA;
EA = 0;
if(TI0)
{
//SBUF0 = 0xF5;
TI0 = 0;
}
if(RI0)
{
RI0 = 0;
}
EA = EA_SAVE;
}
//--------------------//
// 条 码 枪 接 口 //
//--------------------//
unsigned char UART1_State=0;
xdata unsigned char UART1_BUF[10];
void UART1_IRQ(void) interrupt 20
{
unsigned char tmp;
bit EA_SAVE;
EA_SAVE = EA;
EA = 0;
if(IsTI1)
{
//SBUF1 = 0xF5;
ClrTI1();
}
if(IsRI1)
{
tmp = SBUF1;
if(UART1_State != 2) // 有数据包没有处理时,不接收新数据包
{
if(tmp==0x02)
{ // 数据包接收开始
UART1_BUF[0]=1;
UART1_State=1;
}
else
{
if(tmp == 0x03)
{ // 数据包接收完成
UART1_State = 2;
SBUF1 = 'F'; // 发送应答,关闭扫描
}
else
{
switch(UART1_State)
{
case 0:
break;
case 1:
UART1_BUF[UART1_BUF[0]] = tmp;
UART1_BUF[0]++;
break;
case 2: // 数据接收完成,等待处理
break;
}
}
}
}
ClrRI1();
}
EA = EA_SAVE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -