xxkj2010 发表于 2023-1-15 18:57:12

用三种不同的方式读取唯一的ID,怎么只有第一种方式正常

近日,本人使用STC-ISP工具中的范例,用三种不同的方式读取单片机唯一的ID,怎么只有第一种方式正常,其他两种方式,读出来要么都是00,要么就是ff,不知道是什么原因。


电子DIY小家 发表于 2023-1-16 09:26:01




楼主仔细看手册哦,大大的红字标注了。

神农鼎 发表于 2023-1-16 09:42:18

用户新系统设计,尽量选择有CHIP-ID这个功能的芯片,用户自己软加密更强悍

康辉55AA 发表于 2023-1-16 15:03:16

通过观看冲大侠的讲座,发现一个很有用的规律——遇到问题首先去找厂家相关芯片的最新版技术手册,手册支持搜索功能,很方便。

乐此不疲 发表于 2024-1-23 19:00:25

每次翻贴都能解疑答惑得到收获,前段时间想读掉电唤醒定时器时钟频率,搞了好久没能成功今天在这里找到了答案再试就成功了,膜拜!


只是不知道什么原因、烧录代码后打开串口助手收不到数据,改成循环发送就好了。
使用官网例程,主函数中添加加了两句代码转贴这里方便大家测试:
//程序为STC官网例程
//本芯片读出内部掉电时钟频率:8C 6E
#include "stc8h.h"
#include "intrins.h"

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

#define CPUIDBASE   0xfde0
#define F32K_ADDR   (*(unsigned int volatile xdata *)(CPUIDBASE + 0x09))

bit busy;
//------------------------------
void UartIsr() interrupt 4
{
    if (TI)
    {
      TI = 0;
      busy = 0;
    }
    if (RI)
    {
      RI = 0;
    }
}
//------------------------------
void UartInit()
{
    SCON = 0x50;
    TMOD = 0x00;
    TL1 = BRT;
    TH1 = BRT >> 8;
    TR1 = 1;
    AUXR = 0x40;
    busy = 0;
}
//-----------------------------
void UartSend(char dat)
{
    while (busy);
    busy = 1;
    SBUF = dat;
}
//-----------------------------
void Delay500ms(void)        //@11.0592MHz
{
        unsigned char data i, j, k;

        i = 29;
        j = 14;
        k = 54;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}
//----------------------------------
void main()
{
    P_SW2 |= 0x80;//使能访问XFR

    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    UartInit();
    ES = 1;
    EA = 1;
while (1)
{
    UartSend(F32K_ADDR >> 8);   //读取32K频率的高字节
    UartSend(F32K_ADDR);      //读取32K频率的低字节
UartSend(0XAA);//加一个数据结尾标志
Delay500ms();//延时便于查看串口接收的数据
}   
}




神农鼎 发表于 2024-1-23 19:18:02




深圳国芯人工智能有限公司-产品_STC8H系列 (stcai.com)

神农鼎 发表于 2024-1-23 19:19:49







神农鼎 发表于 2024-1-23 19:20:29


DebugLab 发表于 2024-1-23 22:29:33

乐此不疲 发表于 2024-1-23 19:00
每次翻贴都能解疑答惑得到收获,前段时间想读掉电唤醒定时器时钟频率,搞了好久没能成功今天在这里找到了答 ...

有可能是已经发完了才打开串口助手,默认的1s打开,USB-UART芯片不断电,目标单片机重新上电试试,直接用CDC就延迟几秒再发,或者一直发




乐此不疲 发表于 2024-1-24 09:50:31

DebugLab 发表于 2024-1-23 22:29
有可能是已经发完了才打开串口助手,默认的1s打开,USB-UART芯片不断电,目标单片机重新上电试试,直接用 ...

多谢指点!明白了,确实是因为例程只发送一次数据就塞在while(1);这里了,这边打开串口时那边早已经发送结束了,不管它了,我也比较习惯让他连续发送数据这样在打开串口时总能看到结果、不发懵。
页: [1] 2
查看完整版本: 用三种不同的方式读取唯一的ID,怎么只有第一种方式正常