切换到宽版
  • 4857阅读
  • 15回复

STC单片机定时器中断诡异问题 [复制链接]

上一主题 下一主题
离线1820929420
 

发帖
368
M币
2700
专家
2
粉丝
11
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-08-15
用定时器0 16位模式12分频产生中断来扫描数码管,无论怎么调整定时器初值都是140ms。。已疯。。




另外,STC手册上计算的初值,STC ISP计算的初值, 常规方法计算的初值都不一样??

下面是:STC ISP计算的:



文档计算的:



代码是常规方法计算的:


#include <intrins.h>
#include <STC12C5A60S2.h>

#define FOSC 6221000L
#define VTH0 ((65536 - (FOSC/12)*1000)/256)
#define VTL0 ((65536 - (FOSC/12)*1000)%256)

#define LED_SEG P1
#define LED_BIT P3
sbit LED=P3^4;
unsigned int count;
unsigned char DD[4]={1,2,3,4};

/************DELAY***************/
/***********1ms delay************/
    void Delayms(int t)        //
{
    unsigned int i;
    for(i=0;i<=t;i++)
    {
    unsigned char i, j;

    _nop_();
    _nop_();
    i = 6;
    j = 210;
    do
    {
        while (--j);
    } while (--i);
    }
}
/**************DELAY***************/


/***********DISPLAY***************/
/**********INPUT POINTER**********/

    void DSP(unsigned char DD[4])
    {
    unsigned int i;
    unsigned char code SEG[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x80,0x00};//êyÂë1ü:ÕyÏòλÖÃ;12òõ¼«;ÕyÏòᬽó;0-9,-,.,Ãe
    //unsigned char code SEG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x7F,0xFF};//êyÂë1ü:ÕyÏòλÖÃ;12Ñô¼«;ÕyÏòᬽó;0-9,-,.,Ãe
    unsigned char code BI[]={0x07,0x0B,0x0D,0x0E}; //êyÂë1ü£¬′ó×óμ½óò1£¬2£¬3£¬4λ
    //unsigned char code BI[]={0x01,0x02,0x04,0x08}; //êyÂë1ü£¬12Ñô£¬′ó×óμ½óò1£¬2£¬3£¬4λ

    for(i=0;i<4;i++)
    {
        LED_SEG=SEG[DD];
        LED_BIT=BI;
        Delayms(5);
        LED_BIT=0xff;
    }

    }
/***********DISPLAY***************/    


void Timer1Init(void)        //
{
    AUXR = 0x00;        //timer 0 1T mode
    TMOD = 0x01;        //set timer 0 as mode 1 (16bit)
    TL0 = VTL0;            //
    TH0 = VTH0;            //
    TF0 = 0;                //clr timer  interrupt flag
    TR0 = 1;                //start timer 0
    ET0=1;                    //
    EA=1;                    //
}

void TMR_ISR() interrupt 1
{
    TL0 = VTL0;            //
    TH0 = VTH0;    //
    DSP(DD);    
}

void main(void)
{

    P1M1=0x00;
    P1M0=0xff;  
    P3M1=0x00;
    P3M0=0xff;
    Timer1Init();    
    while(1);
}

Update 1:
把初值设置到最大, 依然是140MS,硬件数码管闪烁严重。。

KEIL 仿真时候出现TH0 TL0有小于初值情况发生:


[ 此帖被1820929420在2018-08-16 23:43重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
离线edward3121

发帖
602
M币
8776
专家
3
粉丝
28
只看该作者 1楼 发表于: 2018-08-15
请登录后查看
离线zj97czb

发帖
1432
M币
3443
专家
11
粉丝
77
只看该作者 2楼 发表于: 2018-08-15
请登录后查看
离线elecfunwb

发帖
1539
M币
4506
专家
8
粉丝
16
只看该作者 3楼 发表于: 2018-08-16
请登录后查看
离线冢中枯骨

发帖
83
M币
824
专家
0
粉丝
7
只看该作者 4楼 发表于: 2018-08-16
请登录后查看
离线mailshichao

发帖
119
M币
457
专家
0
粉丝
8
只看该作者 5楼 发表于: 2018-08-16
请登录后查看
离线1820929420

发帖
368
M币
2700
专家
2
粉丝
11
只看该作者 6楼 发表于: 2018-08-16
回 edward3121 的帖子
请登录后查看
离线1820929420

发帖
368
M币
2700
专家
2
粉丝
11
只看该作者 7楼 发表于: 2018-08-16
回 mailshichao 的帖子
请登录后查看
离线1820929420

发帖
368
M币
2700
专家
2
粉丝
11
只看该作者 8楼 发表于: 2018-08-16
回 冢中枯骨 的帖子
请登录后查看
离线1820929420

发帖
368
M币
2700
专家
2
粉丝
11
只看该作者 9楼 发表于: 2018-08-16
回 zj97czb 的帖子
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个