用定时器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重新编辑 ]