打印

一个单片机串口通讯问题 引发的~~

[复制链接]
1766|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Name_006|  楼主 | 2010-3-17 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/////////////////////////////////
//功能描述:串口通讯之蜂鸣器
//单 片 机:51系类单片机
//编 写:l
//日 期:2010
//版 本:1.0
/////////////////////////////////
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar Num,Flag,z,b;
int a,ge,shi,bai;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f,0};
sbit beep=P2^3;
sbit duan=P2^6;
sbit wei=P2^7;
void bee();
void Run();
void delay(uchar z);
main()
{
init();
while(1)
{
  if(Flag==1)
      {
    Flag=0;
    ES=0;
   
  
      if(a=='0')
    {
    duan=1;
    P0=table[0];
    duan=0;
    P0=0xff;
    wei=1;
    P0=0xfe;
    wei=0;
    delay(1);
    }
   
    ES=1;
     }
  }

}
/////////////////////////////////
//函数功能:初始化函数
//输入函数:
//返回函数:
/////////////////////////////////
init()
{

  TMOD=0x20;
  TH1=0xfd;
  TL1=0xfd;
  TR1=1;
  REN=1;
  SM0=0;
  SM1=1;
  EA=1;
  ES=1;
  beep=1;
}
/////////////////////////////////
//函数功能:中断函数
//输入函数:
//返回函数:
/////////////////////////////////
void Break() interrupt 4
{
RI=0;
a=SBUF;
Flag=1;
}
/////////////////////////////////
//函数功能:延时子函数
//输入函数:
//返回函数:
/////////////////////////////////
void delay(uchar z)
{
uint x,y;
for(x=0;x<z;x++)
   for(y=0;y<110;y++);
}

以上程序中   如果pc向单片机发送 0 则单片机的数码管显示0
但是在if(a=='0')
    {
    duan=1;
    P0=table[0];
    duan=0;
    P0=0xff;
    wei=1;
    P0=0xfe;
    wei=0;
    delay(1);
    }
这段程序中 如果写if(a=='0')数码管就可以显示
如果写if(a==0)数码管就显示不了
我知道pc发送到单片机的是ASCII码    听别人说是ASCII码与十进制间自动转换的但是以上 明显没有转换 所以请教下 ~~~~~

相关帖子

沙发
NE5532| | 2010-3-17 21:20 | 只看该作者
'0'是字符,hex码是0x30,0是数字,hex码是0x00,你说一样不?

使用特权

评论回复
板凳
Name_006|  楼主 | 2010-3-17 21:34 | 只看该作者
2# NE5532
恩恩 我知道这个 再请教下  这两种数之间该怎样转换呢  或者说  怎样实现pc发一个十进制数据 显示到数码管上

使用特权

评论回复
地板
NE5532| | 2010-3-17 21:40 | 只看该作者
你把串口助手的hex发送的勾勾勾上,不就发的是HEX数据了呀。要把ascii字符转换成HEX数据,直接减个偏差就是了,找本C语言的书,看ascii码表的附录,你就知道了。

使用特权

评论回复
5
Name_006|  楼主 | 2010-3-17 22:00 | 只看该作者
4# NE5532
恩恩 谢谢你啦  很感谢 回答我两次的问题 :victory:

使用特权

评论回复
6
歪 歪| | 2010-3-17 23:38 | 只看该作者
你可以用这个工具拦截看下你两次发的数据有什么不同,0和‘0’可真不一样呦。
至于怎么发数据满足要求,你用这个工具多试几次就能确定数据形式。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
Name_006 + 1 恩 啊 谢谢啦
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32 等各类单片机程序开发,NFC读卡器,sfz读卡器,C#上位机开发。WX:3539-733-14

3

主题

59

帖子

1

粉丝