6741|19

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

在串口通讯中怎样传送英文字母啊? [复制链接]

我在做一个串口通讯的实验,发送8个按键的值,数字可以加上30H转换成ASCII码,能显示了,但要显示字母加上37H转换成ASCII码却不成功,代码如下:
if(0<=keyval<=9)
     {SBUF=keyval|0x30;}
     else
    {SBUF=keyval|0x37;}
应该是编错了,应该怎么实现啊?

最新回复

if(0   详情 回复 发表于 2009-12-29 13:01
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
为什么要加0x37? 加0x30是把数0-9变成字符'0'-'9',加0x37? 10-15变'A'-'F'?

这样好了:
if (0<=keyval<=9)
  SBUF = '0' + keyval;
else if (10<=keyval<=15)
  SBUF = 'A'-10+keyval;  /* 这地方不能用逻辑或,只能用加 */
else
{
    /* 处理超出范围的错误 */
}
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 great_bug 的回复:
为什么要加0x37? 加0x30是把数0-9变成字符'0'-'9',加0x37? 10-15变'A'-'F'?

这样好了:
if (0 <=keyval <=9)
? SBUF = '0' + keyval;
else if (10 <=keyval <=15)
? SBUF = 'A'-10+keyval;? /* 这地方不能用逻辑或,只能用加 */
else
{
? ? /* 处理超出范围的错误 */
}


这样改了以后数据不能发送到虚拟终端
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
其实是一样的吧?

如果改了之后不能发,那就是本来就不能发吧??? 我只是改了你的变'A'-'F'的部分....
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 great_bug 的回复:
其实是一样的吧?

如果改了之后不能发,那就是本来就不能发吧??? 我只是改了你的变'A'-'F'的部分....


恩,应该是可以的,
可是我改了以后,数字也不能发送,不能显示了。。。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 great_bug 的回复:
其实是一样的吧?

如果改了之后不能发,那就是本来就不能发吧??? 我只是改了你的变'A'-'F'的部分....


别的地方丢失一样的,没有改过~
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 5 楼 moyang911 的回复:
引用 3 楼 great_bug 的回复:
其实是一样的吧?

如果改了之后不能发,那就是本来就不能发吧??? 我只是改了你的变'A'-'F'的部分....


别的地方都一样的,没有改过~ 原来是能显示发送的数字的~
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

8
 
keyval 要是0----15的 然后出来的就是0-----9  A-------------F

if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
    else
    {SBUF=keyva+0x41;}
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 cfanlwn 的回复:
keyval 要是0----15的 然后出来的就是0-----9? A-------------F

if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
? ? else
? ? {SBUF=keyva+0x41;}

0x41就是'A',要减去10的,你这不对
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 8 楼 great_bug 的回复:
引用 7 楼 cfanlwn 的回复:
keyval 要是0----15的 然后出来的就是0-----9? A-------------F

if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
? ? else
? ? {SBUF=keyva+0x41;}

0x41就是'A',要减去10的,你这不对

呵呵
if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
    else
    {SBUF=keyva+0x41-0xa0;}

 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 cfanlwn 的回复:
引用 8 楼 great_bug 的回复:
引用 7 楼 cfanlwn 的回复:
keyval 要是0----15的 然后出来的就是0-----9? A-------------F

if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
? ? else
? ? {SBUF=keyva+0x41;}

0x41就是'A',要减去10的,你这不对

呵呵
if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
? ? else
? ? {SBUF=keyva+0x41-0xa0;}




为什么减去的是0xa0呀?减10的话不是0x0a吗?我两个都运行过了,他还是不显示字母,显示的还是"=","<",">","?"
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

12
 
if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
    else
    {SBUF=keyva+0x41-10;}
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 11 楼 cfanlwn 的回复:
if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
? ? else
? ? {SBUF=keyva+0x41-10;}



它不显示字母,显示的是"="," <",">","?"
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

14
 
奇怪,这样的算法没有问题啊 你确定 你的keyval 是0----15??
if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
if(10<=keyval <=15)
     {SBUF=keyva+0x41-10;}

如果说你得到的是"="," <",">","?" 肯定就没有执行上面的else语句  

楼主单步执行一下 或者直接给个keyva=10 看看能不能出来A
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 cfanlwn 的回复:
奇怪,这样的算法没有问题啊 你确定 你的keyval 是0----15??
if(0 <=keyval <=9)
? ? {SBUF=keyval+0x30;}
if(10 <=keyval <=15)
? ? {SBUF=keyva+0x41-10;}


做的是通过p1口按键输入数据,通过串口发送,keyval获得的是p1口的值,然后转变为ASCII码发送,这样的设想有错伐?是不是少考虑了什么啊?
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

16
 
这样的想法没有错误,你可以这样先测试一下啊,让P1输出10给keyval ,然后变成ASCII码,发到串口上,看看能不能出来A

以前你是keyval =P1;

现在这样测试 keyval =10;

if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
if(10 <=keyval <=15)
    {SBUF=keyva+0x41-10;}

看串口出来A不?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

17
 
我QQ:815987015  如果还解决不了 QQ给我
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

18
 
引用楼主 moyang911 的回复:
我在做一个串口通讯的实验,发送8个按键的值,数字可以加上30H转换成ASCII码,能显示了,但要显示字母加上37H转换成ASCII码却不成功,代码如下:
if(0 <=keyval <=9)
? ? {SBUF=keyval|0x30;}
? ? else
? ? {SBUF=keyval|0x37;}
应该是编错了,应该怎么实现啊?


用'+' 而不是'|'
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

19
 
if(0 <=keyval <=9)
    {SBUF=keyval+0x30;}
    else
    {SBUF=keyval+0x37;}
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

20
 
if(0 <=keyval <=9) 这样用也是非法的,应为


  1. if(keyval <=9)
  2. {
  3.    SBUF=keyval+'0';
  4. }
  5. else
  6. {
  7.    SBUF=keyval+'A';
  8. }
复制代码
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表