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

📄 rtx51_test.c

📁 基于51类单片机RTX51多任务系统
💻 C
字号:
//********************************************************************************
//for  board function test
//include led,uart,i2c,mdio
//2008.3.19 by weijian DL
//********************************************************************************

//********************************************************************************
//including
//********************************************************************************
#include "SYSDEF.H"							/* system i/o interface defines		*/
#include "I2C.H" 							/* i2c function & defines		*/
//#include "IIC.H" 							/* i2c function & defines			*/
#include "UART.H" 							/* uart function & defines			*/
#include "MDIO.H" 							/* mdio function & defines			*/
#include <rtx51tny.h>						/* RTX-51 tiny functions & defines	*/
//********************************************************************************
//task number defines
//********************************************************************************
#define INIT			0					/* task number of task: init		*/
#define I2C_TEST		1					/* task number of task: i2c_test	*/
#define LED_BLINK		2					/* task number of task: led			*/
#define UART			3					/* task number of task: uart		*/
#define MDIO			4					/* task number of task: MDIO		*/
#define TASK_MANAGE		5					/* task number of task: TASK_MANAGE	*/


//********************************************************************************
//serial interupt rutine
//********************************************************************************
	 void serial ( void ) interrupt 4 using 2
{
    if(RI)
    {
  		RI=0;
     	if(a.rcount<max)//缓冲区满后字节被丢弃
  		{
   			a.rcount++;
		   	a.rcombuffer[a.rend]=SBUF;//不满则读入
   			a.rend++;
   			if(a.rend>=max)//循环利用缓冲区
   			a.rend=0;
  		}
    }
	else if(TI)
 	{
  		TI=0;
  		if(a.tcount>0)//如有数据则发送,并设置相关标志字
  		{
   			SBUF=a.tcombuffer[a.tstart];
   			a.tstart++;
   			if( a.tstart>=max)
   			a.tstart=0;
   			a.tcount--;
  		}
  		else
   			a.issent=0;//否则设置停止发送字
	}
}

//********************************************************************************
//init task for timer,uart,i2c,interupt,etc init
//********************************************************************************
void init ( void ) _task_ INIT				/* program execution starts here		*/  
{
  	
	CPU_Init();				 
//	TH0=0xF8; 
//	TL0=0x30; //24MHZ晶振,计时0.5ms

//	os_create_task ( I2C_TEST );			/* I2C TEST task							*///
//	os_create_task ( LED_BLINK );			/* led blinking task						*/
//	os_create_task ( TASK_MANAGE);			/* TASK_MANAGE task							*/
// 	os_create_task ( MDIO);					/* MDIO task								*/
	os_create_task ( UART );				/* UART TEST task							*/
 
		
  	os_delete_task ( INIT );				/* stop init task ( no longer needed )		*/
	while(1);
}

//********************************************************************************
//task fot i2c read/write
//********************************************************************************
void i2c_task ( void ) _task_ I2C_TEST
{ 	
	unsigned char vendor=0xFF;	   
//	unsigned int _vendor=0xFFFF;
	I2C_Init();
	while(vendor!=0x1191)
	{
		vendor=Read_I2C_1Byte ( Slave_I2c_Adr, 0x2 );
//		_vendor=IICRECEIVEWORD(	0 );
		delay_ms(1); 
		MCU_GLINT_CT=2;
	} 
	MCU_GLINT_CT=20;
	while(1);  
}	 


//********************************************************************************
//task fot led,to show system running status
//********************************************************************************
void led_task ( void ) _task_ LED_BLINK		/* start led blinking task					*/
{
	cnt_mcu=MCU_GLINT_CT;
	cnt_mdio=MDIO_GLINT_CT;	
	while(1)
	{	
//		os_wait ( K_SIG, 0, 0  );
		os_wait ( K_TMO, 5, 0  );
		if(nBUZZ_ALM==Alarm_On) nSYS_ALM=Led_On;
		else nSYS_ALM=Led_Off;

		if (cnt_mcu==1)
		{
			nMCU_OK= !nMCU_OK;
			cnt_mcu=MCU_GLINT_CT;
		}
		else if (cnt_mcu==0)
		cnt_mcu=MCU_GLINT_CT;
		else cnt_mcu--;

		if (cnt_mdio==1)
		{
			nXRS_OK= !nXRS_OK;
			cnt_mdio=MDIO_GLINT_CT;
		}
		else if (cnt_mdio==0)
		cnt_mdio=MDIO_GLINT_CT;
		else cnt_mdio--;
		
	}
}

//********************************************************************************
//task fot uart
//********************************************************************************
void uart_task ( void ) _task_ UART				/* program execution starts here		*/  
{	
	char f,k=0;
	inibuffer();
	comini();	
	while(sent("board test.\r\n",13)!=13);
	sentoff();
	while(1)
	{
		while(sent("1.cpu test.\r\n",13)!=13);
		sentoff();
		while(sent("2.alarm test.\r\n",15)!=15);
		sentoff();
		while(sent("3.uart test.\r\n",14)!=14);
		sentoff();
		while(sent("4.i2c test.\r\n",13)!=13);
		sentoff();
		while(sent("5.mido test.\r\n",14)!=14);
		sentoff();
		while(sent("6.led test.\r\n",13)!=13);
		sentoff();
		while(sent("enter your choice:\r\n",18)!=18);
		sentoff();
		while((f=getchar())==0);//输入字符不回显,不要输入回车
		while(sent(&f,1)!=1);
		sentoff();
		while(sent("\r\n",2)!=2);
		sentoff();
		switch(f)
		{ 	
			case '1': 
				while(sent("cpu ok\r\n",8)!=8);
				sentoff();
				MCU_GLINT_CT=10;
 			break;
 	
			case '2':
    			while(sent("set alarm?y or n\r\n",18)!=18);
				sentoff();		
				while((f=getchar())==0);
				if (f=='y')	
				{	nBUZZ_ALM=Alarm_On;
    				while(sent("alarm on\r\n",10)!=10);
					sentoff();
				}
				else 
				{
					nBUZZ_ALM=Alarm_Off;
    				while(sent("alarm off\r\n",11)!=11);
					sentoff();
				}
    		break;

			case '3':
				while(sent("uart ok\r\n",9)!=9);																								
				sentoff();
			break;

			case '4':
				while(sent("i2c enable?y or n\r\n",19)!=19);
				sentoff();
				while((f=getchar())==0);
				if (f=='y')	
				{	
					os_create_task ( I2C_TEST );			/* I2C TEST task*/ 
    				while(sent("i2c enable\r\n",12)!=12);
					sentoff();
				}
				else if (f=='n')
				{				
					os_delete_task ( I2C_TEST );			/* I2C TEST task*/ 
					I2C_Init();
    				while(sent("i2c unable\r\n",12)!=12);	
					sentoff();				
				}
			break;
			

			case '5':
				while(sent("mdio enable?y or n\r\n",20)!=20);
				sentoff();
				while((f=getchar())==0);
				if (f=='y')	
				{	
					os_create_task ( MDIO );			/* mdio task*/ 
    				while(sent("mdio enable\r\n",13)!=13);
					sentoff();
					MDIO_GLINT_CT=10;
				}
				else if (f=='n')
				{				
					os_delete_task ( MDIO );			/* mdio task*/ 
					XRS_MDIO_Init();
					MDIO_GLINT_CT=0;
					cnt_mdio=0;
					nXRS_OK=Led_Off;
    				while(sent("mdio unable\r\n",13)!=13);
					sentoff();					
				}
			break;

			case '6': 
				while(sent("enable led?y or n\r\n",19)!=19);
				sentoff();	
				while(sent("z for alram off\r\n",17)!=17);
				sentoff();		
				while((f=getchar())==0);
				if (f=='y')	
				{	
					os_create_task ( LED_BLINK );
    				while(sent("led enable\r\n",12)!=12);
					sentoff();
				}
				else if (f=='n')
				{
    				while(sent("led unable\r\n",12)!=12);
					sentoff();
					os_delete_task (LED_BLINK);
					nSYS_ALM=Led_Off;
					nXRS_OK=Led_Off;
					nMCU_OK=Led_Off;
				}
				else if (f=='z')
				{
					nBUZZ_ALM=Alarm_Off;
    				while(sent("alarm off\r\n",11)!=11);
					sentoff();
				}
			break;

			default:
			break;
		}
	}
}


//********************************************************************************
//task fot mdio interface
//********************************************************************************
void mido_task ( void ) _task_ MDIO		/* start mdio task					*/
{
	unsigned char t;
	XRS_MDIO_Init();
	while(1)
	{
		t=XRS_MDIO_IF(0, 1,0x8,0,1, 0x59);
		//读入0001地址处的16位数据
		delay_ms(1);  
	}
}

//********************************************************************************
//manage tasks
//********************************************************************************
void manage_task ( void ) _task_ TASK_MANAGE		/* start led blinking task */
{	
	while(1)
	{	  
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -