📄 009.c
字号:
////////////////////////////////
////cocoguojia E-51开发板///////
//////cocoguojia@163.com ///////
////////////////////////////////
//实验目的:利用串口助手联调,当串口助手发送0x55时,单片机向串口助手发送0xAA
//波特率为9600 单片机用11.0592的晶振
//---------------------------------------
//头文件
#include<AT89X51.H>
#include<intrins.h>
//---------------------------------------
//---------------------------------------
//数据类型替代声明
#define u8 unsigned char
#define u16 unsigned int
sbit LED0=P0^0;
sbit LED1=P0^1;
sbit LED2=P0^2;
sbit LED3=P0^3;
sbit LED4=P0^4;
sbit LED5=P0^5;
sbit LED6=P0^6;
sbit LED7=P0^7;
u8 buf[10] = 0;
u8 cnt = 0;
u8 cnt1 = 0;
u16 cnt2 = 0;
//---------------------------------------
//---------------------------------------
//初始化
void init(void)
{
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TMOD=0X20;
TR1=1;
}
//---------------------------------------
//---------------------------------------
//接受子函数
u8 rec_data(void)
{
if(RI==0)
{
return 0;
}
else
{
cnt1 = 0;
cnt2 = 0;
RI=0;
buf[cnt] = SBUF;
if(cnt ==0)
{
if(buf[cnt] != 0x01) //ID不对 报文格式 01 ** ## -- -- -- -- -- 其中01为地址,**为命令字 ##为数据长度(--的个数)
{
return 0;
}
}
cnt ++;
if(cnt == buf[2] + 3)
{
return 1;
}
return 0;
}
}
//---------------------------------------
//---------------------------------------
//发送子函数
void send_data(u8 i)
{
SBUF=i;
while(TI==0)
{
;
}
TI=0;
}
//---------------------------------------
//---------------------------------------
//主函数
void main(void)
{
u8 i = 0;
cnt = 0;
init();
while(1)
{
if(rec_data())
{
; //接收数据处理
for(i = 0;i< cnt;i++)
{
send_data(buf[i]);
}
buf[0] = 0;
cnt=0;
cnt = 0;
}
cnt1 ++;
if(cnt1 == 0xff)
{
cnt2 ++;
if(cnt2 == 10000)
{
cnt2 = 0;
buf[0] = 0;
cnt = 0;
}
}
}
}
//---------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -