大家好,我是『芯知识学堂』的SingleYork,前一篇文章给大家介绍了“SYK-0806-A2S1 工业自动化控制之【14-串口收发字符串】”,
这一篇中,笔者继续给大家介绍“串口收发字十六进制数”。
有做工控项目的小伙伴们或许会发现,在很多应用场合,实际上都是用十六进制数来进行数据传递,包括MODBUS协议也是一些十六进制的数。
所以,笔者觉得有必要跟大家一起分享一下如何使用串口来收发十六进制数。
有了前面的基础,相信大家对串口收发数据并不陌生了,本例笔者以单个字节的十六进制数的收发为例,进行简单介绍。
例如,笔者现在要实现这么一个功能:
上位机发送0x00,控制板Y00输出ON ,并返回接收到的数据;
上位机发送0x10,控制板Y00输出OFF,并返回接收到的数据;
上位机发送0x01,控制板Y01输出ON ,并返回接收到的数据;
上位机发送0x11,控制板Y01输出OFF,并返回接收到的数据;
上位机发送0x02,控制板Y02输出ON ,并返回接收到的数据;
上位机发送0x12,控制板Y02输出OFF,并返回接收到的数据;
上位机发送0x03,控制板Y03输出ON ,并返回接收到的数据;
上位机发送0x13,控制板Y03输出OFF,并返回接收到的数据;
上位机发送0x04,控制板Y04输出ON ,并返回接收到的数据;
上位机发送0x14,控制板Y04输出OFF,并返回接收到的数据;
上位机发送0x05,控制板Y05输出ON ,并返回接收到的数据;
上位机发送0x15,控制板Y05输出OFF,并返回接收到的数据;
看上去似乎很简单,可是,对于新手来说也未必做得写的出来。那么笔者就简单介绍一下,想要实现上述功能,该怎么实现吧。
其实代码部分很简单,我们还是在之前的SYK-0806-A2S1 工业自动化控制之【13-串口收发单个字符】代码基础上做修改,
主要代码也还是在app.c文件中实现。
首先,还是一样需要对uart和gpio进行初始化:
- void app_init(void)
- {
- UART_config(); //UART初始化
- GPIO_Config(); //GPIO初始化
-
- EA = 1; //开启总中断
- }
复制代码
接下来,由于逻辑也比较简单,所以笔者就偷懒直接将所有代码放到了uart1中断函数里面了:
- /********************* UART1中断函数************************/
- void UART1_int (void) interrupt UART1_VECTOR
- {
- u8 RX_Data;
-
- if(RI)
- {
- RI = 0;
- RX_Data = SBUF;
-
- switch(RX_Data)
- {
- case 0x00:Y00 = OutputT_ON ;break;//接收到十六进制数0x00,Y00输出ON
- case 0x10:Y00 = OutputT_OFF;break;//接收到十六进制数0x10,Y00输出OFF
-
- case 0x01:Y01 = OutputT_ON ;break;//接收到十六进制数0x01,Y01输出ON
- case 0x11:Y01 = OutputT_OFF;break;//接收到十六进制数0x11,Y01输出OFF
-
- case 0x02:Y02 = OutputT_ON ;break;//接收到十六进制数0x02,Y02输出ON
- case 0x12:Y02 = OutputT_OFF;break;//接收到十六进制数0x12,Y02输出OFF
-
- case 0x03:Y03 = OutputT_ON ;break;//接收到十六进制数0x03,Y03输出ON
- case 0x13:Y03 = OutputT_OFF;break;//接收到十六进制数0x13,Y03输出OFF
-
- case 0x04:Y04 = OutputT_ON ;break;//接收到十六进制数0x04,Y04输出ON
- case 0x14:Y04 = OutputT_OFF;break;//接收到十六进制数0x14,Y04输出OFF
-
- case 0x05:Y05 = OutputT_ON ;break;//接收到十六进制数0x05,Y05输出ON
- case 0x15:Y05 = OutputT_OFF;break;//接收到十六进制数0x15,Y05输出OFF
-
- default:break;
- }
-
- SBUF = RX_Data; //发送接收到的数据
- }
-
- if(TI)
- {
- TI = 0;
- }
- }
复制代码
由于是单个十六进制数的收发,因此也不需要担心收发忙的问题,关于动作的执行也很简单,笔者就用一个swtich()语句来实现了。
程序编译OK后,直接下载到板子上,通过串口助手一次发送对应的十六进制数,即可看到对应的输出ON或者OFF了。
好了,关于使用本节内容笔者就介绍到这里了,有疑问的小伙伴们可以给笔者留言或者直接参与评论,
下一节笔者将继续给大家介绍“串口的基本使用”,详见“SYK-0806-A2S1 工业自动化控制之【16-自定义协议通信】”,感谢大家的支持!
本章源代码:
【STC15系列】SYK-0806-A2S1- 15-串口收发十六进制数.rar
(68.58 KB, 下载次数: 3)
|