多谢, 我找到是什么问题了. 这个地址应该从code区读取, 而不是从xdata, 之前代码写得不对 另外, stc8a8k64s4 在ISP下载时会修改CLKDIV, 这个要在代码里指定为0, 不然只调IRTRIM无效 |
michaelchain 发表于 2021-11-9 11:45 给你一个 可以读 全部Flash 的, 你自己读看看吧。 ![]() 接收用 文本方式, 发送用 16进制 发送地址高8位会返回整个 256 字节(半个扇区)的内容。 晶振和波特率,我用的22.1184 和 460800, 你可以自行修改定义。 ![]() |
michaelchain 发表于 2021-11-9 11:45 #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; } } |
多谢回复. 我又试了一遍, 好像还是不行, 奇怪是我的代码不对, 还是下载的配置不对? 还是这个芯片版本的差异? 下载配置能否往下拉一点截个屏看看完整的? 还有芯片版本是多少? 我这个是7.3.12U, 这个是比较近期的版本 测试代码
烧录的日志
输出: 这里5B是从IRTRIM里读取的正确的值, 后面输出的都有问题
|
在STCISP软件中,可尝试选择Flash空白区域的填充值为00 |
读过,正好前面再做实验,用的又刚好是 8A8K 就顺便再读了一次。 如图: ![]() |