找回密码
 立即注册
查看: 766|回复: 10

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

[复制链接]
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 144 天

    [LV.7]常住居民III

    67

    主题

    802

    回帖

    2656

    积分

    金牌会员

    积分
    2656
    发表于 2023-1-15 18:57:12 | 显示全部楼层 |阅读模式
    近日,本人使用STC-ISP工具中的范例,用三种不同的方式读取单片机唯一的ID,怎么只有第一种方式正常,其他两种方式,读出来要么都是00,要么就是ff,不知道是什么原因。

    2023-01-15_185257.jpg
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 84 天

    [LV.6]常住居民II

    37

    主题

    965

    回帖

    6690

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6690
    QQ
    发表于 2023-1-16 09:26:01 | 显示全部楼层
    1.png


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

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2023-1-16 09:42:18 | 显示全部楼层
    用户新系统设计,尽量选择有CHIP-ID这个功能的芯片,用户自己软加密更强悍
  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 102 天

    [LV.6]常住居民II

    33

    主题

    161

    回帖

    360

    积分

    中级会员

    积分
    360
    发表于 2023-1-16 15:03:16 | 显示全部楼层
    通过观看冲大侠的讲座,发现一个很有用的规律——遇到问题首先去找厂家相关芯片的最新版技术手册,手册支持搜索功能,很方便。
  • TA的每日心情
    开心
    昨天 12:52
  • 签到天数: 99 天

    [LV.6]常住居民II

    27

    主题

    101

    回帖

    803

    积分

    高级会员

    积分
    803
    发表于 2024-1-23 19:00:25 | 显示全部楼层
    每次翻贴都能解疑答惑得到收获,前段时间想读掉电唤醒定时器时钟频率,搞了好久没能成功今天在这里找到了答案再试就成功了,膜拜!
    123456.jpg

    只是不知道什么原因、烧录代码后打开串口助手收不到数据,改成循环发送就好了。
    使用官网例程,主函数中添加加了两句代码转贴这里方便大家测试:
    1. //程序为STC官网例程
    2. //本芯片读出内部掉电时钟频率:8C 6E
    3. #include "stc8h.h"
    4. #include "intrins.h"
    5. #define FOSC    11059200UL
    6. #define BRT     (65536 - FOSC / 115200 / 4)
    7. #define CPUIDBASE   0xfde0
    8. #define F32K_ADDR   (*(unsigned int volatile xdata *)(CPUIDBASE + 0x09))
    9. bit busy;
    10. //------------------------------
    11. void UartIsr() interrupt 4
    12. {
    13.     if (TI)
    14.     {
    15.         TI = 0;
    16.         busy = 0;
    17.     }
    18.     if (RI)
    19.     {
    20.         RI = 0;
    21.     }
    22. }
    23. //------------------------------
    24. void UartInit()
    25. {
    26.     SCON = 0x50;
    27.     TMOD = 0x00;
    28.     TL1 = BRT;
    29.     TH1 = BRT >> 8;
    30.     TR1 = 1;
    31.     AUXR = 0x40;
    32.     busy = 0;
    33. }
    34. //-----------------------------
    35. void UartSend(char dat)
    36. {
    37.     while (busy);
    38.     busy = 1;
    39.     SBUF = dat;
    40. }
    41. //-----------------------------
    42. void Delay500ms(void)        //@11.0592MHz
    43. {
    44.         unsigned char data i, j, k;
    45.         i = 29;
    46.         j = 14;
    47.         k = 54;
    48.         do
    49.         {
    50.                 do
    51.                 {
    52.                         while (--k);
    53.                 } while (--j);
    54.         } while (--i);
    55. }
    56. //----------------------------------
    57. void main()
    58. {
    59.     P_SW2 |= 0x80;  //使能访问XFR
    60.     P0M0 = 0x00;
    61.     P0M1 = 0x00;
    62.     P1M0 = 0x00;
    63.     P1M1 = 0x00;
    64.     P2M0 = 0x00;
    65.     P2M1 = 0x00;
    66.     P3M0 = 0x00;
    67.     P3M1 = 0x00;
    68.     P4M0 = 0x00;
    69.     P4M1 = 0x00;
    70.     P5M0 = 0x00;
    71.     P5M1 = 0x00;
    72.     UartInit();
    73.     ES = 1;
    74.     EA = 1;
    75. while (1)
    76. {
    77.     UartSend(F32K_ADDR >> 8);   //读取32K频率的高字节
    78.     UartSend(F32K_ADDR);        //读取32K频率的低字节
    79. UartSend(0XAA);//加一个数据结尾标志
    80. Delay500ms();//延时便于查看串口接收的数据
    81. }   
    82. }
    复制代码





    点评

    有可能是已经发完了才打开串口助手,默认的1s打开,USB-UART芯片不断电,目标单片机重新上电试试,直接用CDC就延迟几秒再发,或者一直发 [attachimg]33597[/attachimg] [attachimg]33598[/attachimg]  详情 回复 发表于 2024-1-23 22:29
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2024-1-23 19:18:02 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2024-1-23 19:19:49 | 显示全部楼层
    截图202401231918251745.jpg

    截图202401231918533610.jpg

    截图202401231919436874.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    546

    主题

    9104

    回帖

    1万

    积分

    管理员

    积分
    14082
    发表于 2024-1-23 19:20:29 | 显示全部楼层
    截图202401231920256015.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 99 天

    [LV.6]常住居民II

    25

    主题

    301

    回帖

    979

    积分

    荣誉版主

    Cyber Hamster

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

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

    截图202401232227163290.jpg
    截图202401232228136939.jpg

    (=・ω・=)
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:52
  • 签到天数: 99 天

    [LV.6]常住居民II

    27

    主题

    101

    回帖

    803

    积分

    高级会员

    积分
    803
    发表于 2024-1-24 09:50:31 | 显示全部楼层
    DebugLab 发表于 2024-1-23 22:29
    有可能是已经发完了才打开串口助手,默认的1s打开,USB-UART芯片不断电,目标单片机重新上电试试,直接用 ...

    多谢指点!明白了,确实是因为例程只发送一次数据就塞在while(1);这里了,这边打开串口时那边早已经发送结束了,不管它了,我也比较习惯让他连续发送数据这样在打开串口时总能看到结果、不发懵。
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-19 14:00 , Processed in 0.084703 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表