搜索
bottom↓
回复: 6

52单片机的串口通信和函数返回值之间奇怪问题

[复制链接]

出0入0汤圆

发表于 2013-3-4 10:28:02 | 显示全部楼层 |阅读模式

sbit key_1 = P0^0;       
sbit key_2 = P0^1;       
sbit key_3 = P0^2;   
sbit key_4 = P0^3;       
sbit key_5 = P0^4;  
sbit key_6 = P0^5;

void main(void)
{        uchar i=0,min=12,sec=0,s_24=24,s0_1;
    timer_init();
        uart_init();
        while(1)
        {        
        min=count/10/60;
        sec=count/10%60;
        s0_1=count%10;        
        display(min,sec,s0_1,s_24);        //七位数码管显示函数( min,sec,s0_1,s_24)
        send_uart(sec);
        s_24=key_pro7();
        }
}

void send_uart(uchar dat)
{
  SBUF=dat;
  while(!TI);
  TI=0;
}
void uart_init()
{
    TMOD|=0x20;//设置定时器1为工作方式2
        TH1=0xfd;//设置串口通信的波特率为9600
        TL1=0xfd;
        TR1=1;//开启定时器1
        SM0=0;
        SM1=1;
}
                                 
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
                  if(!key_1)
         {
                // while(!key_1);        // 松手检测
                 return 1;
          }                                         

       
}

不知道为什么send_uart(sec);函数在主函数时,s_24=key_pro7(); 也在主函数时,s_24的数值的变化就变成sec的变化;
我怀疑是函数返回值储存的寄存器和uart储存的寄存器发生冲突,不知是否是因为这个问题。希望得到大家的帮助!

出0入25汤圆

发表于 2013-3-4 12:28:30 | 显示全部楼层
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
                  if(!key_1)
         {
                // while(!key_1);        // 松手检测
                 return 1;
          }                                         

        
}
------------------------------------------
编译器没警告??

出0入0汤圆

发表于 2013-3-4 12:29:12 | 显示全部楼层
因为你程序写的有问题
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
                  if(!key_1)
         {
                // while(!key_1);        // 松手检测
                 return 1;
          }                                                
}
一看就是有问题的啊

出0入0汤圆

 楼主| 发表于 2013-3-5 17:36:16 | 显示全部楼层
墨非 发表于 2013-3-4 12:28
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0

编译时是有一个警告,但是我是这个函数的警告!说真的我真不明白错在哪里,还请多多指教!

出0入0汤圆

 楼主| 发表于 2013-3-5 17:37:25 | 显示全部楼层
yklstudent 发表于 2013-3-4 12:29
因为你程序写的有问题
uchar key_pro7(void)
{

请阁下多多指教!

出0入25汤圆

发表于 2013-3-5 18:00:11 | 显示全部楼层
qq602828308 发表于 2013-3-5 17:36
编译时是有一个警告,但是我是这个函数的警告!说真的我真不明白错在哪里,还请多多指教!  ...

uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
   if(!key_1)
     {
                // while(!key_1);        // 松手检测
           return 1;
      }                                                
}
-----------------------------------------------------------
if(!key_1)  不成立的话 没有明确的返回啊。。不知道机器执行的时候会给你返回个什么值哦
试试
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0
         delay(10) ;  //延时20毫秒,消除抖动干扰
   if(!key_1)
     {
                // while(!key_1);        // 松手检测
           return 1;
      }   
     return 0;                                             
}

出0入0汤圆

 楼主| 发表于 2013-3-5 18:58:42 | 显示全部楼层
墨非 发表于 2013-3-5 18:00
uchar key_pro7(void)
{
     if(!key_1)    //        key1==0

嗯!多谢了!是返回串口发送出去的数据!这就是我郁闷的原因了!那我试试看!再次表示感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 07:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表