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