📄 test.c
字号:
#include <rtx51tny.h>
#include <reg669.h>
#include <intrins.h>
#define TASK_INIT 0 /* 初始化任务(包括超时处理和脉冲、遥信采样) */
#define TASK_CLOCK 1 /* 时钟秒任务 */
#define TASK_I2C 2 /* I2C通信、计算、控制任务 */
#define TASK_FK2004 3
#define TASK_SPI 4 /* SPI总线处理任务 */
struct task_def{
void (*taskfunc)(void); // 任务函数地址
};
void task_init (void);
void task_clock (void);
void task_i2c (void);
void task_fk2004 (void);
void task_spi (void);
struct task_def const far TASK_ENTRY[]={
{*task_init},
{*task_clock},
{*task_i2c},
{*task_fk2004},
{*task_spi}
};
unsigned long far sz = TASK_ENTRY; /* 消除告警 */
void task_clock (void) /* 任务1: */
{
while(1) {
os_wait(K_TMO,100,0);
T2 = ~T2; /* 此处T2连接到一灯,用来监视程序的运行
正常运行时 T2 每秒变换一次
显示在 板子上的 L21
*/
}
}
void task_i2c (void) /* 任务2: */
{ while(1) os_wait(K_TMO,10,0);
}
void task_fk2004 (void) /* 任务3: */
{ while(1) os_wait(K_SIG,10,0);
}
void task_spi (void) /* 任务4: */
{ while(1) os_wait(K_TMO,10,0);
}
/* 以下三个中断:仅仅在此定义并未让其执行
仿真时不正常,若去掉则正常
*/
void serial(void) interrupt 4 //UART0
{
}
void serial1(void) interrupt 10 //UART1
{
}
void i2c_isr(void) interrupt 11 //I2C
{
}
/* 我的程序中用到 Keil 的 RTX TINY51 Ver2
针对89C669我做了一些改动,我在模拟仿真时操作系统运行正常
*/
void task_init()
{ if(0){
// ENABLE UART0
SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */
TH1 = 0xfd;
TR1 = 1;
ES0 = 1;
// ENABLE UART1
S1STAT = 0x00;
S1CON = 0x00;
REN_1 = 1;
SM0_1 = 1;
SM1_1 = 0;
BRGCON = 0x00;
BRGR1 = 0x10;
BRGR0 = 0x10;
BRGCON = 0x01;
ES1R = 1;
// ENABLE I2C
EI2C = 1; // disable I2C interrupts
EA = 1;
}
os_create_task (TASK_CLOCK); /* 启动时钟任务 */
os_create_task (TASK_I2C); /* 启动20毫秒(脉冲采样\I2C通信)任务*/
os_create_task (TASK_FK2004); /* 启动负控规约解释任务 */
os_create_task (TASK_SPI); /* 轮次控制任务 */
while(1) os_wait(K_TMO,2,0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -