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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2086|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品成人综合久久久 | 国产精品久久久久国产a级 欧美日韩国产免费 | 91看片在线| 亚洲午夜精品久久久久久app | 国产九九精品 | 欧美亚洲国产日韩 | 国产精品一区二区免费 | 日本偷偷操 | 国产成人精品午夜视频免费 | 久久人体视频 | 日韩aⅴ在线观看 | 国产伦精品一区二区三区在线 | 国产精品一区二区欧美黑人喷潮水 | 欧美h | 亚洲精品在线国产 | 成人日韩 | 日韩在线观看中文字幕 | 久久精彩| 国产精品视频久久久久久 | 欧美成人精品二区三区99精品 | 国产91在线 | 中日 | 欧洲一区二区在线 | 久在线 | 亚洲欧美日韩一区二区 | 成人自拍视频网站 | 国产在视频一区二区三区吞精 | 一区二区三区不卡视频 | 久久九精品 | 黄色一级片在线播放 | 欧美在线亚洲 | 能免费看的av | 二区国产| 超碰97免费观看 | 久久99精品视频 | 91精品国产乱码久久久 | 久久久久国产 | 日本涩涩视频 | 久久久九九九九 | 日韩av啪啪网站大全免费观看 | www.国产 | 国产精品久久一区 |