📄 ext1.c
字号:
/*********************************************************************************************************
** Small RTOS(51)
** The Real-Time Kernel(For Keil c51)
**
** (c) Copyright 2002-2003, chenmingji
** All Rights Reserved
**
** V1.12.0
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: ext1.c
**创 建 人: 陈明计
**最后修改日期: 2002年12月30日
**描 述: ext1源代码。
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: V0.50
** 日 期: 2002年2月22日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版 本: V1.11.0
** 日 期: 2003年12月2日
** 描 述: 删除TaskD代码
**
**------------------------------------------------------------------------------------------------------
** 修改人: 陈明计
** 版 本: V1.12.0
** 日 期: 2003年12月2日
** 描 述: 无变化
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "config.h"
#include "ZLG7290.h"
#include "VIIC_C51.h"
#define MYID 0x02//00h-10h
#define postsyn 0
#define RecFin 1
#define WAKEUP 2
#define RECSUCC 3
#define RecArpNewAnFlag 5
#define RecArpTermReqFlag 6
sbit TX=P3^1;
sbit RX=P3^0;
sbit SLNP=P1^3;
bit SynTimeOut;
unsigned char CharH,CharL,BautRt,RECDATA[10],RECNUM,SENDATA[10],disp_buf[8];
unsigned char display(unsigned char *sd)
{
disp_buf[0] = (sd[0]%16); // 装载" dp-932"
disp_buf[1] = (sd[0]/16);
disp_buf[2] = 31;
disp_buf[3] = (sd[1]%16);
disp_buf[4] = (sd[1]/16);
disp_buf[5] = 31;
disp_buf[6] = (sd[2]%16);
disp_buf[7] = (sd[2]/16);
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
void LinTranInit()
{
uint8 i;
do
{
TX=1;
RX=1;
SLNP=0;
i=200;
while(i--);
SLNP=1;
i=200;
while(i--);
}
while(RX==0);
}
void main(void)
{
TMOD = 0X21;
TL0 = 0x0;
TH0 = 0x0;
TR0 = 1;
ET0 = 1;
SCON = 0X40;
TH1=0XFA;
//TL1=0XFA;
TR1=0;
EA=1;
ES=0;
LinTranInit();
OSStart();
}
void TaskA(void)
{//uint8 i;
OSSemCreate(postsyn,0);
OSSemCreate(RecFin,0);
OSSemCreate(WAKEUP,0);
OSSemCreate(RECSUCC,0);
while (1)
{
if(RX==0)
{
SLNP=1;
OSSemPost(WAKEUP);
OSSemPend(RecFin,70);
}
//OSWait(K_TMO,1);
}
}
void TaskB(void)
{
uint8 i;
while (1)
{
OSSemPend(WAKEUP,0);
while(RX==0);
ES=0;
SCON=0X50;
TR1=1;
while(RI==0);
RI=0;
RECDATA[0]=SBUF;//0X55
while(RI==0);
RI=0;
RECDATA[0]=SBUF;
i=RECDATA[0]&0x0f;
if(i==MYID)
{
i=RECDATA[0]&0x30;
switch(i)
{
case 0x20 :
RECNUM=5;
break;
case 0x30 :
RECNUM=9;
break;
default :
RECNUM=3;
break;
}
for(i=1;i<=RECNUM;i++)
{
while(RI==0);
RI=0;
RECDATA[i]=SBUF;
}
OS_ENTER_CRITICAL();
display(RECDATA);
OS_ENTER_CRITICAL();
ES=1;
SCON=0X40;
OSSemPost(RECSUCC);
}
else
{
ES=1;
SCON=0X40;
SLNP=1;
OSSemPost(RecFin);
}
}
}
void TaskC(void)
{
uint16 i;
uint8 ii;
while (1)
{
OSSemPend(RECSUCC,0);
{
//OSWait(K_TMO,40);
for(ii=0;ii<10;ii++)
SENDATA[ii]=RECDATA[ii];
SENDATA[0]=0xc1;
TR1=1;
ES=0;
TH1=0XF0;
SBUF=0X80;
while(TI==0);
TI=0;
TH1=0XFA;
i=20;//4800//延时
while(i--);
SBUF=0X55;
while(TI==0);
TI=0;
i=10;//4800//延时
while(i--);
ii=SENDATA[0]&0x30;
switch(ii)
{
case 0x20 :
RECNUM=5;
break;
case 0x30 :
RECNUM=9;
break;
default :
RECNUM=3;
break;
}
SENDATA[1]++;
for(ii=0;ii<=RECNUM;ii++)
{
SBUF=SENDATA[ii];
while(TI==0);
TI=0;
}
ES=1;
SCON=0X40;
SLNP=1;
OSSemPost(RecFin);
}
}
}
void Serial_ISR() interrupt 4
{
OS_INT_ENTER();
if(TI==1) TI=0;
if(RI==1) RI=0;
OSIntExit();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -