欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: STC8A8K64S4A12單片機(jī)寄存器T24M_ADDR和T22M1184_ADDR如何讀取? [打印本頁]

作者: michaelchain    時(shí)間: 2021-11-8 22:11
標(biāo)題: STC8A8K64S4A12單片機(jī)寄存器T24M_ADDR和T22M1184_ADDR如何讀取?
根據(jù)手冊上寫的地址去讀, 讀出來都是FF




根據(jù)STC-ISP的提示, 勾選了"在程序區(qū)結(jié)束處添加重要測試參數(shù)", 再下載, 再讀這些地址的值, 還是FF



手冊里給的地址不對?

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

作者: 188610329    時(shí)間: 2021-11-9 00:09
讀過,正好前面再做實(shí)驗(yàn),用的又剛好是 8A8K 就順便再讀了一次。

如圖:


作者: 正是河豚    時(shí)間: 2021-11-9 10:55
在STCISP軟件中,可嘗試選擇Flash空白區(qū)域的填充值為00
作者: michaelchain    時(shí)間: 2021-11-9 11:19
多謝回復(fù). 我又試了一遍, 好像還是不行, 奇怪是我的代碼不對, 還是下載的配置不對? 還是這個(gè)芯片版本的差異?
下載配置能否往下拉一點(diǎn)截個(gè)屏看看完整的? 還有芯片版本是多少? 我這個(gè)是7.3.12U, 這個(gè)是比較近期的版本

測試代碼
  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]: 外設(shè)端口切換寄存器2
  8.     P_SW2      = 0x80;
  9.     // [  D6H,0,0x00]: 定時(shí)器2高字節(jié)
  10.     T2H        = 0xFF;
  11.     // [  D7H,0,0x00]: 定時(shí)器2低字節(jié)
  12.     T2L        = 0xD0;
  13.     // [  BAH,0,0x00]: 外設(shè)端口切換寄存器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;   //設(shè)置為準(zhǔn)雙向口
  73.   P1M1 = 0x00;   P1M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  74.   P2M1 = 0x00;   P2M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  75.   P3M1 = 0x00;   P3M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  76.   P4M1 = 0x00;   P4M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  77.   P5M1 = 0x00;   P5M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  78.   P6M1 = 0x00;   P6M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
  79.   P7M1 = 0x00;   P7M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口

  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. }
復(fù)制代碼

燒錄的日志

  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)
復(fù)制代碼

輸出: 這里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
復(fù)制代碼




作者: michaelchain    時(shí)間: 2021-11-9 11:45
我用這個(gè)測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時(shí)候, 測了下必須要勾選那個(gè)"在程序區(qū)結(jié)束處添加重要測試參數(shù)", 不然只有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.   
復(fù)制代碼
"在程序區(qū)結(jié)束處添加重要測試參數(shù)" 不勾選和勾選的區(qū)別



作者: 188610329    時(shí)間: 2021-11-9 13:45
michaelchain 發(fā)表于 2021-11-9 11:45
我用這個(gè)測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時(shí)候, 測了下必須要勾選那個(gè)"在程序區(qū)結(jié) ...

#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;
       
        }

}
作者: 188610329    時(shí)間: 2021-11-9 14:59
michaelchain 發(fā)表于 2021-11-9 11:45
我用這個(gè)測試代碼讀出來了, 得查查是哪里的差異. 在ISP軟件里下載的時(shí)候, 測了下必須要勾選那個(gè)"在程序區(qū)結(jié) ...

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


接收用 文本方式, 發(fā)送用 16進(jìn)制 發(fā)送地址高8位會返回整個(gè) 256 字節(jié)(半個(gè)扇區(qū))的內(nèi)容。
晶振和波特率,我用的22.1184 和 460800, 你可以自行修改定義。


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



作者: michaelchain    時(shí)間: 2021-11-9 15:38
多謝, 我找到是什么問題了. 這個(gè)地址應(yīng)該從code區(qū)讀取, 而不是從xdata, 之前代碼寫得不對
另外, stc8a8k64s4 在ISP下載時(shí)會修改CLKDIV, 這個(gè)要在代碼里指定為0, 不然只調(diào)IRTRIM無效




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