STC8H8K64U, T2/T3/T4做24位定时器不正常 | 已解决
今天在一个项目中打算用24位定时器做个长定时,但忙了一天没结果。不知是什么原因?
修改分频寄存器TM2PS,TM3PS,TM4PS定时时长没改变!
#include <STC8H.H>
#define ET2 0x04
#define ET3 0x20
#define ET4 0x40
#define T2IF 0x01
#define T3IF 0x02
#define T4IF 0x04
#define PIN_LED1 P46
#define PIN_LED2 P00
#define PIN_LED3 P01
void Reset(void){
// IAP_CONTR = 0x20; //软件复位,系统重新从用户代码区开始运行程序
IAP_CONTR = 0x60; //软件复位,系统重新从ISP代码区开始运行程序
}
void TM2_Isr() interrupt 12
{
PIN_LED1 = !PIN_LED1; //测试端口
}
void TM3_Isr() interrupt 19
{
PIN_LED2 = !PIN_LED2; //测试端口
}
void TM4_Isr() interrupt 20
{
PIN_LED3 = !PIN_LED3; //测试端口
}
void UART1_Isr() interrupt 4
{
if (TI)
{
TI = 0; //清中断标志
}
if (RI)
{
RI = 0; //清中断标志
Reset();
}
}
void Timer2_Init(void) //200毫秒@6.000MHz
{
TM2PS = 0x01; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xB0; //设置定时初始值
T2H = 0x3C; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
IE2 |= ET2; //使能定时器中断
}
void Timer3_Init(void) //300毫秒@6.000MHz
{
TM3PS = 0x02; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
T4T3M &= 0xFD; //定时器时钟12T模式
T3L = 0xB0; //设置定时初始值
T3H = 0x3C; //设置定时初始值
T4T3M |= 0x08; //定时器3开始计时
IE2 |= ET3; //使能定时器中断
}
void Timer4_Init(void) //400毫秒@6.000MHz
{
TM4PS = 0x03; //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
T4T3M &= 0xDF; //定时器时钟12T模式
T4L = 0xB0; //设置定时初始值
T4H = 0x3C; //设置定时初始值
T4T3M |= 0x80; //定时器4开始计时
IE2 |= ET4; //使能定时器中断
}
void Uart1_Init(void) //4800bps@6.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR &= 0xBF; //定时器时钟12T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE6; //设置定时初始值
TH1 = 0xFF; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES = 1; //使能串口1中断
}
void main(void){
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
Uart1_Init();
Timer2_Init();
Timer3_Init();
Timer4_Init();
P0 = 0;
P1 = 0xC0;
P2 = 0;
P3 = 3;
P4 = 0x80;
P5 = 0;
EA = 1;
while (1);
}
#define EAXSFR() P_SW2 |= 0x80 ;
/* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
加上这个,,主函数里面
void main(void){
EAXSFR();
...
}
不加这个 你调一个月也调不出来{:4_200:} 谢谢指点。
页:
[1]