单片机串口接收到16进制的数,怎么将其变成1

单片机串口接收到16进制的数,怎么将其变成1,第1张

串口都是用16进制发送的,有两种办法,

在接收到数据之后你把16进制转为10进制就可以了,比如你发送的十进制10,传送的时是十六进制0x0A,接收到数据后转成10进制 0AH = 10。

在发送时把数据转换成BCD码,发送十进制10,转成BCD码十六进制就是0x10,接收到数据时显示的就是10H。

BCD码转换百度一下可以。

这个程序是正确的。
程序循环了16次。
把 M_byte,L_byte,左移了16次,最高位,依次移进了Cy;
用 ADDC 指令,把 RW1,RW2,左移了16次,并把Cy,加入到了最低位。
ADDC 指令后面,是十进制调整指令,所以,RW1,RW2 中的内容就是BCD码。

转换当然用除10000得到万位再减去万位,同理利用上面的数得到千位,百位十位最后的余数就是个位。
抽取后四位难道不是与下0XFFFF搞定吗
延迟两秒的话可以用每次按键启动或刷新一个定时器来搞定,至于是在中断服务程序内搞还是仅仅做个标记就看情
现在情况是你能显示数字了,那么你就应该能得到输入的数字了吧。(方便起见就不用输入来触发中断了)程序主循环结构是:1、定时扫描输入I/O状态,定时的作用就是用来做防颤处理的,在间隔几毫秒的过程后,如果按键状态还是变化了,才表示实际按动过了。2、上面如果检测到有变化,则将定时器的数字清零,在这个定时器的服务程序里执行将一个标志置位。然后再执行内存中输入数字的变化,和显示的内容。3、判断是否有定时器中断触发的标志,有的话就执行将数转换成BCD码(就是转换成10进制数)的过程,并显示出来。如此就完成了。
至于定时器中断怎样搞,和汇编相比,更简单了,直接初始化定时器的特殊定时器,再在程序里定义中断服务程序就好了。我估计你的输入数字还没能整理,那样的话在上面的第2步里,的第二个 *** 作中先将原数乘16,再加上后来添的数就OK了,显示的话直接对这个数进行处理就好了。

用C语言写程序,也不用转换的。C语言就可以直接写十进制数的,内部是什么可以不用考虑。
只是在显示时,按十进制数显示时,取出百,十,个位就行了,也不用先转换的。
你这样好像是转换了,可转换后的数,在内部还是十六进制数,那当然是错的。
所以,要根据需要进行分离或者转换。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13328327.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-15
下一篇 2023-07-15

发表评论

登录后才能评论

评论列表(0条)

保存