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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2278|回復: 7
收起左側

STC8A8K64S4A12單片機寄存器T24M_ADDR和T22M1184_ADDR如何讀取?

[復制鏈接]
ID:912806 發表于 2021-11-8 22:11 | 顯示全部樓層 |閱讀模式
根據手冊上寫的地址去讀, 讀出來都是FF

2021-11-08_220732.png


根據STC-ISP的提示, 勾選了"在程序區結束處添加重要測試參數", 再下載, 再讀這些地址的值, 還是FF
2021-11-08_220927.png


手冊里給的地址不對?

有沒有誰成功讀過這兩個值的? 我想在程序里直接切換到對應的頻率, 而不是通過ISP燒錄去更新
回復

使用道具 舉報

ID:624769 發表于 2021-11-9 00:09 | 顯示全部樓層
讀過,正好前面再做實驗,用的又剛好是 8A8K 就順便再讀了一次。

如圖:
ReadCode.png
回復

使用道具 舉報

ID:863432 發表于 2021-11-9 10:55 | 顯示全部樓層
在STCISP軟件中,可嘗試選擇Flash空白區域的填充值為00
回復

使用道具 舉報

ID:912806 發表于 2021-11-9 11:19 | 顯示全部樓層
多謝回復. 我又試了一遍, 好像還是不行, 奇怪是我的代碼不對, 還是下載的配置不對? 還是這個芯片版本的差異?
下載配置能否往下拉一點截個屏看看完整的? 還有芯片版本是多少? 我這個是7.3.12U, 這個是比較近期的版本

測試代碼
  1. #include "stc8.h"

  2. typedef     unsigned char   u8;
  3. typedef     unsigned int    u16;

  4. static const char hexTable[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

  5. void timer_init()
  6. {
  7.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  8.     P_SW2      = 0x80;
  9.     // [  D6H,0,0x00]: 定時器2高字節
  10.     T2H        = 0xFF;
  11.     // [  D7H,0,0x00]: 定時器2低字節
  12.     T2L        = 0xD0;
  13.     // [  BAH,0,0x00]: 外設端口切換寄存器2
  14.     P_SW2      = 0x00;
  15.     // [  87H,0,0x30]: 電源控制寄存器
  16.     PCON       = 0xB0;
  17.     // [  8EH,0,0x01]: 輔助寄存器
  18.     AUXR       = 0x15;
  19. }

  20. void uart_init()
  21. {
  22.     // [  98H,0,0x00]: 串口1控制寄存器
  23.     SCON       = 0x50;
  24.     // [  87H,0,0x30]: 電源控制寄存器
  25.     PCON       = 0xB0;
  26.     // [  8EH,0,0x01]: 輔助寄存器
  27.     AUXR       = 0x15;
  28. }


  29. void PrintString(u8 *str)
  30. {
  31.   while (*str != '\0')
  32.   {
  33.     SBUF = *str;
  34.     while(!TI);
  35.     TI = 0;     /* clear */
  36.     str++;
  37.   }
  38. }

  39. void PrintChar(u8 dat)
  40. {
  41.   SBUF = dat;
  42.   while(!TI);
  43.   TI = 0;
  44. }

  45. void PrintHex(u8 hex)
  46. {
  47.     PrintChar(hexTable[hex >> 4]);
  48.     PrintChar(hexTable[hex & 0xF]);
  49. }

  50. void Delay1000ms()                //@22.1184MHz
  51. {
  52.         unsigned char i, j, k;

  53.         i = 113;
  54.         j = 53;
  55.         k = 228;
  56.         do
  57.         {
  58.                 do
  59.                 {
  60.                         while (--k);
  61.                 } while (--j);
  62.         } while (--i);
  63. }

  64. void main(void)
  65. {
  66.   unsigned char i, t1, t2, t3, t4;
  67.   unsigned int pos;
  68.   t1 = (char code *)0xFDF3;
  69.   t2 = (char code *)0xFDF4;
  70.   t3 = (char code *)0xFDF5;
  71.   t4 = (char code *)0xFDF7;

  72.   P0M1 = 0x00;   P0M0 = 0x00;   //設置為準雙向口
  73.   P1M1 = 0x00;   P1M0 = 0x00;   //設置為準雙向口
  74.   P2M1 = 0x00;   P2M0 = 0x00;   //設置為準雙向口
  75.   P3M1 = 0x00;   P3M0 = 0x00;   //設置為準雙向口
  76.   P4M1 = 0x00;   P4M0 = 0x00;   //設置為準雙向口
  77.   P5M1 = 0x00;   P5M0 = 0x00;   //設置為準雙向口
  78.   P6M1 = 0x00;   P6M0 = 0x00;   //設置為準雙向口
  79.   P7M1 = 0x00;   P7M0 = 0x00;   //設置為準雙向口

  80.   timer_init();
  81.   uart_init();

  82.   while(1)
  83.   {
  84.     PrintHex(IRTRIM);
  85.     PrintChar(0x20);
  86.     PrintHex(t1);
  87.     PrintChar(0x20);
  88.     PrintHex(t2);
  89.     PrintChar(0x20);
  90.     PrintHex(t3);
  91.     PrintChar(0x20);
  92.     PrintHex(t4);
  93.     PrintChar(0x20);

  94.     pos = 0xFDF3;
  95.     for(i = 0; i < 13; i++)
  96.     {
  97.       PrintHex((char code *)pos);
  98.       pos++;
  99.     }
  100.     PrintChar(0x20);
  101.     PrintString("\r\n");
  102.     Delay1000ms();
  103.   }
  104. }
復制代碼

燒錄的日志

  1. Current H/W Option:
  2.   . ISP-IRC frequency: 24.110MHz
  3.   . IRC frequency: 22.124MHz
  4.   . Wakeup Timer frequency: 34.250KHz
  5.   . Oscillator gain is HIGH
  6.   . Do not detect the level of P3.2 and P3.3 next download
  7.   . Power-on reset, use the extra power-on delay
  8.   . RESET pin behaves as IO pin
  9.   . Reset while detect a Low-Voltage
  10.   . Thresh voltage level of the built-in LVD : 2.20 V
  11.   . Hardware do not enable Watch-Dog-Timer
  12.   . Watch-Dog-Timer pre-scalar : 256
  13.   . Watch-Dog-Timer stop count in idle mode
  14.   . Program can modify the Watch-Dog-Timer scalar
  15.   . Erase user EEPROM area at next download
  16.   . Do not control 485 at next download
  17.   . Do not check user password next download
  18.   . TXD is independent IO
  19.   . TXD pin as quasi-bidirectional mode after reset
  20.   . P2.0 output HIGH level after reset
  21.   . Reference voltage: 1341 mV (Range: 1270~1410mV)
  22.   . Testing time: 2021-4-23

  23.   MCU type: STC8A8K64S4A12
  24.   F/W version: 7.3.12U

  25. Adjusting frequency ...                        [0.688"]
  26. Adjusted frequency: 22.124MHz (0.027%)

  27. Re-handshaking ... Successful                        [0.125"]
  28. Current Baudrate: 115200
  29. Erasing MCU flash ...  OK !                [1.266"]
  30. MCU ID : F628C57D0BC117
  31. Programming user code ... OK !                [0.156"]
  32. Programming OPTIONS ... OK !                [0.032"]

  33. H/W Option upgrade to:
  34.   . ISP-IRC frequency: 24.110MHz
  35.   . IRC frequency: 22.124MHz
  36.   . Wakeup Timer frequency: 34.250KHz
  37.   . Oscillator gain is HIGH
  38.   . Do not detect the level of P3.2 and P3.3 next download
  39.   . Power-on reset, use the extra power-on delay
  40.   . RESET pin behaves as IO pin
  41.   . Reset while detect a Low-Voltage
  42.   . Thresh voltage level of the built-in LVD : 2.20 V
  43.   . Hardware do not enable Watch-Dog-Timer
  44.   . Watch-Dog-Timer pre-scalar : 256
  45.   . Watch-Dog-Timer stop count in idle mode
  46.   . Program can modify the Watch-Dog-Timer scalar
  47.   . Erase user EEPROM area at next download
  48.   . Do not control 485 at next download
  49.   . Do not check user password next download
  50.   . TXD is independent IO
  51.   . TXD pin as quasi-bidirectional mode after reset
  52.   . P2.0 output HIGH level after reset
  53.   . Reference voltage: 1341 mV (Range: 1270~1410mV)
  54.   . Testing time: 2021-4-23
  55. MCU ID : F628C57D0BC117

  56.   MCU type: STC8A8K64S4A12
  57.   F/W version: 7.3.12U

  58.   . Set frequency: 22.118MHz
  59.   . Adjusted frequency: 22.124MHz
  60.   . Trim error: 0.027%


  61.   Complete !(2021-11-09 11:10:00)
復制代碼

輸出: 這里5B是從IRTRIM里讀取的正確的值, 后面輸出的都有問題

  1. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
  2. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
  3. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
  4. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
  5. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
  6. 5B F3 F4 F5 F7 F3F4F5F6F7F8F9FAFBFCFDFEFF
復制代碼



回復

使用道具 舉報

ID:912806 發表于 2021-11-9 11:45 | 顯示全部樓層
我用這個測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時候, 測了下必須要勾選那個"在程序區結束處添加重要測試參數", 不然只有CPUID有值, 前面部分都是FF
  1. #include "stc8.h"
  2. #include "intrins.h"

  3. #define        FOSC        11059200UL
  4. #define        BRT        (65536 - FOSC / 115200 / 4)


  5. bit        busy;
  6. char        *ID;

  7. void UartIsr() interrupt 4
  8. {
  9.         if (TI)
  10.         {
  11.                 TI = 0;
  12.                 busy = 0;
  13.         }
  14.         if (RI)
  15.         {
  16.                 RI = 0;
  17.         }
  18. }

  19. void UartInit()
  20. {
  21.         SCON = 0x50;
  22.         TMOD = 0x00;
  23.         TL1 = BRT;
  24.         TH1 = BRT >> 8;
  25.         TR1 = 1;
  26.         AUXR = 0x40;
  27.         busy = 0;
  28. }

  29. void UartSend(char dat)
  30. {
  31.         while (busy);
  32.         busy = 1;
  33.         SBUF = dat;
  34. }

  35. void Delay1000ms()                //@22.1184MHz
  36. {
  37.         unsigned char i, j, k;

  38.         i = 55;
  39.         j = 53;
  40.         k = 228;
  41.         do
  42.         {
  43.                 do
  44.                 {
  45.                         while (--k);
  46.                 } while (--j);
  47.         } while (--i);
  48. }

  49. void main()
  50. {
  51.   char i;

  52.   ID = (char code *)0xfdf3;        // STC8A8K64S4A10

  53.   UartInit();
  54.   ES = 1;
  55.   EA = 1;
  56.   while(1)
  57.   {
  58.     for (i = 0; i < 13; i++)
  59.     {
  60.       UartSend(ID[i]);
  61.     }
  62.     UartSend(0x00);
  63.     UartSend(0x00);
  64.     Delay1000ms();
  65.   }
  66. }
  67.   
復制代碼
"在程序區結束處添加重要測試參數" 不勾選和勾選的區別
2021-11-09_114444.png

回復

使用道具 舉報

ID:624769 發表于 2021-11-9 13:45 | 顯示全部樓層
michaelchain 發表于 2021-11-9 11:45
我用這個測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時候, 測了下必須要勾選那個"在程序區結 ...

#include <STC\STC8.H>

#define        MainForce        22118400UL
#define        Baud                (65536 - MainForce/460800/4)

bit        busy;
char        Temp;

char   ReadCode(int addr)
{
        return        *(char code *)(addr);
}

void UartInit()
{
        SCON = 0x50;
        TMOD         = 0x00;
        TL1        = Baud;
        TH1        = Baud >> 8;
        TR1        = 1;
        AUXR        = 0x40;
        busy        = 0;
}

void        UartSend(char dat)
{
        while(busy);
        busy        = 1;
        SBUF        = dat;
}

void main()
{
        Temp        = ReadCode(0xFDf3);
        UartInit();
        ES = 1;
        EA = 1;
        UartSend(Temp);
        while(1);
}

void        UartIsr()        interrupt 4
{
        if(TI)
        {
                TI = 0;
                busy = 0;
        }
        if(RI)
        {
                RI = 0;
       
        }

}
回復

使用道具 舉報

ID:624769 發表于 2021-11-9 14:59 | 顯示全部樓層
michaelchain 發表于 2021-11-9 11:45
我用這個測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時候, 測了下必須要勾選那個"在程序區結 ...

給你一個 可以讀 全部Flash 的, 你自己讀看看吧。

Read_OnChip_Flash.png
接收用 文本方式, 發送用 16進制 發送地址高8位會返回整個 256 字節(半個扇區)的內容。
晶振和波特率,我用的22.1184 和 460800, 你可以自行修改定義。


Read_OnChip_Flash.rar (24.63 KB, 下載次數: 2)


回復

使用道具 舉報

ID:912806 發表于 2021-11-9 15:38 | 顯示全部樓層
多謝, 我找到是什么問題了. 這個地址應該從code區讀取, 而不是從xdata, 之前代碼寫得不對
另外, stc8a8k64s4 在ISP下載時會修改CLKDIV, 這個要在代碼里指定為0, 不然只調IRTRIM無效
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品99久久久久久久久久久久 | 毛片一级片 | 亚洲精品视频免费观看 | 欧洲一级黄 | 天天色天天 | 麻豆精品国产91久久久久久 | 国产精品免费一区二区三区四区 | 91毛片在线看 | 亚洲视频在线看 | 免费在线视频精品 | 欧美成视频 | 91免费观看在线 | 中文字幕亚洲一区二区三区 | 91av在线不卡 | 久久小视频 | 成人免费视频网站 | 欧美一级片免费看 | 国产日韩精品在线 | 精品国产乱码久久久久久图片 | 成人18亚洲xxoo | 成年人在线视频 | 色综合99| 亚欧洲精品在线视频免费观看 | 国产日产精品一区二区三区四区 | 亚洲精品福利视频 | 黄色日本片 | 久久9视频 | 一区二区免费在线观看 | 九色国产 | 久热中文字幕 | 九九视频在线观看 | 亚洲精品18 | 国产精品一区二区在线 | 久久岛国 | 精品国产一区二区在线 | 资源首页二三区 | 国产成人精品免费视频大全最热 | www.中文字幕 | 亚洲欧美bt | 天天影视网天天综合色在线播放 | 爱高潮www亚洲精品 中文字幕免费视频 |