⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 让Keil 的 RTX51 运行在 P89C669 让Keil 的 RTX51 运行在 P89C669
💻 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 + -