📄 serial.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define LEN 4
uchar idata Readata[4];
uchar i;
//uchar idata Wridata[4];
bit read_flag;
//void Back(uchar tem);
//uchar Receive();
void Send();
//void delay(uchar count);
void Initserial();// 串口初始化程序
void main()
{
uchar i;
for(i=0;i<10;i++);
Initserial();// 串口初始化程序
while(1)
{ if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
{read_flag=0; //取数标志清0
Send();
}
}
}
void Initserial() // 串口初始化程序
{
TMOD=0X20;//定时器T1定义为模式2
TL1=0XFD;//置初值波特率为9600b/s
TH1=0XFD;
PCON=0X00;//SMOD=0
TR1=1;
SCON=0X50;//设置串行口控制字,方式1,允许接收
IE|= 0x90; //开中断
}
void Send()
{ uchar j;
for(j=0;j<LEN;j++)
{SBUF=Readata[j];
while(TI!=1);TI=0;//等待发送完
}
}
void serial () interrupt 4 using 3 ////串口接收中断函数
{ if(RI)
{ uchar ch;
RI =0;
ch=SBUF;
Readata[i]=ch;
i++;
if(i==LEN)
{read_flag=1;
i=0;
}
}
}
/*返回函数的功能是:CAN0节点向PC机回送标志,从而PC机在确认后能够发送数据*/
/*void Back(uchar tem)
{
SBUF=tem;
while(TI!=1);//等待发送完
TI=0;
}
uchar Receive()
{
uchar addr,i,flag;
uchar D1,D2,D3,D4,FF;
flag=0;
while(1)
{
while(RI!=1);RI=0;//等待PC机的联络信号
addr=SBUF;
if(flag==0)
{ switch(addr)//向PC机回送节点号
{
case 0xD1:Back(D1),flag=1;break;
case 0xD2:Back(D2),flag=1;break;
case 0xD3:Back(D3),flag=1;break;
case 0xD4:Back(D4),flag=1;break;
default:Back(FF),flag=0;break;
} //完成对PC机的地址回送,以确认单片机收到的是正确信息
}
else { while(RI!=1);
RI=0;
while(1)
{
for(i=0;i<=2;i++)//单片机接收数据
{ while(RI!=0);RI=0;
Readata[i]=SBUF;
}
}
}
}
return (0);
}*/
/*void delay(uchar count)//延时count*2ms
{
uchar i,j;
for(i=0;i<count;i++)
for(j=0;j<250;j++)
{;}
}//一个for语句延时8us
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -