帮忙,我设置主时钟为11.0592M,12T模式,定时时间是不是1秒?
#include "main.h"#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 11059200 //定义主时钟
#define Timer0_Reload (65536UL -(MAIN_Fosc / 1105)) //定时10ms
u16 B_ms=0;
code u8 SMG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
u16 count;
void setinoutport()//
{
P0M1=0X00;P0M0=0X00;
P2M1=0X00;P2M0=0XFF;
P1M1=0X00;P1M0=0X00;
P3M1|=0XFC;P3M0|=0XFC;
}
void main()
{
setinoutport();
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = (u8)Timer0_Reload%256; //设置定时初始值
TH0 = (u8)Timer0_Reload/256; //设置定时初始值
ET0 = 1; //Timer0 interrupt enable
EA = 1; //打开总中断
TR0 = 1; //定时器0开始计时
for(;;)
{
OutputPort0=SMG;
}
}
/********************** Timer0 10ms中断函数 ************************/
void timer0 (void) interrupt 1
{
B_ms ++; //10ms++
if(B_ms>100)//满1S
{
B_ms=0;
count++;
if(count>10)
count=0;
}
}
可能有点误差 soma 发表于 2024-6-12 21:37
可能有点误差
大佬再问下,程序中确定时钟主频率和定时器初值的计算,是这样计算嘛 11059200,12T模式一个周期相当于1.085us。10ms=10000us,=9216周期。换算是dc00.你的算出来是e800. 有现成的工具可以使用 没看见你调用定时,你现有的程序只是10ms中断一次 楼主:主时钟为11.0592M,12T模式,定时时间要1秒
用STC-ISP 直接复制粘贴 你这个初值不对有误差还是官方软件计算吧
这个才是零误差
页:
[1]
2