这是我的源程序
/* This program using RTX51tny for 89c2051 controler
conf_tny.a51 be modified:
INT_CLOCK=10000;TIMESHARING=5; */
#include "reg51.h"
#include "rtx51tny.h"
#define uchar unsigned char
#define INIT 0
#define WDT 1
#define COMMAND 2
uchar idata BUFR[4];
uchar pointer;
unsigned int starting;
bit idata START,READY;
/**********************************************/
init()_task_ INIT
{
SCON=0x50;/* mode1:8-bit UART,enable receiver*/
TMOD|=0x21;/* timer0:mode1;timer1:mode2 */
TL1=TH1=0xe8;/* 1200baud,oxf4=2400baud*/
TR1=1;
TR0=1;
ES=1;
pointer=0;
starting=0;
READY=1;
START=0;
os_create_task(WDT);
os_create_task(COMMAND);
os_delete_task(INIT);
}
watchdog()_task_ WDT
{
while(1){
T0=!T0;
os_wait(K_IVL,4,0);/* flash the LED every 40ms once*/
if(START) starting++;
if(starting==400){/*4000ms is the longest time*/
READY=0;
}
if(starting==2000){READY=1;START=0;starting=0;}/*20s must stop!*/
}
}
void serial() interrupt 4 using 2
{
if(TI)TI=0;
else if(RI){
BUFR[pointer]=SBUF;
SBUF=BUFR[pointer];/* echo the character received */
while(TI==0);
TI=0;
pointer++;
if(pointer==4){
if(READY) SBUF=0;
else SBUF=0xff;
while(TI==0);
TI=0;
isr_send_signal(COMMAND);
/*send a signal once every frame*/
}
}
}
command()_task_ COMMAND
{ uchar i;
while(1)
{
os_wait(K_SIG,0,0);/*waiting for signal from serial()*/
function();/*processing received character*/
for(i=0;i <4;i++)BUFR[i]=0;/* clear the buffer*/
}
发表时间:2003年4月2日19:19:39