1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標(biāo)題: 關(guān)于STC單片機(jī)串口下載代碼長度的問題 [打印本頁]

作者: qwc    時(shí)間: 2019-10-23 08:50
標(biāo)題: 關(guān)于STC單片機(jī)串口下載代碼長度的問題
寫了一個(gè)數(shù)碼管顯示的程序,用STC串口下載程序,第一次下載的代碼長度為2C53H,稍作修改后,第二次下載的代碼長度為2BEBH<2C53H,出現(xiàn)部分?jǐn)?shù)碼管位不能顯示的情況,猜測可能出現(xiàn)代碼儲存覆蓋情況,有同行遇到過這種情況的嗎?怎么處理呢?

作者: csmyldl    時(shí)間: 2019-10-23 11:13
不會出現(xiàn)這種情況,應(yīng)該還是程序修改后的問題
作者: wulin    時(shí)間: 2019-10-23 11:17
不是代碼超長問題,如果代碼超長STC-ISP會提示 “文件大小超出范圍,超出部分已被自動截取” 。把你的MCU型號和代碼貼上來幫你看看。
作者: 噗噗噗p    時(shí)間: 2019-10-23 14:02
應(yīng)該不會是代碼超長的問題,可以再檢查一下修改后的代碼,或者貼上來幫你看看
作者: qwc    時(shí)間: 2019-10-23 14:47
wulin 發(fā)表于 2019-10-23 11:17
不是代碼超長問題,如果代碼超長STC-ISP會提示 “文件大小超出范圍,超出部分已被自動截取” 。把你的MCU型 ...

兩個(gè)程序文件A和B,A的代碼長度>B的代碼長度,只要燒錄過A的板子,A的程序都能使數(shù)碼管正常顯示,但再燒錄B,B就不能數(shù)碼管正常顯示了;但如果沒有燒錄過A的板子,B的程序都能使數(shù)碼管正常顯示。下面是對STC90C58RD+的EEPROM程序,看看有沒有可能哪一步導(dǎo)致了這種情況
作者: qwc    時(shí)間: 2019-10-23 14:48


  1. #include "eeprom.h"
  2. /*
  3. stc90c58rd+
  4. 29K
  5. 58扇區(qū)
  6. 0x8000 - 0xF3FF
  7. 0x200/扇區(qū)(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. 函數(shù)功能: 禁用ISP / IAP / eepm功能
  21. 輸入?yún)?shù):
  22. 輸出參數(shù):
  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. 函數(shù)功能: 從ISP / IAP / eepm區(qū)域讀一個(gè)字節(jié)
  35. 輸入?yún)?shù):
  36. 輸出參數(shù):
  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. 函數(shù)功能: 向EEPROM寫入1unsigned char數(shù)據(jù)
  66. 輸入?yún)?shù):
  67. 輸出參數(shù):
  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. 函數(shù)功能: 擦除一個(gè)扇區(qū)數(shù)據(jù)
  85. 輸入?yún)?shù):
  86. 輸出參數(shù):
  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. }
復(fù)制代碼

作者: wulin    時(shí)間: 2019-10-23 18:07
qwc 發(fā)表于 2019-10-23 14:48

STC90C58RD+的用戶程序區(qū)最大可以保存32712字節(jié),你的程序才11347字節(jié),不可能超出。可能問題出在EEPROM存儲區(qū)。建議下載時(shí)勾選“下次下載用戶程序時(shí)擦除用戶EEPRO區(qū)”試試。







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1