找回密码
 立即注册
查看: 544|回复: 4

仿真时切换外部晶振死机,但下载到单片机又能正常运行 | 已解决

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2024-1-30 19:46:34 | 显示全部楼层 |阅读模式
单片机型号为STC8H8K64U PDIP40

程序如下
  1. unsigned char reg_ck;
  2.         P_SW2 |= 0x80;     //扩展寄存器(XFR)访问使能
  3.     P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  4.     P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  5.     P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  6.     P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  7.     P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  8.     P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  9.     P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  10.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  11.         XOSCCR = 0xc0;  //启动外部晶振
  12.         reg_ck =  XOSCCR;
  13.         reg_ck =  CLKDIV;
  14.         while(1)  //等待时钟稳定
  15.         {
  16.              reg_ck = XOSCCR;
  17.                  if(reg_ck & 0x01)
  18.                      break;  
  19.         }
  20.         reg_ck = XOSCCR;
  21.         CLKDIV = 0x00;  //时钟不分频
  22.         CLKSEL = 0x01; //选择外部晶振
  23.     IT0 = 0; //设置int0 为上升/下降沿触发驱动
  24.         EX0 = 1; //使能INT0中断
  25.         EA = 1;          //使能全局中断
  26.     while(1)
  27.     {
  28.     }
复制代码
仿真单步执行 CLKSEL = 0x01; //选择外部晶振 这句时就死机,提示
微信图片_20240130194438.png

但把这个hex文件下载到单片机直接运行,又可以正常运行。

请问有什么方法能够正常仿真这段代码?


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-04-30 09:01:34

1

主题

66

回帖

682

积分

高级会员

积分
682
发表于 2024-1-30 21:05:07 | 显示全部楼层
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-04-14 10:08:33

14

主题

61

回帖

481

积分

中级会员

积分
481
发表于 2024-1-30 21:19:04 | 显示全部楼层
kai*** 发表于 2024-1-30 21:05
仿真时不能切换时钟

原来这样,多谢了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:247
  • 最近打卡:2025-02-25 19:02:50

13

主题

198

回帖

1175

积分

金牌会员

积分
1175
发表于 2024-1-31 15:40:55 | 显示全部楼层
是不是因为仿真时切换时钟后影响了调试数据通信的波特率?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-04-30 09:01:34

1

主题

66

回帖

682

积分

高级会员

积分
682
发表于 2024-1-31 22:14:57 | 显示全部楼层
chal*** 发表于 2024-1-31 15:40
是不是因为仿真时切换时钟后影响了调试数据通信的波特率?

是的。
仿真开始时,波特率是使用默认的内部时钟进行计算的
如果运行过程中切换时钟,波特率就变了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:12 , Processed in 0.171355 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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