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

📄 instruction.c

📁 AVR atmega64串口驱动
💻 C
字号:
#define Instruction_c
#include "main.h"
/////////////************应答器数据接收**************//////////////////

void hex_bcd_8(uchar temp)
{
    uchar bufn[]="000";
  	uchar a;
	for(a=3;a>0;a--)   //取出每位中的数据
		{
			bufn[a-1]=temp%10+48;
			temp/=10;
		}
	UART0_Transmitstr(bufn);
    CR; 	
}
//////////////////////////////////////

//****************发送遥测命令********************//
void Inquiry_tx(void)
{
	UART1_TransmitByte(0xff);
	UART1_TransmitByte(0x03);
	UART1_TransmitByte(0x00);
	UART1_TransmitByte(0x41);
}
//应答器数据采集
void Data_acquisition(void)
{
	if(set_pown==0)
	{
		uchar buff[64];
		uchar x=0;

		DelayMs(5);
		Inquiry_tx();
		DelayMs(5);

		x=0;
		DelayMs(500);
		while(UART1_DataInReceiveBuffer())
		{
			buff[x++]=(UART1_ReceiveByte());
		}
		if(crc16_update (&buff[0], x)==0)//CRC16校验 0表示CRC通过
		{
			acquisition_n=0;//应答器无应答计数
			Six_voltage=40*(buff[12]*256+buff[11]);//6v电压
			Supply_current=2*(buff[10]*256+buff[9]);//供电电流
			State_health=buff[0];//健康状况
			if(buff[13]&0x02)
			{
				Receiver_c=1;//接收机
			}
			else
			{
				Receiver_c=0;//接收机
			}
			if(buff[13]&0x04)
			{
				Transmitter_c=1;//发射机
			}
			else
			{
				Transmitter_c=0;//发射机
			}
			if(buff[13]&0x08)
			{
				Frequency_c=1;//频率精度
			}
			else
			{
				Frequency_c=0;//频率精度
			}
			switch(buff[6])//工作时间
			{
				case 0 : Action_cycle=10;break;
				case 1 : Action_cycle=15;break;
				case 2 : Action_cycle=20;break;
				case 3 : Action_cycle=25;break;
				default:				
				break;
			}
			switch(buff[7])//休止时间
			{
				case 0 : Stops_cycle=0 ;break;
				case 1 : Stops_cycle=10;break;
				case 2 : Stops_cycle=15;break;
				case 3 : Stops_cycle=20;break;
				case 4 : Stops_cycle=25;break;
				default:				
				break;
			}
			switch(buff[5])//工作编码
			{
				case 0 : Work_code='B';break;
				case 1 : Work_code='C';break;
				case 2 : Work_code='D';break;
				case 3 : Work_code='G';break;
				case 4 : Work_code='K';break;				case 5 : Work_code='M';break;				case 6 : Work_code='N';break;				case 7 : Work_code='O';break;
				case 8 : Work_code='Q';break;				case 9 : Work_code='T';break;				case 10: Work_code='Y';break;				case 11: Work_code='Z';break;				case 12: Work_code='A';break;				case 13: Work_code='E';break;				case 14: Work_code='F';break;				case 15: Work_code='H';break;				case 16: Work_code='I';break;
				case 17: Work_code='J';break;				case 18: Work_code='L';break;				case 19: Work_code='P';break;				case 20: Work_code='R';break;
				case 21: Work_code='S';break;
				case 22: Work_code='U';break;
				case 23: Work_code='V';break;
				case 24: Work_code='W';break;
				default:				
				break;
			}
			buff[0]=0;
			buff[1]=0;
			buff[2]=0;
			buff[3]=0;
			buff[4]=0;
			//UART0_Transmitstr("OK!");  
			//CR;
		}
		else//crc16校验失败
		{
			if(acquisition_n<Communication)
			{
			//UART0_Transmitstr("error");  
			//CR;
				acquisition_n++;
				if((acquisition_n==Communication)&( exce==0))
				{
					sms_counts(9);//通讯故障
					 exce=1;
				}
			}
		}
	}
}
//***********************定时发送监测数据**************//
void Communication_tx(void)
{
if(--Communication_time==0)
			{
			    exce=0;
				if(power_ls==0)
				{
					if(acquisition_n==Communication)
					{
						sms_counts(9);//通讯故障
					}
					else
					{
						sms_counts(5);//发送状态报告
					}
				}
				else
				{
					sms_counts(21);//发送电源报告
				}
				eeprom_busy_wait();
				Communication_time=eeprom_read_byte (&E_Communication_time);//通讯间隔
				if((signal_c==0)&(addr_e==0))//防止CPU复位后,SIM接触不良
				{
					SET_POW_ON_OFF;//关闭5V电源
					DelayMs(5000);
					CLR_POW_ON_OFF;//开启5V电源
					DelayMs(1000);
					UART0_Transmitstr("AT^SMSO"); //关闭TC35,SMS.C会使TC35重启
					CR;
				}	
			}
}
//************************************************
//END




⌨️ 快捷键说明

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