51单片机串口通信-51单片机中的串口通信发送10(16进制)以上显示不正确

问题描述

51单片机中的串口通信发送10(16进制)以上显示不正确

串口通信中,向单片机发送数据控制LED灯亮实验中
发01,02、04、08 依次是 第1 2 3 4 个灯亮

而发送 10 就成第5 6 个一起亮了,然后发20 、40 是第7 和 第 8 个;
发 80 就全灭了 , 这是啥情况啊。

#include

unsigned char a,flag;
void init();
void main()
{
init();
while(1)
{
if(flag == 1)
{
ES = 0;
P0 = a;
ES = 1;
flag = 0;
}
}
}

void init()
{
TMOD = 0x20;
TH1 = 0xfa;
TL1 = 0xfa;
TR1 = 1; // T1开始工作
REN = 1; //允许串口接收
SM0 = 0;
SM1 = 1; //选择串口的工作方式
EA = 1; //中断总开关
ES = 1; // 开串口中断
}

void ext() interrupt 4
{
RI = 0;
a = SBUF;
flag = 1;
}

今天下午调了一下程序:

发现是波特率的问题:

4800 的 波特率

这样设置就有问题

这样设置就没事。

不过为啥是这个情况....

解决方案

用 串口调试助手 看下你发送的数据对不对

如果对的话,可能是单片机内的程序的问题

解决方案二:

你发生的数据,串口中是如何处理的。以及对应数据单片机支持吗,几个地方分别对照一下分析。

时间: 2024-09-10 09:44:20

51单片机串口通信-51单片机中的串口通信发送10(16进制)以上显示不正确的相关文章

[HOWTO]ORACLE中如何实现ASC字符串和16进制串互相转换

oracle|转换|字符串 ORACLE中如何实现ASC字符串和16进制串互相转换 欢迎大家同我交流:enhydraboy   enhydra_boy@tom.com 欢迎转载,请保留本声明,谢谢! 下面是笔者以前回答csdn论坛上问题的总结,希望对大家有用. ASC字符串==>16进制串 create or replace function AscToHex(sIn IN varchar2)RETURN varchar2ISsTmp varchar2(4000);i integer;BEGIN

jstack:将Process Explorer中看到的进程ID做16进制转换,到ThreadDump中加上0x 前缀即能找到对应线程(转)

原文链接:http://www.iteye.com/topic/1133941 症状: 使用Eclipse win 64位版本,indigo及kepler都重现了,使用tomcat 6.0.39,jdk1.6.u45及1.7u45均尝试了,也重现. 重现步骤很简单,使用debug模式启动时较容易出来,debug启动tomcat,(我的是webapp)然后在页面上随便点点即发现eclipse僵死,且任何从浏览器发出的请求都卡住不能被接收执行. 1.然后从任务管理器直接杀掉eclipse对应的jav

vbscript语句中“&H”专用于16进制数表示_vbs

原来在vbscript语句中"&H"专用于16进制数表示的.在使用"&"这个符号用于字串连接时,应该在两侧加上一个空格,虽然不加空格在多数情况下运行是正常的,但那是不正确的或不规范的写法.在出现以字母"h"开头的字段时,如有这样的语句: sql = "insert into Student(xxx,xxx) values('"&htitle&"','"&hname&a

qt 串口通信 write 写16进制数据

问题描述 qt 串口通信 write 写16进制数据 龚建伟老师编写的串口调试助手里面有个十六进制的发送和接收功能,不知道有没有哪位尝试过在QT里面实现同样的功能?就是对于类似"02e3a2f5d6"的字符串作为一个十六进制字符串发送,而不是作为普通的字符串发送,我看了他写的源代码,里面有一个字符串转换函数,这个函数可以直接拿过来用,但是使用qextserialport类进行发送的时候,出现了一点小问题,就是当字符的ASCII码值大于127时,会将最高位省略,比如发送"f5&

java socket 发送16进制数据-串口通信

问题描述 已有下位机通过ip转串口映射到ip+端口上去(物理通信没有问题了),现在下位机需要接受客户端发送过去的一串16进制的命令请求,然后返回结果,由于需要做成b/s的模式,所以现在想用java做客户端,请问该如何书写?因为java中在socket中只能传byte的数组:而byte的范围有限(-127~128)对于大的数就会溢出:请问如何解决? 解决方案 解决方案二:引用楼主u010212202的回复: 因为java中在socket中只能传byte的数组:而byte的范围有限(-127~128

mfc串口数据解析-如何从串口接收一段16进制数据中 读取需要的数据

问题描述 如何从串口接收一段16进制数据中 读取需要的数据 串口接收到的16进制数据: 53 d4 ac 4e d4 ac 2d 30 30 30 b4 2e 36 b2 8d 0a 53 d4 ac 4e d4 ac 2d 30 30 30 b4 2e 36 b2 8d 0a 53 d4 ac 4e d4 ac 2d 30 30 30 b4 2e 36 b2 8d 0a . . . 串口接收到的ASCII数据: ? k ? ? ? ? s ? ? k u ? ? ? k ? ? ? ? s ?

http-HTTP 通信 参数 16进制传递

问题描述 HTTP 通信 参数 16进制传递 HTTP通信中,发现有个参数是采用16进制传递的 传递参数如下: p1=1658997962& p2=000151A57CD6005827A00F88E49BBF297AD9D19C51D7D116FF8E81FB4 C6397377D27BDDFEF87AE50E27AA9364CD44EE4F2D87CE9147EEA291F452 A679D16C70A442C8C01584BD4A87C880D76CEA25309CF0B1E5D12EC5B

给串口发送16进制字符串命令和包括16进制命令转换为字节数组

using System;using System.Collections.Generic;using System.Text;using System.IO.Ports;namespace SerialPortControl{    public class PortControl    {         /// <summary>        /// 向端口中发送命令.        /// </summary>        /// <param name=&quo

android中String转换成16进制的方法

问题描述 android中String转换成16进制的方法 想请教一下?把一个24个字节的字符串转换成16进制,并把结果打印出来要怎么写,网上有一些方法但是没有说转换完的16进制串打印出来要用哪个参数?求指点 解决方案 byte[] b = ""字符串"".getBytes();foreach (byte i : b){if (i < 16) System.out.print(""0"" + Integer.toHexS