51单片机008:以9600bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。

题目:以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送至计算机,当序号超过255时归零。

代码:

/*以2400bps从计算机发送任一字节数据,当单片机收到该数据后,在此数据前加上一序号然后连同此数据一起发送
至计算机,当序号超过255时归零。
*/
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
 
uchar uart_dat[3];
uchar flag,num,i;
 
void uart_init(unsigned char baud)
{
	TMOD|=0X20;	//设置计数器工作方式2 0010 0000  自动重装
	SCON=0X50;	//设置为工作方式1 0101 0000 允许串行接收 SM0=0
	PCON=0X80;	//波特率加倍
	TH1=baud;	  //计数器初始值设置
	TL1=baud;
	ES=1;		    //打开接收中断
	EA=1;		    //打开总中断
	TR1=1;		  //打开计数器		
}


void send_char(uchar c) {  //发送单个字符
    SBUF = c;
    while (!TI);
    TI = 0;
}

void send_decimal(uchar num, uchar content) {   //将num调成十进制格式
    uchar bais = num / 100;
		uchar tens = (num / 10)%10;
    uchar ones = num % 10;
		
		send_char('0' + bais);
    send_char('0' + tens); 
    send_char('0' + ones); 
    
		send_char(':');        
    send_char(content);    
    
		send_char('\r');  
		send_char('\n');       
}

void uart() interrupt 4
{
	if(RI==1)
	{
		RI=0;
		num++;
		if(num==20)
			num=0;
		uart_dat[0]=num;
		uart_dat[1]=SBUF;
		flag=1;
	}
}



void main()
{
	uart_init(0XFA);
	
	while(1)
	{
		if(flag==1)
		{
			flag=0;
			send_decimal(num, uart_dat[1]); // Send num and content
		}
	}
}
 



由于设置序号num为unsigned char型,所以串口助手要为文本模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Flying778

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值