51单片机电脑通过串口控制LED灯

Hex模式:底层传输的实际数据

文本模式:把数据进行编码,显示ASCII码char字符,带括号的是控制字符,无法显示出来

代码

UART.c

#include <REGX52.H>

/** 
  * @brief  串口初始化
  * @param  无
  * @retval 无
  */
void UART_Init()//UART串口用的T1定时器,模式是8位自动重装载,//4800bps@12.000MHz
{
			SCON=0x50;     //REN置1,允许单片机接收
			PCON|= 0x80;   //使能波特率倍速位SMOD
			TMOD &= 0x0F;		//清除定时器1模式位
			TMOD |= 0x20;		//设定定时器1为8位自动重装方式
			TL1 = 0xF3;		//设定定时初值
			TH1 = 0xF3;		//设定定时器重装值
			ET1 = 0;		//禁止定时器1中断
			TR1 = 1;		//启动定时器1
			EA=1;       //开启使能中断
			ES=1;
}

/** 
  * @brief  串口发送一个字节数据
  * @param  Byte 要发送的一个字节数据
  * @retval   无
  */
void UART_SendByte(unsigned char Byte)
{
			SBUF=Byte;
			while(TI==0);//这里是在等数据发送完,当数据发送完TI由硬件置1就会跳出循环
			TI=0;        //此时再由软件置0
}

/*串口中断函数模板,一般放在main.c中
void UART_Routine() interrupt 4   //名字随便起,但中断函数号跟在哪个函数后边就是中断服务函数
{
		if(RI==1)
		{
			P2=~SBUF;
			UART_SendByte(SBUF);
			RI=0;
		}
}
*/

main.c

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"



void main()
{

	UART_Init();
//	UART_SendByte('B');//实际等于UART_SendByte(0x42)
	while(1)
	{

	}
}

void UART_Routine() interrupt 4   //名字随便起,但中断函数号跟在哪个函数后边就是中断服务函数
{
		if(RI==1)//接收完成中断标志位RI
		{
			P2=~SBUF;
			UART_SendByte(SBUF);
			RI=0;
		}
}

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值