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

📄 main.c

📁 AVR atmega64串口驱动
💻 C
字号:

#define main_c
#include "main.h"
uchar kk[4]={0xff,0x03,0x40,0x21};
//***********************
 
void hex_bcd_32(unsigned long temp)
{
    uchar buf[]="00000000";
  	uchar a;
	for(a=8;a>0;a--)   //取出每位中的数据
		{
			buf[a-1]=temp%10+48;
			temp/=10;
		}
	UART0_Transmitstr(buf);
    CR; 	
}


void hex_bcd_16(uint temp)
{
    uchar buf[]="00000";
  	uchar a;
	for(a=5;a>0;a--)   //取出每位中的数据
		{
			buf[a-1]=temp%10+48;
			temp/=10;
		}
	UART0_Transmitstr(buf);
    CR; 	
}
//*******************工程进度列表***************************
//从应答器导入工程文件,2008/02/03
//2008/02/03硬件配置完成
//**********************************************************
//端口初始化
void port_init(void)
{
	PORTA = 0XFF;//上拉
	DDRA  = 0;
	
	PORTB=0; 									//DS1302带内部下拉电阻
    DDRB =0;//输出;
	
	
	PORTC =0;//免装拨码开关,具有GPS功能*/;//上拉
	DDRC  =0;//免装拨码开关,具有GPS功能
	
	//PORTC |= _BV(SUN)|_BV(ACC)|_BV(RTC)|_BV(TEST)|_BV(GPS);////上拉 正常
	//DDRC =0;//正常 (常用于HD-200B)
	
	PORTD |=_BV(uart1_RX);
	DDRD  |=_BV(uart1_TX);

	
	PORTE |=_BV(GSM_RX);
	DDRE  |= _BV(GSM_TX)|_BV(IGT);
	 
	PORTF =0;
	DDRF  = 0;
 
	PORTG |=_BV(POW_ON_OFF);
	DDRG  =0;
	
	
}

//变量初始化
void Variable_init(void)
{

  time100ms=0;         		//100ms 到=1
  time500ms=0;         		//500ms 到=1
  time1s=0;            		//1s    到=1
  time3s=0;            		//3s    到=1
  time30s=0;           		//30s   到=1
  exce=0;              		//异常报告禁止=1
  signal_c=0;          		//GSM进网=1
  adv_c=0;             		//电压异常 失败=1
  addr_e=0;            		//tc35 失败=1
  read_sms=0;          		//标记有新短信,主动处理一次
  sms_t=0;             		//正在发送短信 0=没有发送  
  error=0;
  ok=0;
  qu=0; 
  request_msm_to=0; 
  count30s=20;  
  WDT_C=0;
  Receiver_c=0;//接收机
  Transmitter_c=0;//发射机
  Frequency_c=0;//频率精度
}
//外中断初始化
void int_init(void)
{

}
//系统初始化
void init_devices(void)
{
	cli(); 						//禁止所有中断
	MCUCR  = 0x00;
	MCUCSR |= 0x80;				//禁止JTAG
	port_init();
	timer ();
	int_init();
	UART0_InitUART(9600);		//硬件串口0初始化
	UART1_InitUART(9600);	//串口1  9600,接收
	Variable_init();
	sei();//开全局中断
}

//--------------------------------------------------------------------- 
//主函数
int main(void)
{    
    wdt_enable(WDTO_2S);//启用看门狗,2S 
	init_devices();//系统初始化
	CPU_STATUS =MCUCSR;			//读取MCU控制和状态寄存器
    CPU_STATUS&=0x1F;
    switch (CPU_STATUS)
    {
    case (1<<WDRF):			//看门狗引起的复位?
        WDT_C=1;//标记看门狗复位,在密码发给我
        break;
    default:				//多种复位同时发生?
    break;
    }
    MCUCSR=0x80;			//清除标志位	
	sms_counts(14);//密码qu
    sms_counts(8);//上电报告
	sms_counts(5);//发送状态报告
	clr_ds18b20_dq();
	set_ds18b20_dq_ddr();
	convert_ds18b20();			//DS18B20初始化
	eeprom_read();//调入初始设置
	read_temperature();		//读温度
	adv_m=27.5*AdcConvert(ADC_POW);  //电源电压
	Condition_control();               //状态控制
	CLR_IGT;//GSM开机
    DelayMs(100);
    SET_IGT;//拉高
	DelayMs(1000);
	UART0_Transmitstr("应答器遥测启动");  
	CR;  
	DelayMs(500);
	while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //清空接收区
	while(1)
	{	

		if(time100ms==1)
		{
			time100ms=0;	
			wdt_reset();//复位看门狗
		}
		if(time500ms==1)
		{
			time500ms=0;
			wdt_reset();//复位看门狗
			sms_event_circulation ();  //监测发送短信
		}
		if(time1s==1)
		{
			time1s=0;
			wdt_reset();//复位看门狗
			Condition_control();               //状态控制
			read_sms_1();                      //接收解码短信		
		}
		if(time3s==1)
		{
			time3s=0;	
			wdt_reset();//复位看门狗		
            read_inbuf();                //检查新的短信息
			//UART0_Transmitstr("温度:"); 
			//hex_bcd1(temper);
			//UART0_Transmitstr("电压:"); 
			//hex_bcd1(adv_m);
			//Data_acquisition();//应答器数据采集
		}
		if(time30s==1)
		{
			time30s=0;
			wdt_reset();					//复位看门狗
			read_sms=1; 					//轮寻读取短信
			write_addr();                   //短信中心	 ok
			tc35_count ();					//TC35初始化
		//*******************************************************		
			//signal_c=1;//测试,不用装卡发短信
		   // addr_e=1;//测试,不用装卡发短信
		//*******************************************************
	    }
		if(time1m==1)
		{
			time1m=0;
			Charge_Control();//充电控制
			Data_acquisition();//应答器数据采集
		}
		if(time1h==1)
		{
			time1h=0;
			Communication_tx();//定时发送监测数据
		}
    }
}





⌨️ 快捷键说明

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