STC单片机从io口模拟uart读入数据保存在数据缓存中,如何然后从串口发出去。
#include<reg51.h>
#defineuchar unsigned char
#defineuint unsigned int
sbitREST = P2^2;
sbitIO = P2^0;
ucharbuf[25];//数据缓存区
ucharSendBuf_1[23]={0x80,0x08,0x00,0x00,0x12,0x01,0x01,0x02,
0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x11,
0x22,0x33,0x44,0x55,0x66,0x77,0x88};
ucharSendBuf_2[5]={0x00,0xc0,0x00,0x00,0x08};
/*****************用于微调发送接收的时间**************/
void Delay()
{
uchari;
for(i=0;i<3;i++);
}
/*********************发送接收一位的时间 etu=3.579/372 = 104us*************
***************因发送接收其它指令也要占用时间这里的DelayEtu = 90us********/
void Delay_100us()
{
uchar i;
for(i=0;i<28;i++);
}
/*****************上电发送复位请求******************/
void Rest()
{
Delay() ;
IO = 1; //必须为高等待接收LKT加密芯片发送的起始位
REST = 0;
Delay_100us();
REST = 1;
}
/****************读取LTK4101的返回信息并将其存入数据缓存区****************/
void ReceArt(char m)
{
uchar i,n;
for(n=0;n<m;n++)
{
while(IO);
for(i=0;i<8;i++) //读一个字节函数
{
Delay_100us();
buf[n] >>= 1;
if(1 == IO)
buf[n] |= 0x80;
}
Delay_100us();
ACC = buf[n];
if(IO == P) //判断偶校验位
{
Delay_100us();
Delay_100us();
}
}
}
/****************发送随机数命令信息***************/
void SendChar(uchar m,uchar Send[])
{
uchar i,n,flag,SendChar;
for(n = 0 ;n<m ; n++)
{
ACC = Send[n] ;
flag = P;
SendChar = Send[n]; //将发送的字节放在SendChar
IO = 0;
for(i=0;i<8;i++) //发送一个字节
{
Delay_100us();
if(SendChar & 0x01)
IO = 1;
else
IO = 0;
SendChar >>=1;
}
Delay_100us();
IO = flag; //发送保存的奇偶位
Delay_100us();
IO = 1; //发送停止位
Delay_100us();
Delay_100us();
}
}
void main()
{
uchar temp;
temp = SendBuf_1[1]; //保存所发送第二字节
Rest();
ReceArt(17); //必须接收完或延时足够长(大于LKT加密芯片向MCU传送返回信息的时间)才能向LKT加密芯片发送数据
Delay_100us();
SendChar(5,SendBuf_1);//根据T=0协议先向LKT加密芯片发送前5字节,LKT加密芯片应返回第二字节
ReceArt(1);
if(buf[0] == temp)//判断是否返回第二字节,返回正确发送剩下的字节
{
SendChar(18,&SendBuf_1[5]);
ReceArt(2);
}
if(buf[0]==0x61 && buf[1] ==0x08 ); //判断应答位是否正确
SendChar(5,SendBuf_2) ; //应答正确发送读取数据信息
ReceArt(10);
while(1);
}
STC单片机从io口模拟uart读入经过处理的数据保存在数据缓存中,如何然后从串口发出去。???????我把main函数中改成:
main()
{
.......
ReceArt(10);
while(1)
{
i=0;
while(i<=9)
{
SBUF=buf[i];
i=i+1;
while(!TI);
TI=0;
}
}
}
串口没输出。急求解???????????
[解决办法]
首先判断是否接收到字符串;
其次判断串口能否正确输出指定的字符串。
[解决办法]