基于51单片机的串口通信

串口通信(中断)控制P0口LED灯

使用芯片AT89S52
函数功能:串口通信MAX232的中断方式使用,通过串口发送数据控制单片机的P0口的LED灯。
博主才疏学浅,可能会出现设计不足和错误,欢迎大家评论区交流。^ _ ^

/*******************************************************************
此函数功能为:串口通信MAX232的中断方式使用,通过串口发送数据控制单
片机的P0口的LED灯。
作者:Crazy Wind     
日期:2020.10.16
version:1.0.0
********************************************************************/
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
/*****************************************************
函数功能:发送数据x
******************************************************/
void send_char(uchar x)
{
	SBUF=x;	  //SBUF是数据缓冲寄存器(暂存数据),把数据x输入到SBUF
	while(!TI);	//等待数据发送
	TI=0;	   //每发送8位数据TI就自动置1,需软件清零
}
/*****************************************************
函数功能:串口初始化、T1作波特率发生器初始化、打开串口中断
******************************************************/
void init()
{
	TMOD=0x20;	  //定时器1工作于8位自动重载模式, 用于产生波特率
	TH1=0xFD;	  //波特率9600
	TL1=0xFD;
	SCON=0x50;	  //串口工作方式1 允许接收
	PCON=0x00;	  //波特率不倍增
	TR1=1;		  //启动定时器1	
	EA=1;		  //打开总中断
	ES=1;		  //打开串口中断
}
void main()
{
	init();
	while(1);
}
/*****************************************************
函数功能:串口接收的中断函数
******************************************************/
void TNT_Uart() interrupt 4
{
	uchar y;
	if(RI==1)	 //查询是否有数据到来
		{
			RI=0;	 //每接收8位数据RI就自动置1,需软件清零
			y=SBUF;	 //SBUF是数据缓冲寄存器(暂存数据),把数据输出到y
			P0=y;	 //y中的数据传给P0
			send_char(y);  //回传给电脑接收到的数据
		}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值