找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2435|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

我寫的單片機(jī)程序是哪里錯(cuò)?刷機(jī)進(jìn)單片機(jī)的16進(jìn)制不對(duì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
麻煩各位大神幫我看看
stc-isp發(fā)布的項(xiàng)目程序后刷機(jī)進(jìn)單片機(jī)的16進(jìn)制不對(duì), 要發(fā)送的
0x0E, 0x05, 0x03, 0x05, 0x09, 0x00, 0x03, 0x00, 0x03, 0x5A                                                                                                   0x0E, 0x00, 0x05, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x5A
單片機(jī)源程序如下:
  1. //本示例在Keil開(kāi)發(fā)環(huán)境下請(qǐng)選擇Intel的8058芯片型號(hào)進(jìn)行編譯
  2. //若無(wú)特別說(shuō)明,工作頻率一般為22118400Hz,串口波特率使用定時(shí)器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        次數(shù)        重載值
  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;                     //初始化計(jì)時(shí)值
  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;                   //定時(shí)器0為1T模式
  203.         //AUXR &= 0x7f;                   //定時(shí)器0為12T模式
  204.     TMOD = 0x00;                    //設(shè)置定時(shí)器為模式0(16位n自動(dòng)重裝載)
  205.     TL0 = T2MS_1T;                     //初始化計(jì)時(shí)值
  206.     TH0 = T2MS_1T >> 8;
  207.     TR0 = 1;                        //定時(shí)器0開(kāi)始計(jì)時(shí)
  208.     ET0 = 1;                        //使能定時(shí)器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)//發(fā)送鍵值1
  229.                 {
  230.                     for(i = 0; i < 10; i++)
  231.                     {
  232.                         UartSend(KeyStatus1Tab[i]);
  233.                     }
  234.                     KeyStatus = 1;
  235.                 }
  236.                 else                //發(fā)送鍵值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. }
復(fù)制代碼

3.png (18.17 KB, 下載次數(shù): 147)

3.png

51hei圖片20210906102802.png (44.19 KB, 下載次數(shù): 128)

51hei圖片20210906102802.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

來(lái)自 3#
ID:161164 發(fā)表于 2021-9-6 13:35 | 只看該作者
這里會(huì)出警告,根本不能發(fā)送F8 80 XX XX51hei圖片20210906102802.png






代碼寫著系統(tǒng)頻率是22.1184MHz, 實(shí)際上用的是11.0592MHz 3.png
                       
       
                                                        
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:827243 發(fā)表于 2021-9-6 12:11 | 只看該作者
程序說(shuō)明里波特率是115200,你串口助手怎么是9600呢?
回復(fù)

使用道具 舉報(bào)

地板
ID:94031 發(fā)表于 2021-9-6 15:53 | 只看該作者
用4800波特率試試。
回復(fù)

使用道具 舉報(bào)

5#
ID:845166 發(fā)表于 2021-9-6 19:17 | 只看該作者
lkc8210 發(fā)表于 2021-9-6 13:35
這里會(huì)出警告,根本不能發(fā)送F8 80 XX XX51hei圖片20210906102802.png

嗯。是沒(méi)有調(diào)頻率,謝謝
回復(fù)

使用道具 舉報(bào)

6#
ID:958455 發(fā)表于 2021-9-6 19:47 | 只看該作者
波特率沒(méi)調(diào),修改下波特率試試
回復(fù)

使用道具 舉報(bào)

7#
ID:94031 發(fā)表于 2021-9-7 10:23 | 只看該作者
下載前要設(shè)置好 用戶運(yùn)行頻率


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表