程序如下:串口1接收发送都可以使用,串口2发送测试也是可以用的,现在问题就是卡在接收上,接收有问题
麻烦论坛大神帮忙看看串口2接收哪里有问题,万分感谢!!!
/***********************************************************************
时间:2020.04.04
芯片:STC12C5A60S2
晶振:11.0592MHz波特率:115200bps
引脚定义:串行口1:发送————TxD/P3.1;接收————RxD/P3.0
串行口2:发送————TxD2/P1.3;接收————RxD2/P1.2
功能描述:STC12双串口通信(中断方式)
当串行口1接收数据后,将此数据由串行口2发送出去
当串行口2接收数据后,将此数据由串行口1发送出去
***********************************************************************/
#include
#include"intrins.h"
#include"string.h"
#include"stdio.h"
#defineS2RI0x01//串口2接收中断请求标志位
#defineS2TI0x02//串口2发送中断请求标志位
#defineucharunsignedchar
#defineuintunsignedint
#defineS2RI0x01
#defineS2TI0x02
#defineCode_head10xAA
#defineCode_head20x55
#definelen25
bitbusy2;//此位用于串口判断是否发送繁忙
charxdataUart2_buff[40];//缓冲数据
charxdataUart1_buff[40];
ucharcount2=0;//串口计数器
ucharcount1=0;//串口计数器
charxdataecho[40];
unsignedcharflag1,flag2,temp1,temp2;
voidClear_Buff();//清除串口1,2中数组的值,为下一次做准备
voidread_code2(uchar_char);//保存串口接收到的字符
voidUart_1_SendString(char*P);//串口1发送字符串函数
floatTDM_Receive_Check();
voidset_brrate();
voidserial_put_uint(unsignedintnumber);
voiddispplay(int_data);
voidread_ac();
voidread_once();
voiddelay_ms(uintms);
/****************串行口初始化函数****************/
voidInitUART(void)
{
PCON&=0x7F;//波特率不倍速
SCON=0x50;//8位数据,可变波特率
AUXR|=0x40;//定时器1时钟为Fosc,即1T
AUXR&=0xFE;//串口1选择定时器1为波特率发生器
TMOD&=0x0F;//清除定时器1模式位
TMOD|=0x20;//设定定时器1为8位自动重装方式
TL1=0xFD;//设定定时初值
TH1=0xFD;//设定定时器重装值
ET1=0;//禁止定时器1中断
TR1=1;//启动定时器1
/****************************115200******************************/
AUXR&=0xF7;//波特率不倍速
S2CON=0x50;//8位数据,可变波特率
AUXR|=0x04;//独立波特率发生器时钟为Fosc,即1T
BRT=0xFD;//设定独立波特率发生器重装值
AUXR|=0x10;//启动独立波特率发生器
IE2=0x01;//允许串口2中断。
EA=1;//总中断一定要开,不然能发送,不能接收
}
/****************串行口1发送****************/
voidUART_1SendOneByte(unsignedcharc)
{
SBUF=c;
while(!TI);//若TI=0,在此等待
TI=0;
}
/****************串行口2发送****************/
voidUART_2SendOneByte(unsignedcharc)
{
S2BUF=c;
while(!(S2CON&S2TI));//若S2TI=0,在此等待
S2CON&=~S2TI;//S2TI=0
}
/*****************主函数******************/
voidmain(void)
{
InitUART();//串行口初始化
Uart_1_SendString("*****************************\r\n");
Uart_1_SendString("************00000***********\r\n");
while(1)
{
inti;
//如果串口1接收到数据,将此数据由串口2发送
if(flag1==1)
{
flag1=0;
for(i=0;i -->
|