打印
[51单片机]

现代单片机MC97F单片机软件仿真进不了定时中断

[复制链接]
1104|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 andy520520 于 2018-9-10 10:35 编辑

有没有朋友玩过现代MC97F, 96F的单片机 ,怎么这些单片机用keil 软件仿真进不了定时中断?
或者说根本就软件仿真不了,有知道的朋友吗?
有一个和MCS-51不兼容的指令
keil 软仿用的器件是 Mentor graphics 公司的 M8051EW

无标题.jpg (86.31 KB )

和MCS-51不兼容的指令

和MCS-51不兼容的指令

相关帖子

沙发
ayb_ice| | 2018-9-10 11:46 | 只看该作者
为什么要软件仿真

使用特权

评论回复
板凳
andy520520|  楼主 | 2018-9-10 11:59 | 只看该作者
ayb_ice 发表于 2018-9-10 11:46
为什么要软件仿真

板子还没有搞好,用软件仿真都不行,用网上的例子也不行,用AT89S52可以

使用特权

评论回复
地板
ayb_ice| | 2018-9-10 13:44 | 只看该作者
andy520520 发表于 2018-9-10 11:59
板子还没有搞好,用软件仿真都不行,用网上的例子也不行,用AT89S52可以

没必要较真

使用特权

评论回复
5
rankey| | 2018-9-13 11:18 | 只看该作者
void Timer_Start()   
{
                 // initialize Timer0         8bit timer, period = 10mS
                  T0CR = 0x8C;            // timer setting   
                  T0DR = 0x26;            // period count   
                  IE2 |= 0x02;            // Enable Timer0 interrupt
                    T0CR |= 0x01;           // clear counter
                 T0CR=0x8C;       // 开Timer0;
                WTCR = 0x81;       // 32us watch timer --main osc 8MHz/256=31.25KHz (32us)
                WTDR  = 0xfc;      // 32*125= 4 ms 溢出,清计数器
                //WT中断计算公式:Fwck=Fx/128=32768; WT频率=Fwck/2^14=2Hz; 即每周期生产一个中断=500ms;
                  // 16bit timer, period = 10.000000mS
                    T1CRH = 0x00;           // timer setting High
                    T1CRL = 0xA0;           // timer setting Low   
                    T1ADRH = 0x9C;          // period count High   
                    T1ADRL = 0x3F;          // period count Low
                    IE2 |= 0x04;            // Enable Timer1 interrupt
                    T1CRH |= 0x80;          // enable counter
          BITCR       = 0x4E;                 // BIT = 8MHz/128 = 62.5KHz (16us) 16us*128=2.048ms
          WDTDR       = 0xfa;                 // 2.048 x 250 = 512ms watchdog refresh cycle
          WDTCR       = 0xE0;                 // WDT enable and refresh

}



void INT_Timer0() interrupt 13
{
          WDTCR= 0x20;        // Clear WDT Counter
          IIFLAG&=0x00;    //清定时器0的中断标志,使得为T0为没有溢出中断、没有T0中断产生。
          T0CR=0x0C;   //关闭timer0
       
                      T1_50ms++;
                          if(T1_50ms==80)       
                                {
                                        敲入你的代码;
                                }
       
           T0DR = 0x26;  //再次装入计数值   
           T0CR=0x8C;       // 开Timer0;
       
}

       


void INT_Timer1() interrupt 14
{
             WDTCR= 0x20;        // Clear WDT Counter
             T1CRL = 0x60;           // timer setting Low   0x60->0110 0000-->011->Fx/8;  清定时器1的中断标志
             T1CRH = 0x00;           // timer setting High  关定时器T1
            T2_510ms++;
                          if(T1_10ms==50)       
                                {
                                        敲入你的代码;
                                }
                       
           T1ADRH = 0x9C;          // period count High   
           T1ADRL = 0x3F;          // period count Low
           T1CRH |= 0x80;          // 开定时器 counter1
       
}

参考这些代码,芯片是96F8208S。估计差不多。若你不放心,可以用MC9x code generator代码生成器,重新弄一下.





使用特权

评论回复
6
andy520520|  楼主 | 2018-9-14 18:48 | 只看该作者
rankey 发表于 2018-9-13 11:18
void Timer_Start()   
{
                 // initialize Timer0         8bit timer, period = 10mS

感谢你的回复!
我是用Keil软仿进不了,OCD2仿真正常了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

384

帖子

5

粉丝