📄 tongxinyuandaima.txt
字号:
PC机与单片机通信源代码
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint time)//ms延时函数
{
uint i,j;
for (i=0;i<time;i++)
for (j=0;j<125;j++);
}
//--------------------------------------------------
//串口初始化
//--------------------------------------------------
void uart_rest()
{
TMOD = 0X20; //定时器T1使用工作方式2
TH1 = 0xf9; //波特率9600
TL1 = 0xf9;
TR1 = 1; //开始计时
PCON = 0x80; //SMOD = 1
SCON = 0X50; //工作方式1,允许接收
EA = 0; //关闭全部中断
}
//--------------------------------------------------
//发送数据,参数dat为发送的数据
//--------------------------------------------------
void put_date(uchar dat)
{
SBUF = dat; //
while(!TI); //等待数据发送完成
TI = 0; //清发送标志位
}
//---------------------------------------------------
//发送字符串,参数str为待发送字符串
//---------------------------------------------------
void put_string(uchar *str)
{
while(*str != '\0') //发送到字符串尾结束
{
put_date(*str);
str++; //发送下一数据
}
}
//----------------------------------------------------
//接收数据,返回值dat是接收到的数据
//----------------------------------------------------
uint get_date()
{
uint dat;
while(!RI); //等待数据接收
dat = SBUF; //保存接收到的数据
RI = 0; //清接收标志位
return dat;
}
/*****************************************************
* 接收字符串,参数str指向保存接收字符串的缓冲区
*
* 注意:在本函数中,用串口发送字符串时,在发送结束时
* 应该加上一个结束字符,在本函数中用!做为结束符
* 而在调用函数时则不需要加上!
*****************************************************/
void get_string(uchar *str)
{
uint count = 0;
do
{
*str = 0; //清缓冲区
*str = get_date(); //保存接收到的数据
str++; //准备接收下一数据
count++;
if(count >16) //如果超出了范围(count)为0
{
*(str-1) = 0;
break;
}
}while(*(str-1) != '!'); //接收到数据尾以!则停止
*(str-1) = 0;
}
//----------------------------------------------------------------------------------------------------
//---------------主函数-------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------
main()
{
char buf[16] ;
delay(100);
uart_rest(); //串口初始化
put_string("reday dx?");
delay(20); //PC发送一个字符串
while(1)
{
get_string(buf);
if(strcmp(buf,"123") == 0) //strcmp函数,buf和后值相等,返回0
put_string("OK ");
else
put_string("wrong");
}
}/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -