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

📄 yy1.c

📁 UCOS-II.ZIP UCOS-II.ZIP UCOS-II.ZIP
💻 C
字号:
#define CAY             22118400L
#define LED  			P07
#define BEEP 			P06
#define WRITE			0x00								
#define	READ 			0x01
#define MY_ADD			0xfe

#define BUFF_SIZE		196				
#define B_S             BUFF_SIZE-1 	

unsigned char  word[5];
unsigned char  vb;
unsigned char  op;	
unsigned char  COMMAND;
unsigned char  add;
unsigned char  OP_CODE;
unsigned long  time;

xdata unsigned char buff[BUFF_SIZE];
unsigned char pbuff;
unsigned char pc1;
unsigned char pc2;
#include <includes.h>
OS_EVENT *sig;



void TaskStartyya(void *yydata) reentrant;
void TaskStartyyb(void *yydata) reentrant;
void TaskStartyyc(void *yydata) reentrant;

OS_STK TaskStartStkyya[MaxStkSize];//注意:在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkyyb[MaxStkSize];
OS_STK TaskStartStkyyc[MaxStkSize];

void SLA_SEND(unsigned char  out_data);

void SMBUS_ISR (void) interrupt 7 
{
	unsigned char err;
	switch (SMB0STA){											
		
	case 0x08:					
			SMB0DAT =COMMAND;			//起始条件已发出,发送地址
																	
			vb=0;														
			STA = 0;												
														
			break;
		
	case 0x10:                    		//重复起始条件已发出
			SMB0DAT = COMMAND;
			STA = 0;												
												
			break;

	case 0x18:
			
			
			  SMB0DAT = word[vb];	                 
			  							//从地址+W已发出,收到ACK,发送数据第一字节
			  break;			
		
	case 0x20:
			STO = 1;
			//STA = 1;
										//从地址+W已发出,收到NACK
			break;

	case 0x28:
		           vb++;
				   if(vb<OP_CODE)      	//数据字节已发出, 收到ACK ,发送其余字节    
				   {
					
					 SMB0DAT = word[vb];
					}else
					{						
											
					 STO = 1;
					 
					}
		
											
			break;

	case 0x30:
			STO = 1;
										//数据字节已发出, 收到NACK     
			break;
		

															
	case 0x40:
			AA = 0;						// 从地址+R已发出,收到ACK
											
			break;


	case 0x50:
			STO = 1;
						           		//数据字节收到,ACK已发出  
		
			P3=0;										
			break;

	case 0x58:	STO = 1;
				
										// 数据字节收到,NACK已发出  
			
				break;

	case 0x60:
	     	  break;	 
		
		 								//收到自己的从地址+W,ACK已发出



	case 0x80:                          //收到数据字节,ACK已发出
		     
			 

    		 buff[pc1]=SMB0DAT;
			 pc1++;
			 pbuff++;
			 if(pc1 % 7==3)
			 {
				buff[pc1]=time;
				pc1++;
				buff[pc1]=time>>8;
				pc1++;

				buff[pc1]=time>>16;
				pc1++;
				buff[pc1]=time>>24;
				pc1++;
				pbuff+=4;
				err=OSSemPost(sig);
			 }
			 if(pc1>B_S)pc1=0;
			 
			 break;																			


	default:
			STO = 1;
			
			break;
	}

	SI = 0;

}
void UART0(void)  interrupt 4 
{
	OSIntEnter();
	if(RI0)
 	{
  		switch(SBUF0)
  		{
  // case 55: cc[0]=55;
    //        cc[1]=temp1;
	//		SBUF0=cc[0];
   			
	//		break;

		   case 66: RSTSRC=2;
   			break;

	  	}
 
  		RI0=0;
 	}

	 OSIntExit();
}
/*
void ET3_ISR(void) interrupt 14   //  1/1000s
{

//#pragma asm
  
//#pragma endasm

	WDTCN=0xa5;    
	TMR3CN=0x06;
//	LED=~LED;
}
*/
void main(void)
{  
    
    config();
	OSInit();
    InitTimer();
    
    
    OSTaskCreate(TaskStartyya, (void *)0, &TaskStartStkyya[0],2);
    OSTaskCreate(TaskStartyyb, (void *)0, &TaskStartStkyyb[0],3);
    OSTaskCreate(TaskStartyyc, (void *)0, &TaskStartStkyyc[0],4);

    sig=OSSemCreate(0);

    OSStart();
}


void TaskStartyya(void *yydata) reentrant
{
    unsigned char n;
	yydata=yydata;

    WDTCN = 0x07;	
    WDTCN = 0xA5;

	time=0;
	pc1=0;
  	pc2=0;
  	pbuff=0;
	BEEP=0;
	LED=0;
	OSTimeDly(OS_TICKS_PER_SEC); 
	LED=1;
	BEEP=1;
	OSTimeDly(OS_TICKS_PER_SEC); 
	LED=0;
	
  	word[0]=0;

  	for(n=0;n<254;n=n+2)
  	{
		add=n;
		SLA_SEND(1);
		OSTimeDly(1);
  	} 
  
    while(1)
    {   
		
		OSTimeDly(OS_TICKS_PER_SEC);
	
           
    }    
}

void TaskStartyyb(void *yydata) reentrant
{
    yydata=yydata; 
    while(1)
    {
        OSTimeDly(3*OS_TICKS_PER_SEC);
            
    }    
}

void TaskStartyyc(void *yydata) reentrant
{
	unsigned char err;
    yydata=yydata; 
    while(1)
    {
		OSSemPend(sig,0,&err);
		while(pbuff>0)
		{
	 		 LED=1;
			 BEEP=0;
			 SBUF0=buff[pc2];
	 	     while(~TI0);
			 TI0=0;
			 
			 pc2++;
			 if((pc2 % 7)==0)OSTimeDly(2);
			 if(pc2>B_S)pc2=0;
			 pbuff--;
			 LED=0;
			 BEEP=1;
	
		}		 
            
    }    
}


void SLA_SEND(unsigned char  out_data)
{
	SMB0CN = 0x44;										
	COMMAND = add | WRITE;					
	OP_CODE = out_data;									
											
	STA = 1;															

}

⌨️ 快捷键说明

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