找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1255|回复: 3
打印 上一主题 下一主题
收起左侧

单片机串口通信程序遇到问题!请高手指点

[复制链接]
跳转到指定楼层
楼主
我想通过按键控制单片机发送数据到串口,每按一次按键变量r_cut加1,CS是前面五个数据的和,只取后两位。实际按键后。r_cur,CS 两个变量的数值有变化,但是串口接到的数据都是固定的没有变化。请大师指一下。谢谢。

单片机源程序如下:
  1. #define uchar unsigned char
  2. #define uint unsigned int
  3. sbit key1=P3^2;
  4. sbit key2=P3^3;

  5. uchar i,flag1,r_cut,cs;
  6. uchar code red[6]={0xc5,0xaa,0xa4,&r_cut,0x01,&cs};
  7. void delay(uint);
  8. void init()
  9.                 {
  10.                  PCON &= 0x7F;               
  11.              SCON = 0x50;               
  12.              AUXR |= 0xC0;               
  13.              AUXR &= 0xFE;               
  14.            
  15.             TMOD=0X22;

  16.                 TH1=0xB8;
  17.             TL1=0xB8;
  18.         TR1=1;
  19.                 ET1 =0;
  20.             EA=1;
  21.             ES=1;
  22.                 P_SW1=0X40; //P3.6,P3.7
  23.                
  24.             P3M0=0X00;
  25.            P3M1=0X00;
  26.             r_cut=0x0f;
  27.                 a=10;
  28.         
  29.                 }
  30. void delay(uint z)
  31.                 {
  32.                   uint x,y;
  33.                     for(x=z;x>0;x--)
  34.                             for(y=100;y>0;y--);
  35.                
  36.                
  37.                 }
  38. void scankey()
  39.                 {
  40.                   if(key1==0)
  41.               delay(10);
  42.                    if(key1==0)
  43.                       {
  44.                           a++;
  45.                            r_cut++;
  46.                                    cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;
  47.                                 
  48.                            ES=0;
  49.                            for(i=0;i<6;i++)
  50.                               {
  51.                                     SBUF=red[i];
  52.                                         while(!TI);
  53.                                         TI=0;
  54.                                 flag1=0;
  55.                                    }
  56.                                   ES=1;
  57.                                 while(!key1);
  58.                         
  59.                            }
  60.                   if(key2==0)
  61.                 delay(10);
  62.                    if(key2==0)
  63.                       {
  64.                                    a--;
  65.                            r_cut--;
  66.                                    cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;
  67.                            
  68.                            
  69.                            
  70.                            
  71.                            ES=0;
  72.                            for(i=0;i<6;i++)
  73.                               {
  74.                                     SBUF=red[i];
  75.                                         while(!TI);
  76.                                         TI=0;
  77.                                   }
  78.                                   ES=1;
  79.                                 while(!key2);
  80.                         
  81.                       }
  82.                
  83.                
  84.                 }
  85. void main()
  86.                 {

  87.                   init();
  88.                   while(1)
  89.                   {
  90.                           scankey();
  91.                   }
  92.                
  93.                
  94.                 }

  95. void ser() interrupt 4
  96.     {
  97.                   
  98.                         if (RI)
  99.                         {
  100.                                 RI=0;
  101.                         }
  102.                         else TI=0;
  103.                
  104.         }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-8-17 07:48 | 只看该作者
楼主数组定义错误。数组成员只能是常量,不可以是变量或表达式。ROM中定义的数组不可更改,RAM中定义的数组才可以更改。串口只发不收不需要开接收中断。1T的MCU延时程序要修正参数。程序修改如下:
  1. #include <STC15F2K60S2.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit key1=P3^2;
  5. sbit key2=P3^3;

  6. uchar a,i,flag1,r_cut,cs;
  7. //uchar code red[6]={0xc5,0xaa,0xa4,&r_cut,0x01,&cs};
  8. uchar data red[6]={0xc5,0xaa,0xa4,0x00,0x01,0x00};

  9. void delay(uint);

  10. void init()
  11. {
  12.         PCON &= 0x7F;               
  13.         SCON = 0x50;               
  14.         AUXR |= 0xC0;               
  15.         AUXR &= 0xFE;               
  16.         TMOD=0X22;
  17.         TH1=0xB8;
  18.         TL1=0xB8;
  19.         TR1=1;
  20. //        ET1=0;
  21. //        EA=1;
  22. //        ES=1;
  23.         P_SW1=0X40; //P3.6,P3.7
  24.         P3M0=0X00;
  25.         P3M1=0X00;
  26.         r_cut=0x0f;
  27.         a=10;
  28. }
  29. void delay(uint z)
  30. {
  31.         uint x,y;
  32.         for(x=z;x>0;x--)
  33.                 for(y=1150;y>0;y--);//1T/y=1150,12T/y=110
  34. }
  35. void scankey()
  36. {
  37.         if(key1==0)
  38.         {
  39.                 delay(10);
  40.                 if(key1==0)
  41.                 {
  42.                         a++;
  43.                         r_cut=a;
  44.                         red[3]=r_cut;
  45.                         cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;       
  46.                         red[5]=cs;
  47. //                        ES=0;
  48.                         for(i=0;i<6;i++)
  49.                         {
  50.                                 SBUF=red[i];
  51.                                 while(!TI);
  52.                                 TI=0;
  53.                                 //flag1=0;
  54.                         }
  55. //                        ES=1;
  56.                         while(!key1);
  57.                 }
  58.         }
  59.         if(key2==0)
  60.         {
  61.                 delay(10);
  62.                 if(key2==0)
  63.                 {
  64.                         a--;
  65.                         r_cut=a;
  66.                         red[3]=r_cut;
  67.                         cs=(0xc5+0xaa+0xa4+r_cut+0x01)&0xff;       
  68.                         red[5]=cs;
  69. //                        ES=0;
  70.                         for(i=0;i<6;i++)
  71.                         {
  72.                                 SBUF=red[i];
  73.                                 while(!TI);
  74.                                 TI=0;
  75.                         }
  76. //                        ES=1;
  77.                         while(!key2);
  78.                 }
  79.         }
  80. }
  81. void main()
  82. {
  83.         init();
  84.         while(1)
  85.         {
  86.                 scankey();
  87.         }
  88. }
  89. /*
  90. void ser() interrupt 4
  91. {
  92.         if (RI)
  93.         {
  94.                 RI=0;
  95.         }
  96.         else TI=0;
  97. }*/
复制代码


回复

使用道具 举报

板凳
ID:230975 发表于 2019-8-17 09:46 | 只看该作者
是的,定义错误。谢谢,不能用CODE.谢谢指教。我调试一下。
十分感谢。
回复

使用道具 举报

地板
ID:230975 发表于 2019-8-17 10:15 | 只看该作者
谢谢师傅指点
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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