wgrk.net
当前位置:首页 >> 51单片机串口通信发送字母或数字,为什么电脑显示... >>

51单片机串口通信发送字母或数字,为什么电脑显示...

波特率,校验位

汉字的话就是传送的GB2312编码,即传说的区位码,一个编码是两个字节,每个字节的值都是大于0x80的,这样跟ASCII码分开。当把编码转换为对应的汉字的时候,就需要在汉字库中根据编码来计算汉字的位置了。

这就对了 0 的ascii码就是48 0-48 1-49 2-50 ........ 9-57 你是按字符发送的,如果用16进制发送,就会发多少得多少了

不知道你的发送值范围如果是小于16的数,那么修改如下: void send_com(unsigned char x) { SBUF=x+128; while(TI==0); TI=0; }

你这里的难点在于"只发送一次",可以定义一个标志变量初始为0,当P1.1=0时且标志为0,向串口发送一个数据,并置该标志为1,即使P1.1依然为0也不会一直发送;当检测到P1.1=1时,置标志为0,以便下次再触发。其他依此类推。

汉字乱码是因为你显示汉字的时候使用的码和原来传输的码不匹配,和用什么通信无关

所有字符都是用二进制保存的,在发送过程中是把一个字符也就是一个byte占8个bit,使用逻辑电平表示每个bit,按照串行的方式发送出去的

如果收到乱码很频繁,应该是波特率误差太大所致,这有两方面原因。 1、单片机和电脑设置的波特率不一致。 2、晶振性能较差,其频率很不稳定,导致波特率误差过大。

1、自己的程序没贴出来,别人怎么帮分析?不看程序怎么知道你串口设置对了没有 2、hex是什么 是16进制格式,hex格式对,那程序就对了, 你确定你的数据可以正常显示字符么?比如0xCC ,字符显示当然是乱码埃

你这里的难点在于"只发送一次",可以定义一个标志变量初始为0,当P1.1=0时且标志为0,向串口发送一个数据,并置该标志为1,即使P1.1依然为0也不会一直发送;当检测到P1.1=1时,置标志为0,以便下次再触发。其他依此类推。

网站首页 | 网站地图
All rights reserved Powered by www.wgrk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com