其他分享
首页 > 其他分享> > 串口通信的进阶应用

串口通信的进阶应用

作者:互联网

 这里主要是对题目的通信规约进行分析,题目要求的是0关灯,1开灯,而P0口是0点亮led灯,所以在传入数据时,要对数据进行取反操作,另外AB分别对led灯进行不同的操作,那么当输入为0xa3时,其目的是点亮led的1.3栈灯,但是输入的a是高八位,为了不影响原来P0的高8位就需要进行相应的与或操作,0与任何数相或不改变原来的数,1与任何数相与不改变原来的数。

例如P0=0x43,我的commend=0xa5,为的是打开第一盏灯和第三盏灯,那么首先我需要对commend取反,因为题目的关灯和开灯是与我的P0电灯是相反的,那么我的目的就是将P0=0x43改为0x45,因为只有低4位操作led灯(其实高4位也没有相应的操作),P0 |0x0f ,高位4不变 ,低4位为1(P0口的灯全部熄灭) ,  然后将(~commend) | 0xf0 保证commend的后4位不变 ,然后 

P0 |0x0f  & (~commend) | 0xf0  1与然和数相与 为原来的数 ,就可以保证 P0的高4不变,然后 又可以通过commend的低4位进行点灯的操作

因为当输入命令的时候0xa? 中的a已经占了高4位,那么就不可能点亮5678中的灯,

当输入命令为0xb? 是对5678中的灯进行操作,那么就需要将命令commed左移4位 才能点亮led,移动4位就是对高4位进行操作,那么与或的值也要跟着改变 

例如 P0=0x43  我的命令是0xb5 就是对P0的高位操作 那么P0 | f0  然后   ~commend<<4  | 0x0f   最后它们 再进行相与

对通信规约解释完后 ,然后是发送字符串 需要定义一个发送字符串的函数,在接收变量的时候用指针接收地址,然后一位一位移动进行发送

具体步骤: 定义选择138的开关,定义初始化继电器的函数(通过选择138先关掉继电器然后关掉led), 初始化定时器1(一共有7行代码) ,中断服务函数 用来接收数据(需要定义变量),发送字节函数(需要定义变量),发送字符串函数(需要用到指针变量来接收),工作做函数,对接收的变量的内容进行操作,进行完相关的操作后要给变量符初值,否则会一直进行相关的操作

标签:P0,led,进阶,函数,通信,commend,串口,操作,变量
来源: https://blog.csdn.net/w396255075/article/details/122650145