C51--PC通过串口(中断)点亮LED

B4中的:REN允许 / 禁止串行接收控制位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

REN = 1为允许串行接收状态。
接收数据必须开启。所以SCON:0101 0000 ;即0x50

如何知道数据已经接收
RI位:当收到数据后 RI = 1(由硬件置一)
硬件置一后必须用软件复位: RI = 0

PC通过串口点亮LED

例:
通过发送缓冲区发送 ‘ c ’ 或者 ‘ o ’ 熄灭或者打开D5

#include "reg52.h"
#include "intrins.h"sfr AUXR = 0x8E;
sbit D5 = P3^7;//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;		//串口1选择定时器1为波特率发生器TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void sendByte(char data_msg)
{//往发送缓冲区中写入数据,就完成了数据的发送SBUF = data_msg;while(!TI);		//超声波中,用while等待,发送成功后T1 == 1TI = 0;		
}void sendString(char* str)
{while(*str != '\0'){sendByte(*str);str++;}
}void main()
{char cmd;D5 = 1;		//D5通电以后为灭的状态//配置c51串口的通信方式 UartInit();while(1){Delay1000ms();sendString("laowang lihai!\r\n");//如何知道数据已经接收,通过查询RI的值,如果RI = 1(收到数据后由硬件置一)if(RI == 1){RI = 0;		//软件复位cmd = SBUF;		//读数据if(cmd == 'o'){D5 = 0;		//D5点亮}if(cmd == 'c'){D5 = 1;		//D5熄灭}}}}

不使用中断时,亮灯会有延时。

PC通过串口中断控制LED

串口中断:UART
使用的中断号:void UART_Rountine(void) interrupt 4
发送和接收用的同一个中断处理函数。

ES: 串行口1中断允许位。ES = 1,允许串行口1中断;ES = 0,禁止串行口1中断。
EA: CPU的总中断控制位。EA = 1,CPU开放中断;EA = 0,CPU屏蔽所有中断请求。
在这里插入图片描述

#include "reg52.h"
#include "intrins.h"sfr AUXR = 0x8E;
sbit D5 = P3^7;char cmd;//串口初始化
void UartInit(void)		//9600bps@11.0592MHz
{PCON &= 0x7F;		//波特率不倍速SCON = 0x50;		//8位数据,可变波特率AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12TAUXR &= 0xFE;		//串口1选择定时器1为波特率发生器TMOD &= 0x0F;		//清除定时器1模式位TMOD |= 0x20;		//设定定时器1为8位自动重装方式TL1 = 0xFD;		//设定定时初值TH1 = 0xFD;		//设定定时器重装值ET1 = 0;		//禁止定时器1中断TR1 = 1;		//启动定时器1EA = 1;			//开启总中断ES = 1;			//开启串口中断
}void Delay1000ms()		//@11.0592MHz
{unsigned char i, j, k;_nop_();i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);
}void sendByte(char data_msg)
{//往发送缓冲区中写入数据,就完成了数据的发送SBUF = data_msg;while(!TI);		//超声波中,用while等待,发送成功后T1 == 1TI = 0;		
}void sendString(char* str)
{while(*str != '\0'){sendByte(*str);str++;}
}void main()
{D5 = 1;		//D5通电以后为灭的状态//配置c51串口的通信方式 UartInit();while(1){Delay1000ms();sendString("laowang lihai!\r\n");}}//中断函数
void UART_Rountine(void) interrupt 4
{if(RI){			//接收中断RI = 0;		//软件复位cmd = SBUF;		//读数据if(cmd == 'o'){D5 = 0;		//D5点亮}if(cmd == 'c'){D5 = 1;		//D5熄灭}}if(TI);			//发送中断
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/171739.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON.parse --- 搜索框

一 &#xff0c; JSON.parse this.num_normsTwo JSON.parse(res.result.normsTwo) 二. 搜索框 <template><div class"app-container"><span style"margin-left:120px;margin-right: 20px;width: 100px; display: inline-block;">物…

GNSS接收机:高精度定位终端

GNSS(全球卫星导航系统)接收机是一种强大的设备&#xff0c;能够利用多个卫星信号来进行高精度定位。计讯物联GNSS接收机多星多频厘米级高精度定位&#xff0c;IP68高等级防护&#xff0c;支持外接传感器数据采集&#xff0c;数据上云远程在线监控&#xff0c;适用于山体滑坡监…

守护进程daemon(),C 库函数asctime、localtime,UDEV的配置文件,开机自启动,自动挂载U盘

一、守护进程 二、daemon()函数 三、C 库函数asctime、localtime 四、设置守护进程开机自启动 五、守护进程应用 编写判断守护进程是否在运行的程序 守护进程不让控制程序退出 把相关守护进程设置成开机自启动 六、dmesg 七、UDEV的配置文件&#xff08;udev的rules编写&am…

深度学习 机器视觉 车位识别车道线检测 - python opencv 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) …

Leetcode179. 最大数

Every day a Leetcode 题目来源&#xff1a;179. 最大数 解法1&#xff1a;贪心 对于数组 nums 中的任意两个数 a 和 b&#xff0c;我们将其转换为字符串后&#xff0c;如果 to_string(a) to_string(b) > to_string(b) to_string(a)&#xff0c;说明 a 应该放在 b 的前…

微信怎么群发消息?答案在这,1分钟就能学会!

微信群发消息是一种方便快捷的消息发送方式&#xff0c;该功能允许用户一次性给多个好友发送相同的内容。一般来说&#xff0c;群发消息比较适用于发送节日祝福、通知、品牌推广等场景。微信怎么群发消息&#xff1f;本文将给大家详细介绍微信群发消息的操作方法&#xff0c;只…

如何使用Echarts

以umi为例 首先是下载两个插件&#xff08;echarts和echarts-for-react&#xff09; npm npm install --save echarts-for-react npm install echarts yarn yarn add echarts-for-react yarn add echarts 接下来是在tsx或jsx中引入使用 import ReactEcharts from "echa…

uni-app的下拉搜索选择组合框

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家介绍uni-app中一款可以搜索下拉选择输入框的插件 下拉搜索选择组合框 superwei-combox 组合框 uni-app中可下拉搜索选…

若依系统富文本框上传图片报错!

报错如下&#xff1a; 原因&#xff1a;如图&#xff0c;富文本路径中存在 / 字符&#xff0c;导致上传出错。 解决方案&#xff1a;将富文本框内容在前端进行加密&#xff0c;后端再解密。 前端&#xff1a; 安装 crypto-js 插件 npm install crypto-js 创建工具类 :在 sr…

uniapp项目运行到网易mumu模拟器流程,5分钟不到就可以运行

开发了一个uniappvitevue3的跨平台项目&#xff0c;但是想在手机模拟器中测试一下效果&#xff0c;所以就用网易mumu这个模拟器测试了&#xff0c;因为这是uniapp官方推荐的模拟器&#xff0c;所以下面开始流程&#xff1a;先打开网易mumu模拟器的开发者模拟。系统应用 > 设…

一行JavaScrip可以做什么?

说在前面 JavaScript 提供了许多方便的方法和操作符来简化常见的任务&#xff0c;使得编程变得更加高效和便捷。无论是数学计算、字符串处理还是数据操作&#xff0c;JavaScript 都能帮助我们以简洁的方式实现所需功能。 代码 1、生成指定范围内的随机整数 const randomInt …

【06】VirtualService高级流量功能

5.3 weight 部署demoapp v10和v11版本 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: demoappv10version: v1.0name: demoappv10 spec:progressDeadlineSeconds: 600replicas: 3selector:matchLabels:app: demoappversion: v1.0template:metadata:labels:app…