hl1200aa 发表于 2024-1-30 19:46:34

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

单片机型号为STC8H8K64U PDIP40

程序如下
unsigned char reg_ck;

      P_SW2 |= 0x80;   //扩展寄存器(XFR)访问使能


    P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
    P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
    P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
    P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
    P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
    P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

      XOSCCR = 0xc0;//启动外部晶振
      reg_ck =XOSCCR;
      reg_ck =CLKDIV;
      while(1)//等待时钟稳定
      {
             reg_ck = XOSCCR;
               if(reg_ck & 0x01)
                     break;
      }
      reg_ck = XOSCCR;
      CLKDIV = 0x00;//时钟不分频

      CLKSEL = 0x01; //选择外部晶振

    IT0 = 0; //设置int0 为上升/下降沿触发驱动

      EX0 = 1; //使能INT0中断

      EA = 1;          //使能全局中断
    while(1)
    {
    }仿真单步执行 CLKSEL = 0x01; //选择外部晶振 这句时就死机,提示


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

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


kaily 发表于 2024-1-30 21:05:07



仿真时不能切换时钟


详情参考下面的帖子
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=108&highlight=%E4%BB%BF%E7%9C%9F&page=1&extra=#pid371

hl1200aa 发表于 2024-1-30 21:19:04

kaily 发表于 2024-1-30 21:05
仿真时不能切换时钟




原来这样,多谢了。

challis 发表于 2024-1-31 15:40:55

是不是因为仿真时切换时钟后影响了调试数据通信的波特率?

kaily 发表于 2024-1-31 22:14:57

challis 发表于 2024-1-31 15:40
是不是因为仿真时切换时钟后影响了调试数据通信的波特率?

是的。
仿真开始时,波特率是使用默认的内部时钟进行计算的
如果运行过程中切换时钟,波特率就变了
页: [1]
查看完整版本: 仿真时切换外部晶振死机,但下载到单片机又能正常运行 | 已解决