#include "..\comm\STC32G.h"
#include "stdio.h"
#include "intrins.h"
#include "string.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 22118400L //定义主时钟(精确计算115200波特率)
#define Timer0_Reload (MAIN_Fosc / 1000) //Timer 0 中断频率, 1000次/秒
//==========================================================================
#define Baudrate1 (65536 - MAIN_Fosc / 115200 / 4)
#define Baudrate2 (65536 - MAIN_Fosc / 115200 / 4)
#define UART1_BUF_LENGTH 256
#define UART2_BUF_LENGTH 256
/************* 本地变量声明 **************/
u16 TX1_Cnt; //发送计数
u16 RX1_Cnt; //接收计数
u16 TX2_Cnt; //发送计数
u16 RX2_Cnt; //接收计数
bit B_TX1_Busy; //发送忙标志
bit B_TX2_Busy; //发送忙标志
u8 RX1_Buffer[UART1_BUF_LENGTH]; //接收缓冲
u8 RX2_Buffer[UART2_BUF_LENGTH]; //接收缓冲
//短息处理变量
u8 Message_info[256];
//Messgae_Flag = 0;
u16 Cnt_len = 0;
u16 Cnt_head = 0;
bit M_Flag = 0;
bit Uart_S = 0;
void main(void)
{
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
P0M1 = 0x00; P0M0 = 0x00; //设置为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置为准双向口
P2M1 = 0x00; P2M0 = 0x00; //设置为准双向口
P3M1 = 0x00; P3M0 = 0x00; //设置为准双向口
P4M1 = 0x00; P4M0 = 0x00; //设置为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置为准双向口
P6M1 = 0x00; P6M0 = 0x00; //设置为准双向口
P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
UART1_config(1); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 使用Timer1做波特率.
UART2_config(2); // 选择波特率, 2: 使用Timer2做波特率, 其它值: 无效.
while(1)
{
u16 i;
if( Uart_S)
{
for(i=0;i<=Cnt_len;i++)
{UART1_TxByte(RX1_Buffer[Cnt_head+i]);}
Uart_S =0;
RX1_Cnt =0;
Cnt_head =0;
}
}
}
void UART1_int (void) interrupt 4
{
if(TI)
{
TI = 0;
B_TX1_Busy = 0;
}
if(RI) // 中断产生
{
RI=0 ; //清楚中断标志
RX1_Buffer[RX1_Cnt] = SBUF;
RX1_Cnt++;
if((RX1_Buffer[RX1_Cnt-1]==0x2B)&&(RX1_Buffer[RX1_Cnt]==0x43))//头
{ Cnt_head = RX1_Cnt-1;}
if((RX1_Buffer[Cnt_head]==0x2B)&&(RX1_Buffer[RX1_Cnt-1]==0x0A)) //检测到头的情况下检测尾巴
{
Cnt_len = RX1_Cnt-1 - Cnt_head;
Uart_S = 1;
}
}
//数据溢出的情况
if(RX1_Cnt >= UART1_BUF_LENGTH)
{RX1_Cnt = 0;}
}
|