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

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

?? f340_modbus.c

?? 單片機Modebus主站程序 MCU:C8051F340
?? C
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
// F340_modbus.c			Modbus Master
//-----------------------------------------------------------------------------
//
// Program Description:
//
// 完成Modbus協(xié)議的部分功能:
// 功能碼	功能描述				可用數(shù)量
//-------------------------------------------
// 01		讀取線圈狀態(tài)(多位)		
// 02		讀取輸入狀態(tài)(多位)		共128
//-------------------------------------------
// 03		讀取保持寄存器(多字)
// 04		讀取輸入寄存器(多字)	共16
//-------------------------------------------
// 05		強置單線圈,支持廣播方式
// 06		預(yù)置單寄存器,支持廣播方式
//-------------------------------------------
// 08		回送診斷(原幀回傳)
//-------------------------------------------
// 15		強置多線圈				共128
// 16		預(yù)置多寄存器			共16
//-------------------------------------------
// Target:         C8051F340
// Tool chain:     Keil C51 7.10 
// Command Line:   None
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f340.h>                 	// SFR declarations
#include <compiler_defs.h>
#include <modbus.h>
#include <crc.h>
//-----------------------------------------------------------------------------
// Global Constants
//-----------------------------------------------------------------------------
#define SYSCLK       48000000          	// Internal oscillator frequency in Hz
U8  xdata SetCoil[5][4];				//位地址5*32
U16 xdata SetReg[5][16];				//字地址5*16
U16 xdata SetReg0;
extern U8 menu_brChange;				//波特率改變寄存器:0-5

sbit b485Send  = P3^2;					//485 發(fā)送接收控制
bit  bMB_idle;							//=0:Modbus空閑;=1:Modbus占用

U8	xdata sendBuf[64],receBuf[64]; 		//發(fā)送接收緩沖區(qū)
U8	checkoutError;						// ==2 偶校驗錯  
U8	receTimeOut;						//接收超時:開始接收后規(guī)定時間內(nèi)未收到數(shù)據(jù),已收數(shù)據(jù)無效
U8  MB_BroadTimer;						//廣播計時器:廣播發(fā)送數(shù)據(jù)后,產(chǎn)生固定延時,再回到空閑
U16 MB_TimeOut;							//Modbus超時:發(fā)送數(shù)據(jù)后規(guī)定時間內(nèi)無響應(yīng),產(chǎn)生94號錯誤
U8  MB_ErrorCode;						//錯誤代碼:01:功能碼錯;02:地址錯;03:數(shù)據(jù)個數(shù)錯;
										//         92:CRC錯;93:響應(yīng)格式錯;94:無響應(yīng).
U8  MB_TestEcho;						//診斷結(jié)果回應(yīng)
U8  MB_c15done;							//code15功能 =S:發(fā)送指令,=15:完成發(fā)送,=0:功能完成
bit bMB_setup;							//MB設(shè)置:0:工作狀態(tài),1:設(shè)置狀態(tài);由通訊設(shè)置采單改變
U8  MB_SendNum;							//發(fā)送指令序號:工作狀態(tài)使用的指令序號,完成發(fā)送后+1
extern U8 menu_comm0_addr[6];			//通訊地址定義
extern U8 menu_comm0_test;				//通訊測試地址
extern U8 menu_brChange;				//波特率改變寄存器:0-5
extern U8 SignalSet;					//信號設(shè)置:高4位:清零;低4位:極性 		FRAM 11

U8	localAddr ;							//本機地址
U8	sendCount;							//發(fā)送字節(jié)個數(shù)
U8	receCount;	    					//接收到的字節(jié)個數(shù)
U8	sendPosi;	    					//發(fā)送位置
extern U8 menu_alarm_set[4];			//報警設(shè)置  數(shù)組									FRAM 284-287(4)
extern U8 FM_alarming[5];				//報警狀態(tài):0x00:無報警,0x0f:警告,0xff:報警
										//         0:重量,1:幅度,2:高度,3:角度,4:力矩
U8 MB_SetAlarm;							//從機報警設(shè)置
//-----------------------------------------------------------------------------
// UART0_ISR
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// 串行中斷程序:8-O-1
// 
//-----------------------------------------------------------------------------
void UART0_ISR(void) interrupt 4
{
	if(TI0)
	{
		TI0 = 0; 
		if(sendPosi < sendCount) 
		{
			sendPosi++;
			ACC = sendBuf[sendPosi];
			TB80 = P;					//加上校驗位
			SBUF0 = sendBuf[sendPosi];
		}
		else
		{
			b485Send = 0;    			//發(fā)送完后將485置于接收狀態(tài)
			receCount = 0;   			//清接收地址偏移寄存器
			checkoutError = 0;			//偶校驗清零
			if(sendBuf[0]==0) MB_BroadTimer=120;	//廣播計時
			else MB_TimeOut=1000;		//Modbus超時計時
		}
	}
	else if(RI0)
	{
		RI0 = 0;
		receTimeOut =0x40;    			//通訊超時值
		receBuf[receCount] = SBUF0;
		ACC = receBuf[receCount];
		if(P != RB80)checkoutError = 2;	//偶校驗出錯
		receCount++;          			//接收地址偏移寄存器加1
		receCount &= 0x3f;    			//最多一次只能接收64個字節(jié)
	}
}
//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configure the UART0 using Timer1, for 9600 and 偶校驗.
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
	SCON0 = 0xd0;                      	// SCON0: 9-bit variable bit rate
                                       	//        level of STOP bit is ignored
                                       	//        RX enabled
                                       	//        ninth bits 偶校驗
                                       	//        clear RI0 and TI0 bits
    TH1 = -(SYSCLK/9600/2/48);
    CKCON &= ~0x0B;                  	// T1M = 0; SCA1:0 = 10
    CKCON |=  0x02;
   	TL1 = TH1;                          // init Timer1
   	TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
   	TMOD |=  0x20;
   	TR1 = 1;                            // START Timer1
   	ES0 = 1;                            // Enable UART0 interrupts
	SetReg0=0;							// SetReg0:0:9600;
	menu_brChange=0;
}
//-----------------------------------------------------------------------------
// BaudRateChange
//
// Return Value : None
// Parameters   : None
//
// 運行中改變波特率
//
// SetReg[0]:0:9600;1:4800;2:14400;3:19200;4:115200;5:230400
// SetReg[0]由Modbus主控設(shè)備設(shè)置,主機必須同時改變波特率
//-----------------------------------------------------------------------------
void BaudRateChange (void)
{
	static U16 NoChange;
	if (SetReg0 != NoChange  && bMB_idle == 0)//只在SetReg[0]改變與空閑時執(zhí)行				
	{										
		switch(SetReg0)
		{
			case 0:	CKCON &= ~0x0b;	CKCON |= 0x02;TH1 = -(SYSCLK/9600/2/48);break;	//9600
			case 1:	CKCON &= ~0x0b;	CKCON |= 0x02;TH1 = -(SYSCLK/4800/2/48);break;	//4800
			case 2:	CKCON &= ~0x0b;	TH1 = -139;	break;		//-(SYSCLK/14400/2/12);	//14400
			case 3:	CKCON &= ~0x0b;	TH1 = -(SYSCLK/19200/2/12);	break;				//19200
			case 4:	CKCON |= 0x08;	TH1 = -(SYSCLK/115200/2);	break;				//115200
			case 5:	CKCON |= 0x08;	TH1 = -(SYSCLK/230400/2);	break;				//230400							
			default:break;
		}
		NoChange = SetReg0;
	}
}
//-----------------------------------------------------------------------------
// CRC16
//-----------------------------------------------------------------------------
U16 crc16(U8 *puchMsg, U16 usDataLen) 
{ 
	U8 uchCRCHi = 0xFF ; 								//高CRC 字節(jié)初始化  
	U8 uchCRCLo = 0xFF ; 								//低CRC 字節(jié)初始化
	U32 uIndex ; 										//CRC循環(huán)中的索引 
	while (usDataLen--) 								//傳輸消息緩沖區(qū) 
	{ 
		uIndex = uchCRCHi ^ *puchMsg++ ; 				//計算CRC 
		uchCRCHi = uchCRCLo ^ auchCRCHi[uIndex] ; 
		uchCRCLo = auchCRCLo[uIndex] ; 
	} 
	return (uchCRCHi << 8 | uchCRCLo) ; 
}
//-----------------------------------------------------------------------------
// MB_DataProc_step								數(shù)據(jù)處理
//-----------------------------------------------------------------------------
void MB_DataProc_step(void)
{
	if(MB_c15done==15){SignalSet=(char)SetReg[0][11];MB_c15done=0;}	//信號設(shè)置完成	
	
}
//-----------------------------------------------------------------------------
// Modbus_CommandSend
//
// Modbus
//
// Parameters   :addr地址:00廣播,01采樣,02行走,03變幅,04回轉(zhuǎn),05起升
//				 func功能碼:01讀取多線圈,03讀取多寄存器,06設(shè)置單寄存器,08診斷
//				 num :func 01,03:元件個數(shù) func06,08:數(shù)據(jù)內(nèi)容
// Return Value :none
//
//-----------------------------------------------------------------------------
void Modbus_CommandSend(unsigned char addr,func,num)
{
	UU16 crcData;
	sendBuf[0]=addr;					//從機地址		
	sendBuf[1]=func;					//功能碼:
	sendBuf[2]=0;sendBuf[3]=0;			//起始地址
	sendBuf[4]=0;sendBuf[5]=num;		//元件個數(shù)
	crcData.U16 = crc16(sendBuf,6);		//CRC
	sendBuf[6]=crcData.U8[MSB];			//CRC高字節(jié)
	sendBuf[7]=crcData.U8[LSB];			//CRC低字節(jié)
	sendCount = 8;						//發(fā)送字節(jié)數(shù)
	beginSend();						//開始發(fā)送
}
//-----------------------------------------------------------------------------
// Modbus_DataSend
//
// Modbus
//
// Parameters   :addr地址:00廣播,01采樣
//				 func功能碼:15設(shè)置多線圈(16),16設(shè)置多寄存器(1word)
//				 Saddr:數(shù)據(jù)起始地址(word)
//				 dat  :數(shù)據(jù)內(nèi)容(word)
// Return Value :none
//
//-----------------------------------------------------------------------------
void Modbus_DataSend(unsigned char addr,func,unsigned int Saddr,dat)
{
	UU16 crcData;
	sendBuf[0]=addr;							//從機地址		
	sendBuf[1]=func;							//功能碼:
	sendBuf[2]=Saddr>>8;sendBuf[3]=(char)Saddr;	//起始地址
	sendBuf[4]=0;sendBuf[5]=16;					//元件個數(shù)
	sendBuf[6]=2;								//字節(jié)個數(shù)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲午夜电影| 欧美在线小视频| 日日夜夜免费精品| 欧美亚洲尤物久久| 日韩一级免费一区| 久久国产三级精品| 久久久久久亚洲综合影院红桃| 国产一区二区三区蝌蚪| 91论坛在线播放| 亚洲精品成人精品456| 欧美专区在线观看一区| 色哟哟一区二区在线观看 | 丝袜亚洲另类丝袜在线| 国产精品色眯眯| 2023国产一二三区日本精品2022| 欧美性做爰猛烈叫床潮| 99久久免费视频.com| 精品亚洲成av人在线观看| 首页国产欧美日韩丝袜| 亚洲婷婷在线视频| 久久无码av三级| 日韩欧美一级片| 欧美蜜桃一区二区三区| 色婷婷精品大视频在线蜜桃视频| 岛国一区二区在线观看| 国产成人亚洲精品狼色在线| 青青草一区二区三区| 亚洲成人久久影院| 亚洲成av人影院| 玉足女爽爽91| 亚洲欧美另类久久久精品2019| 亚洲国产激情av| 中日韩av电影| 中文字幕成人在线观看| 日本一区二区电影| 国产精品日产欧美久久久久| 国产精品素人一区二区| 日本一区二区三区在线观看| 国产视频亚洲色图| 欧美极品美女视频| 国产精品久久久久影院| 国产精品你懂的在线| 国产精品成人一区二区艾草| 中文字幕精品三区| 国产精品久久午夜夜伦鲁鲁| 国产精品美女久久久久av爽李琼 | 欧美日韩三级视频| 欧美色视频在线观看| 欧美性猛交一区二区三区精品| 欧美性色综合网| 91精品啪在线观看国产60岁| 日韩一级黄色片| 久久久精品蜜桃| 国产日韩欧美电影| 国产精品日产欧美久久久久| 亚洲婷婷在线视频| 午夜国产不卡在线观看视频| 日本va欧美va瓶| 韩国理伦片一区二区三区在线播放 | 在线观看中文字幕不卡| 7777精品伊人久久久大香线蕉超级流畅| 91精品国产综合久久香蕉的特点| 日韩精品一区二区三区在线观看| 久久一夜天堂av一区二区三区| 日本一区二区三区久久久久久久久不 | 日韩视频在线一区二区| 精品日韩欧美一区二区| 国产日韩欧美精品在线| 一个色妞综合视频在线观看| 日韩精品福利网| 国产美女视频91| 91丝袜呻吟高潮美腿白嫩在线观看| 在线一区二区三区四区五区| 91精品欧美一区二区三区综合在 | 成人一二三区视频| 日本国产一区二区| 欧美mv日韩mv亚洲| 国产精品久久久久久妇女6080| 亚洲二区视频在线| 国产在线不卡一区| 91蝌蚪porny成人天涯| 777久久久精品| 国产精品国产三级国产三级人妇| 亚洲444eee在线观看| 狠狠色综合日日| 欧洲精品在线观看| 久久夜色精品一区| 亚洲午夜视频在线观看| 国产成人精品亚洲777人妖| 91高清视频免费看| 久久亚洲私人国产精品va媚药| 亚洲免费观看高清完整| 狠狠色丁香婷婷综合久久片| 欧美在线观看你懂的| 久久亚洲春色中文字幕久久久| 亚洲愉拍自拍另类高清精品| 国产精品一区二区免费不卡| 欧美日韩黄色一区二区| 日本一区免费视频| 麻豆精品久久久| 欧美视频日韩视频| 中文字幕精品一区| 捆绑调教美女网站视频一区| 色婷婷国产精品综合在线观看| 久久夜色精品一区| 免费观看成人av| 欧美优质美女网站| 中文字幕中文乱码欧美一区二区 | 中文字幕视频一区| 精品系列免费在线观看| 欧美日韩在线亚洲一区蜜芽| 中文乱码免费一区二区| 久久91精品国产91久久小草| 欧美视频在线一区| 亚洲免费av网站| 99国产精品久久| 国产精品乱码人人做人人爱| 国产一区二区91| 欧美xxxxxxxx| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美中文字幕一区二区三区亚洲 | 久久 天天综合| 欧美一区二区视频免费观看| 一区二区久久久久| 不卡视频免费播放| 亚洲国产精品v| 成人免费视频播放| 国产农村妇女毛片精品久久麻豆| 国产一区欧美一区| 久久综合久久久久88| 精品亚洲国产成人av制服丝袜| 91精品免费观看| 麻豆91免费观看| 欧美tk—视频vk| 紧缚奴在线一区二区三区| 欧美大片一区二区| 国产呦萝稀缺另类资源| 精品国产青草久久久久福利| 蓝色福利精品导航| 日韩欧美中文字幕公布| 激情五月婷婷综合| 国产婷婷色一区二区三区 | 制服.丝袜.亚洲.中文.综合| 天堂资源在线中文精品| 欧美一区二区日韩| 精品在线免费视频| 久久精品亚洲国产奇米99| 精油按摩中文字幕久久| 久久精品人人爽人人爽| 成人午夜av电影| 最近中文字幕一区二区三区| 色噜噜夜夜夜综合网| 天天综合天天做天天综合| 日韩欧美的一区| 国产一区二区三区四区五区美女 | 国产91精品露脸国语对白| 国产精品国产自产拍在线| 色婷婷综合激情| 日韩和欧美一区二区| 欧美精品一区二区三区很污很色的| 国产精选一区二区三区| 18成人在线视频| 欧美日韩高清一区| 激情久久五月天| 亚洲精品日日夜夜| 宅男噜噜噜66一区二区66| 国产一区二区三区免费观看| 亚洲三级小视频| 67194成人在线观看| 国产另类ts人妖一区二区| 中文字幕一区二区三区蜜月 | 欧美一级片在线看| 国产精品18久久久久久vr| 专区另类欧美日韩| 7777女厕盗摄久久久| 国产69精品一区二区亚洲孕妇| 一区二区三区日韩精品视频| 日韩三级高清在线| 99久久er热在这里只有精品66| 午夜精品影院在线观看| 国产日韩综合av| 欧美色欧美亚洲另类二区| 国产精品夜夜嗨| 亚洲国产日日夜夜| 国产欧美一区在线| 欧美夫妻性生活| 99精品一区二区| 国产在线精品一区二区不卡了| 亚洲激情图片一区| 国产亚洲一区字幕| 538在线一区二区精品国产| jizzjizzjizz欧美| 极品少妇一区二区三区精品视频| 亚洲免费观看在线视频| 久久这里只有精品6| 制服.丝袜.亚洲.中文.综合| 99久久综合狠狠综合久久| 久久精品99国产精品| 亚洲一区二区免费视频| 中文字幕亚洲精品在线观看|