这几天一直折腾small rtos51,从周立功网站上下的1.20.3版,芯片为89S51。别的没发现什么,但系统时钟总是不能更改。
我使用T0作为系统定时器,即:#define OS_TIME_ISR 1
现在只有一个任务,让一个LED间断亮灭:
void test(void)
{
while(1)
{
OSWait(K_TMO,10);
led_green = !led_green;
}
}
不管我怎么更改T0初始代码,以及OS_TICKS_PER_SEC值,这个LED亮灭时间间隔总是1秒(更改为OSWait(K_TMO,1)为100ms)。请各位帮看看我哪里写错了,谢谢!
以下为主要代码:
OS_CFG.H 如下:
#define OS_MAX_TASKS 3 /* 最大任务数1~16 */
#define OS_TICKS_PER_SEC 100 /* 声明1秒系统系统节拍数 */
#define EN_USER_TICK_TIMER 0 /* 禁止(0)或允许(1)系统定时中断调用用户函数UserTickTimer() */
#define EN_TIMER_SHARING 1 /* 禁止(0)或允许(1)定时器中断调用OSTimeTick() */
#define TICK_TIMER_SHARING 1 /* 定义进入多少次硬件中断为一次系统定时器软中断 */
#define OSWait_EN 1 /* 禁止(0)或允许(1)调用兼容函数OSWait */
... ...
CONFIG.H 如下:
/********************************/
/* "以下为程序配置" */
/********************************/
#define m_Fosc 11059200L
#define m_TIME 65536L - (m_Fosc / (OS_TICKS_PER_SEC * 12L))
MAIN.C 如下:
void test(void);
void main(void)
{
TMOD = (TMOD & 0xF0) | 0x01;
TH0 = m_TIME / 256;
TL0 = m_TIME % 256;
ET0=1;
TR0=1;
temp_led_green = 0;
OSInit();
OSTaskCreate(test, NULL, 0);
while(1)
{
PCON = PCON | 0x01; //CPU进入休眠状态
}
}
void test(void)
{
while(1)
{
OSWait(K_TMO,10);
temp_led_green = !temp_led_green;
}
} |