久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2539|回復: 6
收起左側

關于STC單片機串口下載代碼長度的問題

[復制鏈接]
ID:87042 發表于 2019-10-23 08:50 | 顯示全部樓層 |閱讀模式
寫了一個數碼管顯示的程序,用STC串口下載程序,第一次下載的代碼長度為2C53H,稍作修改后,第二次下載的代碼長度為2BEBH<2C53H,出現部分數碼管位不能顯示的情況,猜測可能出現代碼儲存覆蓋情況,有同行遇到過這種情況的嗎?怎么處理呢?
回復

使用道具 舉報

ID:235200 發表于 2019-10-23 11:13 | 顯示全部樓層
不會出現這種情況,應該還是程序修改后的問題
回復

使用道具 舉報

ID:213173 發表于 2019-10-23 11:17 | 顯示全部樓層
不是代碼超長問題,如果代碼超長STC-ISP會提示 “文件大小超出范圍,超出部分已被自動截取” 。把你的MCU型號和代碼貼上來幫你看看。
回復

使用道具 舉報

ID:411550 發表于 2019-10-23 14:02 | 顯示全部樓層
應該不會是代碼超長的問題,可以再檢查一下修改后的代碼,或者貼上來幫你看看
回復

使用道具 舉報

ID:87042 發表于 2019-10-23 14:47 | 顯示全部樓層
wulin 發表于 2019-10-23 11:17
不是代碼超長問題,如果代碼超長STC-ISP會提示 “文件大小超出范圍,超出部分已被自動截取” 。把你的MCU型 ...

兩個程序文件A和B,A的代碼長度>B的代碼長度,只要燒錄過A的板子,A的程序都能使數碼管正常顯示,但再燒錄B,B就不能數碼管正常顯示了;但如果沒有燒錄過A的板子,B的程序都能使數碼管正常顯示。下面是對STC90C58RD+的EEPROM程序,看看有沒有可能哪一步導致了這種情況
回復

使用道具 舉報

ID:87042 發表于 2019-10-23 14:48 | 顯示全部樓層


  1. #include "eeprom.h"
  2. /*
  3. stc90c58rd+
  4. 29K
  5. 58扇區
  6. 0x8000 - 0xF3FF
  7. 0x200/扇區(512Byte)
  8. */


  9. /*Define ISP/IAP/EEPROM command*/
  10. #define CMD_IDLE    0               //Stand-By
  11. #define CMD_READ    1               //unsigned char-Read
  12. #define CMD_PROGRAM 2               //unsigned char-Program
  13. #define CMD_ERASE   3               //Sector-Erase

  14. #define ENABLE_IAP 0x80           //if SYSCLK<40MHz

  15. void IapIdle();
  16. unsigned char IapReadByte(unsigned int addr);
  17. void IapProgramByte(unsigned int addr, unsigned char dat);
  18. void IapEraseSector(unsigned int addr);

  19. /********************************************************
  20. 函數功能: 禁用ISP / IAP / eepm功能
  21. 輸入參數:
  22. 輸出參數:
  23. 說    明:
  24. *********************************************************/
  25. void IapIdle()
  26. {
  27.     ISP_CONTR = 0;                 
  28.     ISP_CMD = 0;                    
  29.     ISP_TRIG = 0;                  
  30.     ISP_ADDRH = 0x80;               
  31.     ISP_ADDRL = 0;                 
  32. }

  33. /********************************************************
  34. 函數功能: 從ISP / IAP / eepm區域讀一個字節
  35. 輸入參數:
  36. 輸出參數:
  37. 說    明:
  38. *********************************************************/
  39. unsigned char IapReadByte(unsigned int addr)
  40. {
  41.     unsigned char dat;                     

  42.     ISP_CONTR = ENABLE_IAP;  
  43.     ISP_CMD = 0xF8;      
  44.     ISP_CMD = CMD_READ;            
  45.     ISP_ADDRL = addr;              
  46.     ISP_ADDRH = addr >> 8;               
  47.     ISP_TRIG = 0x46;               
  48.     ISP_TRIG = 0xb9;         
  49.     _nop_();                        
  50.     dat = ISP_DATA;                 
  51.     IapIdle();                    

  52.     return dat;   
  53.        
  54. }
  55. /*
  56. void IAPReadNByte(unsigned int Add,unsigned char *pDat,unsigned char n)
  57. {
  58.         while(n--)
  59.         {
  60.                 *pDat++ = IapReadByte(Add++);
  61.         }
  62. }
  63. */
  64. /********************************************************
  65. 函數功能: 向EEPROM寫入1unsigned char數據
  66. 輸入參數:
  67. 輸出參數:
  68. 說    明:
  69. *********************************************************/
  70. void IapProgramByte(unsigned int addr, unsigned char dat)
  71. {
  72.     ISP_CONTR = ENABLE_IAP;  
  73.     ISP_CMD = 0xF8;      
  74.     ISP_CMD = CMD_PROGRAM;         
  75.     ISP_ADDRL = addr;              
  76.     ISP_ADDRH = addr >> 8;         
  77.     ISP_DATA = dat;               
  78.     ISP_TRIG = 0x46;               
  79.     ISP_TRIG = 0xb9;               
  80.     _nop_();_nop_();_nop_();                       
  81.     IapIdle();
  82. }

  83. /********************************************************
  84. 函數功能: 擦除一個扇區數據
  85. 輸入參數:
  86. 輸出參數:
  87. 說    明:
  88. *********************************************************/
  89. void IapEraseSector(unsigned int addr)
  90. {
  91.     ISP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
  92.     ISP_CMD = 0xF8;
  93.     ISP_CMD = CMD_ERASE;            //Set ISP/IAP/EEPROM ERASE command
  94.     ISP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
  95.     ISP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high            
  96.     ISP_TRIG = 0x46;               
  97.     ISP_TRIG = 0xb9;  
  98.     _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
  99.     IapIdle();
  100. }
復制代碼
回復

使用道具 舉報

ID:213173 發表于 2019-10-23 18:07 | 顯示全部樓層

STC90C58RD+的用戶程序區最大可以保存32712字節,你的程序才11347字節,不可能超出。可能問題出在EEPROM存儲區。建議下載時勾選“下次下載用戶程序時擦除用戶EEPRO區”試試。
無標題.jpg

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久一区 | 久久亚洲国产精品日日av夜夜 | 亚洲毛片网站 | 午夜视频在线观看一区二区 | 一级在线 | 国产精品久久久久国产a级 欧美日韩国产免费 | 亚洲欧美精品在线观看 | 日本久久黄色 | 一级h片 | 国产在线视频在线观看 | 欧美专区在线 | 久久草在线视频 | 欧美专区日韩 | 性高湖久久久久久久久3小时 | 99福利视频导航 | 国产成人免费视频网站高清观看视频 | 欧洲亚洲一区二区三区 | 欧美国产精品一区二区三区 | 国产精品久久久久久一级毛片 | 三级成人片 | 久久国产精品免费一区二区三区 | 在线天堂免费中文字幕视频 | 国产精品美女久久久久久免费 | 久久久国产一区二区三区 | 久久久久精 | av日韩精品 | 99国产精品99久久久久久 | 99精品国产一区二区三区 | 久久久久久黄 | 日韩中文在线视频 | 亚洲性视频网站 | 成人av观看 | 天天草天天操 | 亚洲国产一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 亚洲 欧美 另类 日韩 | 亚洲一区二区中文字幕 | 国产ts一区 | 国产精品久久国产精品久久 | 欧美精品第一区 | 国内精品一区二区三区 |