C51串口代码

发送的是整数,然后用sprintf函数将整数变为字符串,发送完整数后,再发送一个H结束符。以后有需要,可以用其他校验。这就是简单的串口通信,没有考虑到更加复杂的校验方法。
#include<reg51.h>
#include<intrins.h>
#include <stdio.h>
//char code str1[]={“HelloWorld”};
void send_str();
void delayms(long int ms);
void send_char(unsigned char txd);
void float2char(float slope,char*buffer,int n) ;
sbit k1=P2^0;
sbit k2=P2^1;
char buffer0[10];
unsigned char buffer[9];
void Long_Str(unsigned long dat,char *str);
void main()
{
int dat0=123;
int bb=2;
//float2char(123.4567,buffer,10);
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
SCON=0x50;
PCON &=0xef;

TR1=1;
IE=0x0;

// k2=1;
// Long_Str(dat0,&buffer);
sprintf(buffer,"%d",dat0);
delayms(100);
while(1)
{
//while(k11);
if(k1
0) //Èç¹ûÓа´¼ü°´ÏÂ
{delayms(150);//È¥¶¶¶¯
if(k1==0)
//send_str();// ·¢ÍêÊý¾Ý
while(1) //²»Í£·¢ËÍ
{send_str(); //·¢ËÍ
dat0+=bb; //·¢ËÍÍê±Ï£¬½«Êý¾Ý±ä»¯
delayms(100); //ÑÓʱ1s
if(dat0>=190)dat0=56;
sprintf(buffer,"%d",dat0);
bb+=1;
//Long_Str(dat0,&buffer);
}
}

}	

}

void send_str()
{
unsigned char i=0;
//tt=sizeof(buffer);
while(buffer[i]!=’\0’)
//while(i<tt)
//for(i=0;i<10;i++)
// SBUF=‘0’+buffer[i];
{
SBUF=buffer[i];
while(!TI);
TI=0;
i++;
}
// if(i==5)i=0;
SBUF=‘h’;//ÔÙ·¢½áÊø·ûh,Õâ¸öÊÇ×Ô¶¨ÒåµÄ£¬¹¤ÒµÓ¦ÓÃÖУ¬¿ÉÒÔÓÃÆäËûЭÒé×öУÑéÊý¾Ý
while(!TI);
TI=0;

}
void float2char(float slope,charbuffer,int n) //???,???,???
{
int temp,i,j;
if(slope>=0)//???0
buffer[0] = ‘+’;
else
{
buffer[0] = ‘-’;
slope = -slope;
}
temp = (int)slope;//???
for(i=0;temp!=0;i++)//???
temp /=10;
temp =(int)slope;
for(j=i;j>0;j–)//???
{
buffer[j] = temp%10+‘0’;
temp /=10;
}
buffer[i+1] = ‘.’;
slope -=(int)slope;
for(i=i+2;i<n-1;i++)//???
{
slope
=10;
buffer[i]=(int)slope+‘0’;
slope-=(int)slope;
}
buffer[n-1] = ‘\0’;
}
void delayms(long int ms)
{
unsigned char i;
while(ms–)
for(i=0;i<120;i++);
}

void Long_Str(unsigned long dat,char *str)
{
unsigned char temp[11]; // ???4294967295,?ASCII???10??
unsigned char i=0,j=0;
while(dat) // ???ASCII?,???
{
temp[i]=dat%10+0x30;
i++;
dat/=10;
}
j=i;
for(i=0;i<j;i++) // ???,???
{
str[i]=temp[j-i-1]; // C???0??
}
if(!i)
{
str[i++]=‘0’;
} // ???dat=0??
str[i]=0; // ???KEIL???,???
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值