找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我写的单片机程序是哪里错?刷机进单片机的16进制不对

[复制链接]
跳转到指定楼层
楼主
麻烦各位大神帮我看看
stc-isp发布的项目程序后刷机进单片机的16进制不对, 要发送的
0x0E, 0x05, 0x03, 0x05, 0x09, 0x00, 0x03, 0x00, 0x03, 0x5A                                                                                                   0x0E, 0x00, 0x05, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x5A
单片机源程序如下:
  1. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  2. //若无特别说明,工作频率一般为22118400Hz,串口波特率使用定时器2,波特率115200
  3. #include "STC15W.h"
  4. #include "intrins.h"
  5. typedef unsigned int U16;
  6. typedef unsigned char U8;
  7. //-----------------------------------------------
  8. #define FOSC 22118400L//30000000L//22118400L
  9. /*
  10. FOSC                T        次数        重载值
  11. 22118400        12        1000        63692.8
  12. 22118400        12        100                47104
  13. 22118400        1        1000        43417.6
  14. 22118400        1        100                -155648
  15. 22118400        1        400                10240
  16. 22118400        1        500                21299.2
  17. 22118400        1        3000        58163.2
  18. 22118400        1        5000        61112.32
  19. 22118400        1        6000        61849.6
  20. */
  21. #define T1MS_12T         (65536-FOSC/12/1000)      //12T模式
  22. #define T1MS_1T         (65536-FOSC/1000)                //1T模式
  23. #define T10MS_12T         (65536-FOSC/12/100)                  //1T模式
  24. #define T2MS_1T         (65536-FOSC/500)                  //1T模式
  25. U8 gucTask10msFlg = 0;
  26. U8 gucTask10msCount = 0;
  27. U8 gucTask1000msFlg = 0;
  28. U16 gucTask1000msCount = 0;

  29. #define KEY  P32
  30. #define LED  P37

  31. /* Timer0 interrupt routine */
  32. void tm0_isr() interrupt 1
  33. {
  34.         TL0 = T1MS_1T;                     //初始化计时值
  35.     TH0 = T1MS_1T >> 8;
  36.     gucTask10msCount++;
  37.     if(gucTask10msCount >= 10)
  38.     {
  39.         gucTask10msCount = 0;
  40.         gucTask10msFlg = 1;
  41.     }
  42.     gucTask1000msCount++;
  43.     if(gucTask1000msCount >= 1000)
  44.     {
  45.         gucTask1000msCount = 0;
  46.         gucTask1000msFlg = 1;
  47.     }
  48. }

  49. #define DEBUG
  50. #ifdef DEBUG
  51. //#define BRT             (65536 - FOSC / 115200 / 4)
  52. #define BRT             (65536 - FOSC / 9600 / 4)
  53. bit busy;
  54. U8 digits[17] = "0123456789ABCDEF";
  55. void UartIsr() interrupt 4
  56. {
  57.         U8 u8Data = 0;
  58.     if (TI)
  59.     {
  60.         TI = 0;
  61.         busy = 0;
  62.     }
  63.     if (RI)
  64.     {
  65.         RI = 0;
  66.                 u8Data = SBUF;
  67.     }
  68. }

  69. void UartInit()
  70. {
  71.         #if 1
  72.         SCON |= 0x50;
  73.     T2L = BRT;
  74.     T2H = BRT >> 8;
  75.     AUXR |= 0x15;
  76.     busy = 0;
  77.         #else
  78.     SCON = 0x50;
  79.     TMOD = 0x00;
  80.     TL1 = BRT;
  81.     TH1 = BRT >> 8;
  82.     TR1 = 1;
  83.     AUXR = 0x40;
  84.     busy = 0;
  85.         #endif
  86. }

  87. void UartSend(char dat)
  88. {
  89.     while (busy);
  90.     busy = 1;
  91.     SBUF = dat;
  92. }

  93. void UartSendStr(char *p)
  94. {
  95.     while (*p)
  96.     {
  97.         UartSend(*p++);
  98.     }
  99. }

  100. void PutHEX(U8 c)
  101. {
  102.     UartSend(digits[(c>>4)&0x0f]);
  103.     UartSend(digits[c&0x0f]);

  104. }
  105. #endif

  106. //-----------------------------------------------
  107. #define N_KEY       0
  108. #define S_KEY_DOWN  1
  109. #define D_KEY       0x20//
  110. #define L_KEY_DOWN  0x40//
  111. #define L_KEY_UP    0x80//

  112. #define KEY_VALUE                0x01

  113. #define KEY_STATE_0 0
  114. #define KEY_STATE_1 1
  115. #define KEY_STATE_2 2
  116. #define KEY_STATE_3 3
  117. #define RESET        0
  118. #define SET                1

  119. U8 KEY_LOCK1(void)
  120. {
  121.         static U8 ucKeyState = KEY_STATE_0;
  122.         static U8 ucKeyTime = 0;
  123.         U8 ucKeyPress;
  124.         U8 ucKeyValue = N_KEY;
  125.         
  126.         if(KEY == RESET)
  127.         {
  128.                 ucKeyPress = 0;
  129.         }
  130.         else
  131.         {
  132.                 ucKeyPress = 1;
  133.         }
  134.         
  135.         switch (ucKeyState)
  136.         {
  137.                 case KEY_STATE_0:
  138.                 if (!ucKeyPress)
  139.                 {
  140.                         ucKeyState = KEY_STATE_1;
  141.                 }
  142.                 break;

  143.                 case KEY_STATE_1:
  144.                 if (!ucKeyPress)
  145.                 {
  146.                         ucKeyTime = 0;
  147.                         ucKeyState = KEY_STATE_2;
  148.                 }
  149.                 else
  150.                 {
  151.                         ucKeyState = KEY_STATE_0;
  152.                 }
  153.                 break;

  154.                 case KEY_STATE_2:
  155.                 if(ucKeyPress)
  156.                 {
  157.                         //ucKeyValue = KEY_VALUE_11;
  158.                         ucKeyState = KEY_STATE_0;
  159.                 }
  160.                 else if (++ucKeyTime >= 2)
  161.                 {
  162.                         ucKeyValue = KEY_VALUE;//ucKeyValue = KEY_VALUE_11|L_KEY_DOWN;
  163.                         ucKeyState = KEY_STATE_3;//ucKeyState = KEY_STATE_3;
  164.                 }
  165.                 break;

  166.                 case KEY_STATE_3:
  167.                 if (ucKeyPress)
  168.                 {
  169.                         //ucKeyValue = KEY_VALUE_11|L_KEY_UP;
  170.             ucKeyTime = 0;
  171.                         ucKeyState = KEY_STATE_0;
  172.                 }
  173.                 break;
  174.         }
  175.         
  176.         return ucKeyValue;
  177. }

  178. U8 KeyStatus1Tab[10] = {0x0E, 0x05, 0x03, 0x05, 0x09, 0x00, 0x03, 0x00, 0x03, 0x5A};
  179. U8 KeyStatus2Tab[10] = {0x0E, 0x00, 0x05, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x5A};
  180. U8 KeyStatus = 0;

  181. /* main program */
  182. void main()
  183. {
  184.     U8 i = 0;
  185.     U8 KeyValue = N_KEY;
  186.     P0M0 = 0x00;
  187.     P0M1 = 0x00;
  188.     P1M0 = 0x00;
  189.     P1M1 = 0x00;
  190.     P2M0 = 0x00;
  191.     P2M1 = 0x00;
  192.     P3M0 = 0x00;
  193.     P3M1 = 0x00;
  194.     P4M0 = 0x00;
  195.     P4M1 = 0x00;
  196.     P5M0 = 0x00;
  197.     P5M1 = 0x00;
  198.     P6M0 = 0x00;
  199.     P6M1 = 0x00;
  200.     P7M0 = 0x00;
  201.     P7M1 = 0x00;

  202.     AUXR |= 0x84;                   //定时器0为1T模式
  203.         //AUXR &= 0x7f;                   //定时器0为12T模式
  204.     TMOD = 0x00;                    //设置定时器为模式0(16位n自动重装载)
  205.     TL0 = T2MS_1T;                     //初始化计时值
  206.     TH0 = T2MS_1T >> 8;
  207.     TR0 = 1;                        //定时器0开始计时
  208.     ET0 = 1;                        //使能定时器0中断
  209.     #ifdef DEBUG
  210.         UartInit();
  211.         EA = 1;
  212.         ES = 1;
  213.     //UartSendStr("\r\n = = = = = = = = = = Date: 2021/05/03= = = = == = = = = ");
  214.     //UartSendStr("\r\n This Version is Support xx");
  215.         //PutHEX(0);
  216.         #else
  217.         EA = 1;
  218.         #endif

  219.     while (1)
  220.         {
  221.                 if(gucTask10msFlg)//10ms扫描一次按键
  222.         {
  223.             gucTask10msFlg = 0;
  224.             KeyValue = KEY_LOCK1();//按键扫描
  225.             if(KeyValue == KEY_VALUE)//获取到按键按下
  226.             {
  227.                 //UartSendStr("\r\n KEY DOWN");
  228.                 if(KeyStatus == 0)//发送键值1
  229.                 {
  230.                     for(i = 0; i < 10; i++)
  231.                     {
  232.                         UartSend(KeyStatus1Tab[i]);
  233.                     }
  234.                     KeyStatus = 1;
  235.                 }
  236.                 else                //发送键值2
  237.                 {
  238.                     for(i = 0; i < 10; i++)
  239.                     {
  240.                         UartSend(KeyStatus2Tab[i]);
  241.                     }
  242.                     KeyStatus = 0;
  243.                 }
  244.             }
  245.         }
  246.         if(gucTask1000msFlg)//1000ms轮询一次
  247.         {
  248.             gucTask1000msFlg = 0;
  249.         }
  250.         }
  251. }
复制代码

3.png (18.17 KB, 下载次数: 118)

3.png

51hei图片20210906102802.png (44.19 KB, 下载次数: 107)

51hei图片20210906102802.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

来自 3#
ID:161164 发表于 2021-9-6 13:35 | 只看该作者
这里会出警告,根本不能发送F8 80 XX XX51hei图片20210906102802.png






代码写着系统频率是22.1184MHz, 实际上用的是11.0592MHz 3.png
                       
       
                                                        
回复

使用道具 举报

沙发
ID:827243 发表于 2021-9-6 12:11 | 只看该作者
程序说明里波特率是115200,你串口助手怎么是9600呢?
回复

使用道具 举报

地板
ID:94031 发表于 2021-9-6 15:53 | 只看该作者
用4800波特率试试。
回复

使用道具 举报

5#
ID:845166 发表于 2021-9-6 19:17 | 只看该作者
lkc8210 发表于 2021-9-6 13:35
这里会出警告,根本不能发送F8 80 XX XX51hei图片20210906102802.png

嗯。是没有调频率,谢谢
回复

使用道具 举报

6#
ID:958455 发表于 2021-9-6 19:47 | 只看该作者
波特率没调,修改下波特率试试
回复

使用道具 举报

7#
ID:94031 发表于 2021-9-7 10:23 | 只看该作者
下载前要设置好 用户运行频率


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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