2020-12-11

今天对51单片机串口通信写了具体的代码:

首先是发送数据,每秒输出一个递增的整数,代码如下:

#include <REGX52.H>
#include "delay.h"
unsigned int sec;
void UART_Init()		//4800bps@12.000MHz
{
	PCON |= 0x80;		//使能波特率倍速位SMOD
	SCON = 0x40;		//8位数据,可变波特率
	TMOD &= 0x0F;		//清除定时器1模式位
	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
	TL1 = 0xF3;		//设定定时初值
	TH1 = 0xF3;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
}

void UART_SEND(unsigned char byte)
{
	SBUF=byte;
	while(TI==0);
	TI=0;
}

void main()
{
	UART_Init();
	while(1)
	{
	UART_SEND(sec);
	sec++;
	delay(1000);
	}
}

其中串口初始化函数使用了stc-isp软件直接生成,经测试可以正常运行

之后是向单片机发送数据,代码如下:

#include <REGX52.H>
void UART_Init()		//4800bps@12.000MHz
{
	PCON |= 0x80;		
	SCON = 0x50;		
	TMOD &= 0x0F;	
	TMOD |= 0x20;		
	TL1 = 0xF3;		
	TH1 = 0xF3;		
	ET1 = 0;		
	TR1 = 1;	
	EA=1;
	ES=1;	
}



void main()
{
	UART_Init();
	while(1)
	{
	}
}
void UART_routine() interrupt 4
{
	if(RI==1)
	{
		P2=SBUF;
		RI=0;
	}
}

这里代码遇上个代码区别在于SCON中REN置为1,意为打开串行接收,打开串口中断,之后又增加了一个中断函数对接收数据做出相关控制。

我这里写的是电脑发送数据控制单片机LED模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值