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

📄 ext1.c

📁 51单片机众多优秀的开发源程序:ZLG7290例程*ZLG7290汇编例程*蜂鸣器音乐例程*蜂鸣器响例程*读EEPROM并显示例程*16×2LCD模块例程*128×64点阵LCD模块例程*直连KEY和
💻 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 + -