亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 用來pdu編解碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**************************************************************************
文件名: main.c
功能  :數據透傳
時間  :2005.11.18
程序員:yangxb
NCUtype:MEGA128
GPRStype:IPCOM100   


2007-5-30 20:04 	+ 串口功能打通

				 	+ 將串口緩沖區擴展到2*200字節
				 	
2007-5-31 7:49      + 修改短信協議,支持7bit,8bit編碼/解碼	

2007-6-16 14:51     + 引入了具有printf功能的輸出函數dprintf0,dprintf1

2007-6-16 18:24		+ 實現了部分console命令

2007-6-17 17:44     + 實現了140字節短信發送

2007-6-17 18:49     + 對中心命令和終端相應進行了測試

2007-6-18 1:08		+ 重新設計了console口的命令處理
					+ 實現了data模式和console模式的轉換
					
2007-6-20 0:14      + 在響應中加入校驗和

2007-6-20 2:16      + 實現了eeprom中參數的讀/寫

2007-6-21 17:29     + 實現了console中大部分命令,包括查詢和設置
**************************************************************************/

#include 	<main.h>

int main (void)
{			
	sysInit();
	
	for(;;)
	{	
		//AD采樣
		delay_s(10);
		ADC_Process();
		
//		//終端事件處理
//		tmEventProcess();
//		
//		//處理上行緩沖區數據
//		DealUpData();
//		
//		//處理下行緩沖區數據
//		DealDownData();		
	}
}
/*--------------------------------------------------------------------------
系統初始化    
--------------------------------------------------------------------------*/
void sysInit(void)
{
	ioint();
	varint();
		
	SysPara.Started = 0;		
	RunMsgPrintf("reboot");
	
	delay_s(1);	
	RunMsgPrintf("正在對系統初始化...");

	ParaInit();
	
	//GSM初始化
	while(GsmInit()==0);
	
	//清空緩沖區
	ClearUpBuff();
	ClearDownBuff();
	delay_s(1);
	RunMsgPrintf("系統初始化完成,進入正常工作狀態");
	SysPara.Started = 1;	
	
}
/*--------------------------------------------------------------------------
	功能:io初始化    
--------------------------------------------------------------------------*/
void ioint(void)
{		
		DDRC=0xff ;

		UBRR0H=0;		
		UBRR0L=23;//19200,接RS-232
		UCSR0B=(1<<RXEN0)|(1<<RXCIE0)|(1<<TXEN0);
		UBRR1H=0;		
		UBRR1L=3;//115200
		UCSR1B=(1<<RXEN1)|(1<<RXCIE1)|(1<<TXEN1);
		TIMSK=(1<<TOIE0);
		TCCR0=0x07;
		TCNT0=180 ;

		sei();
}

/*--------------------------------------------------------------------------
	功能:變量初始化    
--------------------------------------------------------------------------*/
void varint(void)
{		
		int n ;
		
		UpBuf.BufBegin = 0 ;
		UpBuf.BufEnd = 0 ;
		for(n=0;n<UpBufMax;n++)
		{
			UpBuf.Buff[n].state= writeonly ;			
		}
		DownBuf.BufBegin = 0 ;
		DownBuf.BufEnd = 0 ;
		for(n=0;n<DownBufMax;n++)
		{
			DownBuf.Buff[n].state=writeonly ;	
		}
		SysPara.U0_Mod = U0_WM_DATA;
}

/*-----------------------------------------------------------------------
UART0接收中斷服務函數
-----------------------------------------------------------------------*/
SIGNAL(SIG_UART0_RECV)
{
			unsigned char c;
			
			c=UDR0;

			if (UpBuf.Buff[UpBuf.BufEnd].state == writeonly) 
			{
				if(UpBuf.Buff[UpBuf.BufEnd].len<(MAXLEN-1))
				{
					UpBuf.Buff[UpBuf.BufEnd].data[UpBuf.Buff[UpBuf.BufEnd].len++] = c ; 
				}
				else
				{
					UpBuf.Buff[UpBuf.BufEnd].data[MAXLEN-1] = '\0' ; 
				}
				
				//console模式下
				if (SysPara.U0_Mod ==U0_WM_CONSOLE) 
				{
					UARTOnWork0.OnWork = 0;
					//回顯
					putChar0(c);
	
					//console口一次輸入完畢
					if (c == '\r')
					{
						UpBuf.Buff[UpBuf.BufEnd].data[UpBuf.Buff[UpBuf.BufEnd].len] = '\0' ; 
						UpBuf.Buff[UpBuf.BufEnd].state = readonly ;//可讀不可寫
			
						//將終止指針后移一項
						if ( UpBuf.BufEnd == (UpBufMax-1) ) 
						{
							UpBuf.BufEnd = 0  ;
						}
						else
						{
							UpBuf.BufEnd++ ;
						}																		
					}
				}
				else//數據模式下,由定時器來判斷數據結束
				{
					UARTOnWork0.OnWork = 1 ;
					UARTOnWork0.TimeClick = 1 ;//1*0.01m=10ms										
				}								
			}		
}
/*-----------------------------------------------------------------------
UART1接收中斷服務函數
-----------------------------------------------------------------------*/
SIGNAL(SIG_UART1_RECV)
{
	unsigned char c;
	
	c=UDR1;
	if (DownBuf.Buff[DownBuf.BufEnd].state == writeonly) 
	{
			UARTOnWork1.OnWork = 1 ;
			UARTOnWork1.TimeClick = 1 ;//1*0.01m=10ms
			
			if(DownBuf.Buff[DownBuf.BufEnd].len<(MAXLEN-1))
			{
				DownBuf.Buff[DownBuf.BufEnd].data[DownBuf.Buff[DownBuf.BufEnd].len++] = c ; 
			}
	}
}

/*-----------------------------------------------------------------------
TIMER0中斷服務函數:判斷一包數據接收是否結束,如果結束,則將結束指針后移一位
[note]在中斷函數中不要使用具有阻塞性質的程序段
-----------------------------------------------------------------------*/
ISR ( TIMER0_OVF_vect )
{	
	
	TCNT0 = 180 ;
	if (UARTOnWork0.OnWork ==1 )
	{
		if (UARTOnWork0.TimeClick  !=0 )//正在接收數據
		{
			UARTOnWork0.TimeClick-- ;
		}
		else //接收完畢
		{
			UARTOnWork0.OnWork = 0 ;
			UpBuf.Buff[UpBuf.BufEnd].data[UpBuf.Buff[UpBuf.BufEnd].len] = '\0' ; 
			UpBuf.Buff[UpBuf.BufEnd].state = readonly ;//可讀不可寫

			//將終止指針后移一項
			if ( UpBuf.BufEnd == (UpBufMax-1) ) 
			{
				UpBuf.BufEnd = 0  ;
			}
			else
			{
				UpBuf.BufEnd++ ;
			}			
		}
	}
			
	if (UARTOnWork1.OnWork ==1 )
	{
		if (UARTOnWork1.TimeClick  !=0 )//正在接收數據
		{
			UARTOnWork1.TimeClick-- ;
		}
		else //接收完畢
		{
			UARTOnWork1.OnWork = 0 ;
			DownBuf.Buff[DownBuf.BufEnd].data[DownBuf.Buff[DownBuf.BufEnd].len] = '\0' ; 
			DownBuf.Buff[DownBuf.BufEnd].state = readonly ;//可讀不可寫
			//將終止指針后移一項
			if ( DownBuf.BufEnd == (DownBufMax-1) ) 
			{
				DownBuf.BufEnd = 0  ;
			}
			else
			{
				DownBuf.BufEnd++ ;
			}
		}
	}	
}
/*-----------------------------------------------------------------------
ADC中斷服務函數:
對每一路進行指定次數的轉換,轉換完畢后,置位轉換完成標志
-----------------------------------------------------------------------*/
ISR(ADC_vect)
{	

		ADC_data.AD_Channles[ADC_data.CurrChannel][ADC_data.CurrTimes] = (uint16_t)ADCL;
		ADC_data.AD_Channles[ADC_data.CurrChannel][ADC_data.CurrTimes] = (uint16_t)(ADCH<<8);		
		ADC_data.CurrTimes++;
		
		//轉換次數夠了,進行下一路
		if (ADC_data.CurrTimes == (ADCONVERTTIMES - 1))
		{
			ADC_data.CurrChannel++;
			
			if (ADC_data.CurrChannel == ADCHANNELMAX)
			{
				//關閉AD,停止轉換	
				CloseADC();
				//通知主程序轉換完畢
				ADC_data.finished = 1;
			}
			else
			{
				ADMUX = ADC_data.CurrChannel;	
				ADC_data.CurrTimes = 0;
			}						
		}
}
/*-----------------------------------------------------------------------
發送指定字節的數據到串口0
包括'\0'字符
-----------------------------------------------------------------------*/
void WriteUart0(unsigned char *data, int dataLen)
{
	int n ;
	
	for(n=0;n<dataLen;n++)
	{
		while ( !( UCSR0A & (1<<UDRE0)) );
		UDR0 = data[n] ;			
	}
}
/*-----------------------------------------------------------------------
發送指定字節的數據到串口1
包括'\0'字符
-----------------------------------------------------------------------*/
void WriteUart1(unsigned char *data, int dataLen)
{
	int n ;
	
	for(n=0;n<dataLen;n++)
	{
		while ( !( UCSR1A & (1<<UDRE1)) );
		UDR1=data[n] ;			
	}
}
/*-----------------------------------------------------------------------
通過串口1發送一個字符
用于回顯
-----------------------------------------------------------------------*/
void putChar1(char c)
{
	while ( !( UCSR1A & (1<<UDRE1)) );UDR1=c;			
}
/*-----------------------------------------------------------------------
通過串口0發送一個字符
用于回顯
-----------------------------------------------------------------------*/
void putChar0(char c)
{

	while ( !( UCSR0A & (1<<UDRE0)) );UDR0=c;	
		
}
/*------------------------------------------------------------------------
myprintf0 : 通過串口0發送字符串,串以'\0'結束	
輸入:帶發送字符串的指針
2007-6-15 23:37 changed by yxb
------------------------------------------------------------------------*/
void myprintf0(char *p)
{
	WriteUart0(p, strlen(p));	
}

/*------------------------------------------------------------------------
myprintf1 : 通過串口1發送字符串,串以'\0'結束
輸入:帶發送字符串的指針	
2007-6-15 23:37 changed by yxb
-----------------------------------------------------------------------*/
void myprintf1(char *p)
{
	WriteUart1(p, strlen(p));	
}
void RunMsgPrintf(char *info)
{
	if (SysPara.Started == 0)
	{
		dprintf0("\r\n#ZF> %s", info);	
	}
	else
	{
		if (SysPara.U0_Mod ==U0_WM_CONSOLE)
		{
			dprintf0("\r\n#ZF> %s", info);	
		}
	}	
}
/*---------------------------------------------------------------------------
處理上行數據緩沖區中的數據記錄
-----------------------------------------------------------------------------*/
void DealUpData(void)
{
	TBuff  Buff ;
	SM_PARAM MySM_PARAM;
	if (ReadUpBuf(&Buff) ==0 )return ;	//從數據緩沖區讀取一條數據記錄
		
	if (SysPara.U0_Mod ==U0_WM_CONSOLE)
	{
		if (Buff.data[0] =='D')
		{
			//進入數據模式
			myprintf0("\r\nenter into data mode\r\n");
			SysPara.U0_Mod = U0_WM_DATA;
		}
		else
		{
			ExplainConsoleCmd(Buff.data, Buff.len);	
			MySM_PARAM.TP_UDlen = centSimunator(Buff.data, MySM_PARAM.TP_UD);
			if (MySM_PARAM.TP_UDlen > 0)SendSms(&MySM_PARAM);
		}
	}
	else
	{
		if (Buff.data[0] =='C')
		{
			//進入console模式
			
			myprintf0("\r\nenter into console mode\r\n");
			myprintf0("\r\n#ZF> ");
			ClearUpBuff();
			SysPara.U0_Mod = U0_WM_CONSOLE;
		}
		{
			myprintf0(Buff.data);	
		}	
	}
}
/*---------------------------------------------------------------------------
處理下行數據緩沖區中的數據記錄
-----------------------------------------------------------------------------*/
void DealDownData(void)
{
	TBuff  Buff ;
	
	Buff.len = ReadDownBuf(Buff.data, MAXLEN);
	if ( Buff.len > 0)
	{
		RunMsgPrintf(Buff.data);
		CheckDownData(&Buff);
	}	
}
/*------------------------------------------------------------------------
功能:從緩沖區取出一條數據
返回: = 0 讀取失敗 =1 讀取成功
輸出:讀取到的數據
---------------------------------------------------------------------------*/
int ReadUpBuf(TBuff*p)
{
	if (UpBuf.Buff[UpBuf.BufBegin].state == writeonly )//當起始指針所指向的紀錄不可讀取時,有兩種可能
	{                                               //1 串口正在接收數據,但接收尚未結束,數據記錄不可讀取
		return (0) ;                                 //2 串口沒有接收數據,數據記里為空
	}
	
	strcpy((*p).data ,(UpBuf.Buff[UpBuf.BufBegin].data)) ;//從數據緩沖區讀取一條記錄后,需要修改當前記錄為可寫不可讀[使用變量而非指針]
	(*p).len = UpBuf.Buff[UpBuf.BufBegin].len ;
	UpBuf.Buff[UpBuf.BufBegin].len = 0 ;//清空緩沖區
	UpBuf.Buff[UpBuf.BufBegin].state = writeonly ;//可寫不可讀
	

	if ( UpBuf.BufBegin ==(UpBufMax-1))//將起始指針后移一位
	{
		UpBuf.BufBegin =0 ;
	}
	else
	{
		UpBuf.BufBegin++ ;	
	}
	if ((*p).len==0)
	{
		return (0) ;	
	}
	return (1) ;


}
/*------------------------------------------------------------------------
功能:從緩沖區取出一條數據
輸入:nsrclength=讀取的字節數
      PStr=讀取到的數據
返回: 讀取到的字節數
---------------------------------------------------------------------------*/
int ReadDownBuf(unsigned char *PStr , int nsrclength )
{
	int len;
	if (DownBuf.Buff[DownBuf.BufBegin].state == writeonly )//當起始指針所指向的紀錄不可讀取時,有兩種可能
	{                                               //1 串口正在接收數據,但接收尚未結束,數據記錄不可讀取
		return (0) ;                                 //2 串口沒有接收數據,數據記里為空
	}	

    myCopy( (DownBuf.Buff[DownBuf.BufBegin].data) , PStr , 0 , nsrclength ) ;
	
	len = DownBuf.Buff[DownBuf.BufBegin].len;
	DownBuf.Buff[DownBuf.BufBegin].len = 0 ;//清空緩沖區
	DownBuf.Buff[DownBuf.BufBegin].state = writeonly ;//可寫不可讀
	
	if ( DownBuf.BufBegin ==(DownBufMax-1))//將起始指針后移一位
	{
		DownBuf.BufBegin =0 ;
	}
	else
	{
		DownBuf.BufBegin++ ;	
	}
	
	return (len) ;


}
/*-----------------------------------------------------------------------
GsmReset		:重新啟動gsm
-----------------------------------------------------------------------*/
void GsmReset(void)
{
	PORTC=0 ;
	delay_s(1) ;
	PORTC=0x03;
	delay_ms(800);
	PORTC=0x01;	
	delay_ms(800);	
	PORTC=0x03;		
}
/*-----------------------------------------------------------------------
GprsOff		:關閉Gprs
-----------------------------------------------------------------------*/
void GsmOff(void)
{
	PORTA=0 ;
	delay_s(5);				
}
/*-----------------------------------------------------------------------
功能:GsmInit初始化
返回:=0 初始化失敗 =1 初始化成功
-----------------------------------------------------------------------*/
char GsmInit(void)
{	
		int num , kk, flag , len=0 ;
		unsigned char str[60] ;
	
		GsmReset();
		delay_s(5);
		ClearDownBuff () ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品91xxx| 日韩精品一区二区三区蜜臀| 欧美日韩免费在线视频| 欧美一区中文字幕| 亚洲欧美一区二区三区极速播放| 日本中文字幕一区二区有限公司| 国产精品一区二区91| 91精品福利在线一区二区三区 | 免费在线观看一区| 91麻豆国产在线观看| 久久这里只有精品6| 日本vs亚洲vs韩国一区三区 | 国产盗摄视频一区二区三区| 欧美日高清视频| 一区二区三区中文字幕| 99久久久免费精品国产一区二区 | 玉足女爽爽91| 成人av高清在线| 国产香蕉久久精品综合网| 蜜臀久久99精品久久久久宅男| 色欧美片视频在线观看在线视频| 国产欧美精品一区二区色综合| 秋霞成人午夜伦在线观看| 欧美日韩dvd在线观看| 亚洲午夜久久久| 欧美伊人久久久久久午夜久久久久| 中文字幕一区二| av中文字幕在线不卡| 最新日韩在线视频| eeuss鲁一区二区三区| 成人免费一区二区三区在线观看 | 亚洲欧美怡红院| 99久久婷婷国产| 亚洲精品午夜久久久| 色偷偷久久一区二区三区| 一区二区三区毛片| 欧美久久婷婷综合色| 日本美女一区二区三区视频| 日韩一区二区精品在线观看| 蜜臀av一级做a爰片久久| 欧美哺乳videos| 国产一区二区三区蝌蚪| 久久久99久久| 99久久国产综合精品女不卡| 一区二区三区四区在线免费观看 | 美国十次综合导航| 精品国产亚洲在线| 丁香婷婷综合色啪| 亚洲欧美在线另类| 欧美日韩成人在线| 国产真实精品久久二三区| 国产精品久久久久久久久果冻传媒| 色综合色狠狠综合色| 日本大胆欧美人术艺术动态| 精品电影一区二区三区| 99国产精品国产精品毛片| 亚洲一级在线观看| 久久夜色精品国产欧美乱极品| 成人av影视在线观看| 午夜久久福利影院| 国产午夜亚洲精品午夜鲁丝片| 色综合天天综合网天天狠天天| 亚洲成av人影院| 国产亚洲va综合人人澡精品| 在线精品视频免费播放| 麻豆久久一区二区| 亚洲三级在线看| 欧美不卡一区二区三区四区| 色综合久久综合网| 蜜臀精品一区二区三区在线观看| 中文字幕亚洲在| 精品国精品国产尤物美女| 91亚洲精华国产精华精华液| 日韩成人午夜精品| 亚洲人成人一区二区在线观看| 日韩欧美在线综合网| av中文字幕一区| 国产在线一区二区| 婷婷亚洲久悠悠色悠在线播放 | 91久久国产综合久久| 精油按摩中文字幕久久| 亚洲一区二区三区在线播放| xfplay精品久久| 欧美日韩精品一二三区| 成人午夜免费视频| 国内精品伊人久久久久av一坑 | 国产乱码精品一区二区三区忘忧草 | 亚洲男同性视频| 久久网站热最新地址| 欧美顶级少妇做爰| 一本大道综合伊人精品热热 | 久久精品国产精品亚洲综合| 亚洲在线免费播放| 国产精品福利一区| 久久久久99精品一区| 精品奇米国产一区二区三区| 欧美日韩亚洲另类| 欧洲激情一区二区| 99久久夜色精品国产网站| 成人自拍视频在线| 国产成人夜色高潮福利影视| 韩日av一区二区| 久久精品国产免费| 久草这里只有精品视频| 免费人成精品欧美精品| 亚洲成人久久影院| 亚洲在线视频一区| 亚洲国产aⅴ天堂久久| 日韩美女精品在线| 国产精品欧美久久久久无广告 | 奇米精品一区二区三区四区| 亚洲午夜激情网页| 亚洲成在人线在线播放| 亚洲影视在线播放| 亚洲v日本v欧美v久久精品| 亚洲一区二区三区国产| 亚洲成av人片在www色猫咪| 视频一区视频二区中文字幕| 日韩高清在线电影| 蜜桃视频一区二区三区在线观看| 日韩成人一级片| 精品一区二区三区在线观看国产| 久久se这里有精品| 国产成人在线视频网址| 成人丝袜18视频在线观看| 96av麻豆蜜桃一区二区| 欧洲国产伦久久久久久久| 欧美日韩美少妇| 欧美v日韩v国产v| 亚洲精品一区二区三区香蕉| 国产拍欧美日韩视频二区| 国产精品欧美精品| 一区二区三区精品在线观看| 日韩黄色免费电影| 久久疯狂做爰流白浆xx| 成人午夜在线视频| 91丨九色porny丨蝌蚪| 91国产精品成人| 日韩免费高清av| 国产欧美一区二区精品仙草咪| 自拍偷拍国产精品| 奇米色一区二区三区四区| 成人性色生活片免费看爆迷你毛片| 色网综合在线观看| 亚洲精品一区二区三区精华液 | 欧美日韩第一区日日骚| 精品久久久久久久久久久久久久久久久| 国产欧美精品一区二区色综合朱莉| 一区二区三区蜜桃网| 久久99精品国产.久久久久 | 国产一区二区三区免费看 | 国产91丝袜在线播放| 欧美伊人久久久久久久久影院| 欧美不卡在线视频| 一区二区在线看| 国产一区二区三区香蕉 | 成人精品亚洲人成在线| 91精品黄色片免费大全| 国产精品人妖ts系列视频| 日韩专区中文字幕一区二区| 成人做爰69片免费看网站| 欧美麻豆精品久久久久久| 国产精品精品国产色婷婷| 麻豆成人免费电影| 91美女视频网站| 久久亚洲一区二区三区明星换脸| 亚洲蜜臀av乱码久久精品蜜桃| 日本不卡在线视频| 日本高清不卡一区| 欧美国产欧美亚州国产日韩mv天天看完整| 夜夜嗨av一区二区三区网页| 国产一区在线视频| 在线成人免费视频| 亚洲女人的天堂| 不卡电影免费在线播放一区| 欧美成人福利视频| 日韩高清不卡一区| 欧美中文字幕久久| 亚洲欧美怡红院| 大白屁股一区二区视频| 欧美videos大乳护士334| 五月婷婷久久丁香| 欧美在线制服丝袜| 一区二区高清在线| 91美女片黄在线观看91美女| 国产精品久久久久久久久免费相片| 国产中文字幕一区| 久久亚洲欧美国产精品乐播 | 亚洲国产经典视频| 国产福利一区二区三区视频 | 99久久免费精品高清特色大片| 久久久99精品久久| 国产麻豆精品视频| 精品少妇一区二区三区在线播放| 日本亚洲三级在线| 91精品国产综合久久久久久久| 亚洲国产成人av好男人在线观看| 日本高清成人免费播放| 夜夜精品视频一区二区| 欧美午夜电影一区|