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型,所以串口助手要为文本模式

posted @ 2023-12-07 20:59  Flying3080  Views(30)  Comments(0Edit  收藏  举报  来源