视频剪辑软件 Linux软件安装 golang爬虫 oop jar db2 Skeljs History.js bootstrap管理模板 微信小游戏开发视频 java后台框架 js键值对数组 linux自动获取ip matlab 图像识别 mysql新增用户和权限 flutter 缺点 python基础 python数据库 python实战 python路径设置 python安装程序 java什么是多态 java结束线程 java对象是什么 linux密码 圣骑士装备 corelpainter crazytalk 一件换肤 微信小程序源代码 明解c语言 popen函数 抠图软件免费版 pr加速视频 古特里克的杀生刀 python爬取图片 js压缩图片 fla文件用什么打开 ibeacon定位 xd下载
当前位置: 首页 > 学习教程  > 编程语言

串口2(接收来自上位机的数据,并发回上位机)

2020/12/5 10:26:24 文章标签:

看了老师的视频之后,自己手动写了代码。一边写代码,一边编译,这种方式真好,可以及早发现问题。 比如说,这次的代码中,关于中断函数,我就写错了,直接把中断优先级也给写在函数的声明里…

看了老师的视频之后,自己手动写了代码。一边写代码,一边编译,这种方式真好,可以及早发现问题。
比如说,这次的代码中,关于中断函数,我就写错了,直接把中断优先级也给写在函数的声明里了,还好及时编译及早的定位了问题点。
想想自己以前也用过中断函数,但为什么这次声明错误呢?因为之前的程序中,我直接在函数声明时就把函数主体给写上去了。
所以,要多动手,多犯错了,记忆就深刻了。
代码如下:

//功能实现:接收从上位机发来的信息

#include <reg51.h>

void uart_init (void);						//串口初始化
void uart_sent_byte (unsigned char b);		//发送给上位机
void uart_receive_byte (void);				//接收来自上位机的东西;注:void uart_receive (void) interrupt 4 unsing 1; ==>这种中断函数的声明是错的,不用带中断优先级	

void main ()
{
	uart_init ();
	while (1)
	{
		uart_receive_byte ();
	}
}

void uart_init (void)
{
	SCON = 0x50;	//配置SCON寄存器工作在方式1	—— 8位uart,并允许串行接收
	PCON = 0X80;	//设置波特率加倍

	TMOD = 0x20;	//设置定时器1工作在方式2 —— 8位自动重装
	TH1 = 243;		//赋初值。波特率设定在 4800
	TL1 = 243;		
	TR1 = 1;		//启动定时器
}

void uart_sent_byte (unsigned char b)
{
	//对于发送,采用查询TI这个标志位的方式,而不使用中断。CPU只需要给SBUF里丢东西就好了,不用盯着它。
	SBUF = b;		//把数据扔到SBUF里,OSC会自动发送;
	while (! TI);	//只有当发送完成之后,TI会被硬件置1,说明发完了,再继续往下走。
	TI = 0;			//标志位要手动复位	
}
																																	 
void uart_receive_byte (void) interrupt 4 using 1	 //使用中断的方式接收串口数据
{
	//如果接到到了数据,那么CPU会来这里
	unsigned char a;
	if (RI)			//接收到中断说明 RI == 1
	{
		a = SBUF;				//接数据读取出来
		RI = 0;					//需要软件复位
		uart_sent_byte (a);		//把从上位机接收到的数据,发回来上位机
	}

}

本文链接: http://www.dtmao.cc/news_show_450233.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?