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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? modbus.c

?? 使用Atmel88芯片實現(xiàn)RS485通訊,Modbus通訊協(xié)議.在IVR_AVR環(huán)境中編譯,文件完整.
?? C
字號:
//modbus.c         
#include <iom48v.h>        
#include <macros.h>            
#include "main.h"            
#include "modbus.h"         
#include "timer2.h"  
#include "led.h"

#define LocalAddr 0x01          
#define TRUE 1                                   
#define FLASE 0                               
volatile uchar sendPosi,sendCount;             
uchar receCount;                    
volatile uchar GetCntTemp;                  
 uchar sendBuf[16];                          
 uchar receBuf[16];                           
volatile uchar checkoutError;	//校驗結(jié)果     
 uchar receTimeOut;				//接收超時     
                 
uchar GetKeyValue;
uint crc_result;

 uint testVarAnalog;
 uint testVarPoint;
 uint testVarInputUp;
 uint testVarInputDown;
				 
// UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9615 (0.2%)
void uart0_init(void)
{
  UCSR0B = 0x00; //disable while setting baud rate
  UCSR0A = 0x02;		// 0x02;
  UCSR0C = 0x3E; //奇校驗 2個停止位. 
  UBRR0L = 0x67; //set baud rate lo.
  UBRR0H = 0x00; //set baud rate hi.
// UCSR0B = 0xB8; //bit3 send enable.
  UCSR0B = 0b10010000;             
// UCSR0B &= ~BIT(TXCIE0); //RXCIE0 清零.
// UCSR0B &= ~BIT(TXEN0);  //TXEN0 清零.
}//void uart0_init(void)


void beginSend(void)
{
//sendEnable();    //設(shè)為發(fā)送.
	sendPosi = 0;
	if(sendCount > 1)
	    sendCount--;
//	TX9D = ParityBit(sendBuf[0]);
	UDR0 = sendBuf[0];
	//UCSR0B |= BIT(UDRIE0);       //  TXIE = 1;       //使能發(fā)送中斷. 
	UCSR0B |= BIT(TXCIE0);
	UCSR0B |= BIT(TXEN0);		   //  TXEN = 1;		//使能發(fā)送
//	TXIE = 1;     
//	CREN = 1;
//	RCIE = 1;
//	CREN = 0;
//	RCIE = 0;
}//void beginSend(void)

/*
void singleKeyTranmit(void)
{
	sendBuf[0] = 0x12;	 
	sendBuf[1] = 0x34;	 
	sendBuf[2] = 0x56; 
	sendBuf[3] = 0x78; 
	sendBuf[4] = 0x90; 
	sendCount = 5;   //發(fā)送字節(jié)長 
	beginSend(); 
} 
*/


//單鍵值處理 
void singleKeyTranmit(void) 
{ 
	sendBuf[0] = 0xff;	
	sendBuf[1] = 0xaa;	
	sendBuf[2] = 0x55;	                //0x55 校驗確認回復. 
   	crc_result = CRC16(sendBuf,3);	
    sendBuf[3] = (uchar)(crc_result&0x00ff);      // Lo byte. 
	sendBuf[4] = (uchar)((crc_result&0xff00)>>8); // Hi byte. 
//--------
	sendCount = 5;   
//----------
	beginSend();   
}  
 
 
// 從站接受信息幀處理 
void ReceiveFrameDisFun(void) 
{
 	if(receCount>4)
	{	 
		 		switch(receBuf[1])     	    //byte 2: Command byte.
				{	
					case 0:	
				 		  	break;
					case 1:	
							break;
					case 3: //請求變量
					 
					    if(receCount >= 8)
						{	
						  //PORTC ^= 0x02;    
						
     						if(receBuf[0]==LocalAddr && checkoutError==0) 
							{
								if(RecFrameCheck(&receBuf[0],receCount))
								{ //校驗正確
				                     readRegisters();
									 LedShowLink = 1717;
								}  
							}
		    				receCount = 0;	
			    			checkoutError = 0;	
						}
				 
							break;
					
					case 5:
							break;
					
					case 0xaa:
						// PORTC ^= 0x02;        
						if(receCount >= 5)         
						{              
						//   PORTC ^= 0x02;       
							if(receBuf[0]==LocalAddr && checkoutError==0) 
							{
							 //  PORTC ^= 0x02;
								if( RecFrameCheck(receBuf,5) )     
								{//校驗正確							
								//	PORTC ^= 0x02;												
					 				GetKeyValue = receBuf[2]; 
					  	     		LedShowLink = GetKeyValue;	
					   			singleKeyTranmit(); 
						 		}	                        
							} //if(receBuf[0]==LocalAddr && checkoutError==0) 
						receCount = 0;	
						checkoutError = 0;	
					    } 
							break;
                                 
					default:
					    	break;	 	// 錯誤功能碼處理.
				}	//switch(receBuf[1]) 
	}	//	if(receCount>4)
	NOP();	
}  //void ReceiveFrameDisFun(void)


uchar RecFrameCheck(uchar *p_CheckData,uchar GetCntTempBuf)
{	
	uint CRCWord;	
	CRCWord = *(p_CheckData+(GetCntTempBuf-1)) + 
					(*(p_CheckData+(GetCntTempBuf-2))<<8); 
//	CRCWord = *(p_CheckData+(GetCntTempBuf-2)) + 
//				(*(p_CheckData+(GetCntTempBuf-1))<<8); 				
	if(CRCWord == CRC16(p_CheckData,GetCntTempBuf-2))	 
	{
		return TRUE;
	}
	else
	{
		return FLASE;
	}
}//uchar RecFrameCheck(uchar *p_CheckData,uchar GetCntTempBuf)	




//
MyWord CRC16(MyByte *data,int iLength)
{   
 	MyByte CRC16Lo,CRC16Hi;
    MyByte CL,CH;
 	MyByte SaveHi,SaveLo;
	int i,Flag;
    
	CRC16Lo = 0xff;
	CRC16Hi = 0xff;
	CL = 0x01;
	CH = 0xa0;
	for(i=0; i<iLength; i++)
	{
		CRC16Lo = CRC16Lo ^ data[i];
		for( Flag=0; Flag<=7; Flag++)
		{
			SaveHi = CRC16Hi;
			SaveLo = CRC16Lo;
			CRC16Hi = CRC16Hi>>1;
			CRC16Lo = CRC16Lo>>1;

			if((SaveHi&0x01) == 0x01)
			   CRC16Lo = CRC16Lo|0x80;

			if((SaveLo&0x01) == 0x01)
			{
				CRC16Hi = CRC16Hi ^ CH; //
				CRC16Lo = CRC16Lo ^ CL; //
			}
		}
	}
	return(CRC16Hi<<8 | CRC16Lo);
}//MyWord CRC16(MyByte *data,int iLength).


//讀寄存器
void readRegisters(void)
{
	uint addr;
	uint  tempAddr;
	uint  result;
	uint  crcData;
	uchar readCount;
	uchar byteCount;
	uchar finsh;	//1完成  0出錯
	uint  i;
  	uint  tempData = 0;	
	
    //起始地址 40001 (0x9c41)   
	addr = (receBuf[2]<<8) + receBuf[3];
	
	//tempAddr = addr & 0xfff;
	//addr = receBuf[3];
	tempAddr = addr;
	
    readCount = (receBuf[4]<<8) + receBuf[5];	//要讀的個數(shù)
	//readCount = receBuf[5];
	
	byteCount = readCount * 2;
	
	for(i=0;i<byteCount;i+=2,tempAddr++)
	{
		getRegisterVal(tempAddr,&tempData);
		sendBuf[i+3] = tempData >> 8;
		sendBuf[i+4] = tempData & 0xff;
	}
	
	sendBuf[0] = 0xff;
	sendBuf[1] = 3;
	sendBuf[2] = byteCount;
	byteCount += 3;
	crcData = CRC16(sendBuf,byteCount);
	sendBuf[byteCount] = crcData >> 8;
	byteCount++;
	sendBuf[byteCount] = crcData & 0xff;
//----------
  	sendCount = byteCount + 1;
//	sendCount = 7;
//----------
	beginSend();
}//void readRegisters(void)


//取寄存器值 返回0表示成功
uint getRegisterVal(uint addr,uint *p_tempData)
{
	uint  result = 0;
	uint  tempAddr;

//	tempAddr = addr & 0xfff;
	addr = addr - 40000;	
	switch(addr)                 //(tempAddr)          // & 0xff)
	{
		case 0:
				break;
		case 1:
			 	*p_tempData = testVarAnalog;	// 模擬量當前值.	
				break;
		case 2:		
		    	*p_tempData = testVarPoint;   // 小數(shù)點位置.
				break;		
		case 3:
			 	*p_tempData = testVarInputUp; //  上限.
				break;		
		case 4:
	        	*p_tempData = testVarInputDown;// 下限. 
				break;		
		case 5:
				break;
		case 6:
				break;			
		case 7:
				break;		
		case 8:
				break;		
		case 9:
				break;  
		case 10:
				break;
		case 11:
				break;
		case 12:
				break;
		case 13:
				break;
		case 14:
				break;
		case 15:
				break;
		case 16:
				//*tempData = testRegister;
				break;
		default:
				break;
	}
	return result;
}//uint16 getRegisterVal(uint16 addr,uint16 &data)
 

 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本精品视频一区二区三区| 56国语精品自产拍在线观看| 国产精品一区专区| a级精品国产片在线观看| 欧美亚洲国产一区在线观看网站| 日韩精品一区二区三区在线| 亚洲免费三区一区二区| 激情亚洲综合在线| 欧美日韩一区二区三区四区五区| 国产日本欧美一区二区| 日日嗨av一区二区三区四区| av在线不卡免费看| 一二三区精品福利视频| 国产成人啪免费观看软件| 91精品国产黑色紧身裤美女| 一区二区三区在线视频观看58| 欧美性一级生活| 日本三级亚洲精品| 欧洲精品中文字幕| 婷婷综合久久一区二区三区| 国产成a人无v码亚洲福利| 欧美精品123区| 亚洲欧美经典视频| 欧美区一区二区三区| 亚洲精品成人悠悠色影视| 粗大黑人巨茎大战欧美成人| 久久精品人人爽人人爽| 精品一区二区三区香蕉蜜桃| 555夜色666亚洲国产免| 国产黄色精品视频| 亚洲成av人片在www色猫咪| 日本精品视频一区二区| 美女视频一区二区三区| 日韩一级高清毛片| 日精品一区二区| 国产亚洲1区2区3区| 欧美三级中文字| 国产精品一二三四五| 国产精品一二三区| 亚洲欧美日本韩国| 日韩欧美123| 91在线视频免费91| 国产精品情趣视频| 成人午夜视频免费看| 琪琪久久久久日韩精品| 日韩久久免费av| 欧美在线一区二区三区| 不卡一区在线观看| 一区二区视频在线看| 久久色在线观看| 麻豆免费精品视频| 亚洲一区电影777| 91精品国产综合久久久久| av激情成人网| 国产精品一区二区久久不卡| 日韩综合小视频| 一区二区三区在线视频播放| 中文字幕国产一区| 91免费在线播放| 亚洲超丰满肉感bbw| 亚洲欧洲精品成人久久奇米网| 91福利在线观看| 色88888久久久久久影院野外| 欧美日韩国产一二三| 波多野结衣中文一区| 国内精品国产成人国产三级粉色| 亚洲香蕉伊在人在线观| 欧美三级在线看| 色婷婷亚洲综合| 麻豆极品一区二区三区| 亚洲成人先锋电影| 一区二区三区国产豹纹内裤在线| 国产精品久久久久久久午夜片| 欧美图片一区二区三区| 91麻豆文化传媒在线观看| 成人动漫一区二区| 国产精品自拍网站| 国产精品中文字幕一区二区三区| 国产精品一卡二卡| 国产99一区视频免费| 国产**成人网毛片九色| 欧美日韩精品一区二区天天拍小说 | 成人精品一区二区三区四区| 精品一区二区三区在线播放视频| 日本欧美久久久久免费播放网| 午夜精品爽啪视频| 日韩精品电影一区亚洲| 奇米亚洲午夜久久精品| 免费视频最近日韩| 激情综合色丁香一区二区| 国产在线一区观看| 懂色av中文一区二区三区| 丁香婷婷综合色啪| 成人黄色在线网站| 91官网在线免费观看| 欧美性猛交一区二区三区精品| 欧美精品tushy高清| 日韩美一区二区三区| 久久精品一区二区三区不卡| 国产精品久久影院| 一区二区三区四区蜜桃| 午夜欧美在线一二页| 韩国三级电影一区二区| av电影在线观看完整版一区二区| 欧亚一区二区三区| 日韩视频在线观看一区二区| 欧美极品xxx| 亚洲综合偷拍欧美一区色| 奇米综合一区二区三区精品视频| 国产在线不卡一区| 亚洲成人av福利| 久久精品99国产精品日本| 亚洲午夜激情av| 激情综合五月天| 99国产精品99久久久久久| 欧美久久一二三四区| 国产午夜精品在线观看| 亚洲一区在线免费观看| 久久99国产精品麻豆| 4438成人网| 国产精品国产三级国产aⅴ中文| 亚洲一区二区中文在线| 国产一区二区三区免费播放| 91福利视频网站| 久久综合精品国产一区二区三区| 亚洲精品视频在线观看免费| 老司机精品视频导航| 色偷偷久久人人79超碰人人澡| 日韩小视频在线观看专区| 亚洲欧美日韩一区二区 | 成人动漫中文字幕| 欧美三级三级三级爽爽爽| 久久老女人爱爱| 精品日产卡一卡二卡麻豆| 日韩欧美在线观看一区二区三区| 亚洲欧洲日韩一区二区三区| 精品亚洲成a人在线观看| 欧美亚洲一区二区在线| 国产精品久久久久影院色老大 | 亚洲欧美日韩国产一区二区三区 | 久久精品国产免费| 欧洲生活片亚洲生活在线观看| 国产视频在线观看一区二区三区 | 18涩涩午夜精品.www| 韩日av一区二区| 欧美一级一区二区| 亚洲成人高清在线| 一本色道久久综合亚洲精品按摩| 偷拍日韩校园综合在线| 91精品免费观看| 国产日韩v精品一区二区| 日韩精品久久理论片| 欧美视频精品在线| 一区在线播放视频| 国产大片一区二区| 日韩精品资源二区在线| 肉丝袜脚交视频一区二区| 在线精品视频免费观看| 一区二区三区在线免费视频| 色综合久久久久综合体桃花网| 国产精品区一区二区三| 成人在线一区二区三区| 中文在线一区二区| 成人一区在线观看| 国产精品午夜免费| 北条麻妃一区二区三区| 国产精品久久国产精麻豆99网站| 成人午夜免费电影| 中文天堂在线一区| 99久久综合色| 亚洲美女免费视频| 欧美日韩在线播放一区| 亚洲午夜精品网| 日韩一级免费观看| 狠狠久久亚洲欧美| 亚洲国产精品精华液ab| 成人免费看视频| 亚洲人123区| 欧美日韩你懂的| 日韩av一区二区三区| 日韩一区二区三| 国产精品一线二线三线精华| 中文av字幕一区| 99久久精品免费观看| 一区二区三区在线观看国产 | 欧美日韩一卡二卡三卡| 日韩和欧美一区二区三区| 精品国产乱码久久久久久影片| 亚洲日本在线观看| 国产精品一区二区无线| 国产精品久久久久桃色tv| 91同城在线观看| 日本vs亚洲vs韩国一区三区二区 | 丁香婷婷深情五月亚洲| 亚洲精品日产精品乱码不卡| 69av一区二区三区| 国产精品888| 亚洲综合丁香婷婷六月香| 日韩欧美国产一二三区| 成人av第一页|