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

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

?? rscomm.c

?? 串口通訊程序,這個程序給出一個參考,并且帶645協議部分
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <msp430x42x.h>
#include <string.h>
#include "inc\Port.h"
#include "inc\Common.h"
#include "inc\Type.h"
#include "inc\Interrupt.h"
#include "inc\General.h"
#include "inc\Mem.h"
#include "inc\Data.h"
#include "CDdata.c"

/*****************************************************************
	判斷是否是廣播操作 99999999
*****************************************************************/
int Addr_9_9( void )          
{
	char	i;
	for( i=2; i<6; i++ )
	     if( Comm.Buf[i] != 0x99 )    return -1; 
	return 0;
}
/*****************************************************************
	判斷是否為非法表號00000000
*****************************************************************/
int Addr_0_0( void )          
{
	char	i;
	for( i=2; i<6; i++ )
	     if( Comm.Buf[i] != 0x00 )    return -1; 
	return 0;
}
/*****************************************************************
	Get Communication Variable  獲取DI0,DI1對應的數據地址和長度
*****************************************************************/
int GetComVar( int* Addr, int* Info )
{
	int i, Tmp;

  	Tmp = ((int)Rs_IDH<<8)+ (int)Rs_IDL;      //D10,D11
  	for( i = 0 ; i < CommNum ; i++ )
		if( Tmp == ComTab[i].ComID )
		{
			*Addr = (int)ComTab[i].Addr;
			*Info = ComTab[i++].ComInfo;
			return 0;
		}
	return -1;
}
/*****************************************************************
	Read Data to 
*****************************************************************/
unsigned char Com_Read(void)
{
	int 	Addr, Info,Tmp;
	char	Len,MemType,EventNum,Total;
  	unsigned char Err_Byte=0;
 
        Tmp = ((int)Rs_IDH<<8)+ (int)Rs_IDL; 
        if( GetComVar( &Addr, &Info ) == -1 )     //數據標識錯     
        {
            Err_Byte |= RS_State_IVID;
            return  Err_Byte;
	}
        if( ( Info & EN_R ) == 0 )             //權限不夠,不可讀
	{
	    Err_Byte |= RS_State_RgtE;
	    return  Err_Byte;
	}     
        switch( Tmp )
        {
             case 0x7010:           //事件記錄
             case 0x7020: 
             case 0x7030: 
             case 0x7040: 
             case 0x7050: 
             case 0x7060: 
             case 0x7070: 
             case 0x7080: 
             case 0x7090: 
	               Len = Info & RS_LEN;
	               MemType = (Info>>6)&0x07;
                       MEM_Read( (char*)&Total, (long)Addr+1, 1, MemType );
                       if( Total==0 )
                       {
                            memset( (char*)&Comm.Buf[15], 0xFF, Len );	
                       }  
                       if( Total==1 )
                       {
                            E2P_Read( (char*)&EventNum, (long)Addr, 1 ); 
                            if( EventNum==0 )  EventNum=19;
                            else   EventNum-=1;
                            TempAddr=(long)Addr+EventNum*Len/2+2;    
                            AT24C_Read( &Comm.Buf[15],TempAddr,Len/2 );
                            memset( (char*)&Comm.Buf[15+Len/2], 0xFF, Len/2 );	
                       }
                       if( Total>1)
                       {
                            E2P_Read( (char*)&EventNum, (long)Addr, 1 ); 
                            if( EventNum<2 )   EventNum+=20;
                            EventNum-=2;
                            TempAddr=(long)Addr+EventNum*Len/2+2;    
                            AT24C_Read( &Comm.Buf[15],TempAddr,Len );
                       }
                       break;
             case 0xC330:
             case 0xC340: 
             case 0xC350:
             case 0xC360:
             case 0xC370: 
             case 0xC380:
             case 0xC390:
             case 0xC320:
             case 0xC410:
                       E2P_Read( (char*)&Len,(long)Addr+22,1);  
                       if( Len > MaxSeg ) Len = MaxSeg;
                       Len = 2*Len;
	               AT24C_Read( &Comm.Buf[15], (long)Addr, Len );
                       break;
             case 0xC41E:
                       E2P_Read( (char*)&Len,SeasNum,1);  
                       if( Len > MaxSeg ) Len = MaxSeg;
                       Len = Len+1;
	               AT24C_Read( &Comm.Buf[15], (long)Addr, Len );
                       Comm.Buf[15] &=0x7F;
                       break;
             case 0xC035:        //繼電器操作  需要密碼支持的命令 relay operation
                       Len = Info & RS_LEN;
                       if( P1IN & P_RelayAsk )
                           Comm.Buf[15]=0x5F;
                       else
                           Comm.Buf[15]=0x50;
                       break;
             case 0xA000:       // read all parameters
                       Len = Info & RS_LEN;
                       FRAM_Read( (char*)&Comm.Buf[15], EC_Pp0,20);
                       memcpy( (char*)&Comm.Buf[35], Energy.Real_VRMS,2);
                       memcpy( (char*)&Comm.Buf[37], Clk.Sec,7);
                       E2P_Read( (char*)&Comm.Buf[44], LatchEvents,1);
                       if( P1IN & P_RelayAsk )
                           Comm.Buf[45]=0x5F;
                       else
                           Comm.Buf[45]=0x50;
                       break;
             default:
	               Len = Info & RS_LEN;
	               MemType = (Info>>6)&0x07;
	               MEM_Read( &Comm.Buf[15], (long)Addr, Len, MemType );
                       break;
        }
        Rs_Len = 7+Len;
        memcpy( (char*)&Buffer,   &Rs_Addr0, 4 );
        memcpy( (char*)&Rs_Addr0, &Comm.Buf[10], 4 );
        memcpy( (char*)&Comm.Buf[10], &Buffer, 4 );
        Comm.Buf[14]=Flag.Meter;
	return Err_Byte;
}
/*****************************************************************
 	write data into meter
*****************************************************************/
unsigned char Com_Write(void)
{
	int	Addr, Info,Tmp;
	char	MemType,Len;
	unsigned char Err_Byte=0;

        Tmp = ((int)Rs_IDH<<8)+ (int)Rs_IDL; 
        if( GetComVar( &Addr, &Info ) == -1 )     //數據標識錯     
        {
            Err_Byte |= RS_State_IVID;
            return  Err_Byte;
	}
        if( ( Info & EN_W ) == 0 )             //權限不夠,不可寫
	{
	    Err_Byte |= RS_State_RgtE;
	    return  Err_Byte;
	}   
        FRAM_Read( (char*)&Buffer[0],Meter_Pass,4);
        if( memcmp( &Comm.Buf[14], Buffer, 4 ) != 0 ) 
        {
            Err_Byte |= RS_State_PswE;
	    return  Err_Byte;
        }  
        switch( Tmp )
        {
             case 0xC035:        //繼電器操作  需要密碼支持的命令
                       if( Comm.Buf[18]==0x50 )   Flag.Relay |= F_Off;
                       if( Comm.Buf[18]==0x5F )   Flag.Relay |= F_On;
                       break;
             case 0xC330:
             case 0xC340: 
             case 0xC350:
             case 0xC360:
             case 0xC370: 
             case 0xC380:
             case 0xC390:
             case 0xC320:
             case 0xC410:
                       Len = Rs_Len-10;
                       if( Len>20 ) Len=20;
                       AT24C_Read( (char*)&Buffer[0],Addr,20);
                       memcpy( (char*)&Buffer[0],(char*)&Comm.Buf[18],Len);
	               MEM_DBWrite( Addr, (char*)&Buffer[0], 20,Mem_E2PROM);
                       Len = Len/2;
                       E2P_Write( Addr+22, (char*)&Len, 1);
                       E2P_Write( Addr+E2PROMBAK+22, (char*)&Len, 1);
                       break;
             case 0xC41E:
                       Len = Info & RS_LEN;
	               MEM_DBWrite( Addr, (char*)&Comm.Buf[18], 11,Mem_E2PROM);
                       break; 
             case 0xC011:        //Soft Time
                       MEM_DBWrite( Addr, (char*)&Comm.Buf[18], 7 ,Mem_FRAM);   //FRAM
	               memcpy( (char*)&Clk.Sec[0], (char*)&Comm.Buf[18], 7);   //RAM
                       break;
             default:
                       Len = Info & RS_LEN;
	               MemType = (Info>>6)&0x07;
	               MEM_DBWrite( Addr, &Comm.Buf[18], Len ,MemType);
                       break;
        }
        Rs_Len = 5;
        memcpy( (char*)&Buffer,  &Rs_Addr0, 4 );
        memcpy( (char*)&Rs_Addr0, &Comm.Buf[10], 4 );
        memcpy( (char*)&Comm.Buf[8], &Buffer, 4 );
        Comm.Buf[12]=Flag.Meter;
	return Err_Byte;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
九九九精品视频| 欧美成人伊人久久综合网| 欧美三电影在线| 国产精品蜜臀av| 免费成人av在线播放| 一本一本久久a久久精品综合麻豆| 日韩一区二区精品| 亚洲自拍偷拍九九九| 风间由美性色一区二区三区| 91麻豆精品国产自产在线| 亚洲精品ww久久久久久p站| 成人晚上爱看视频| 精品国一区二区三区| 午夜视频在线观看一区| 在线观看欧美黄色| 国产精品污www在线观看| 国模娜娜一区二区三区| 制服丝袜中文字幕一区| 亚洲小少妇裸体bbw| 色久综合一二码| 亚洲欧美色图小说| proumb性欧美在线观看| 久久精品亚洲国产奇米99| 久久精品国产一区二区| 欧美一级片免费看| 日韩va亚洲va欧美va久久| 一本色道亚洲精品aⅴ| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美精品视频www在线观看| 亚洲同性gay激情无套| 成人一级片在线观看| 国产免费久久精品| 99精品视频免费在线观看| 中文字幕一区二区三区视频| 99久久精品国产毛片| 国产精品超碰97尤物18| 91老司机福利 在线| 亚洲欧美另类综合偷拍| 欧美主播一区二区三区美女| 香蕉久久夜色精品国产使用方法 | 成人精品高清在线| 亚洲欧美日韩一区二区三区在线观看| 99精品桃花视频在线观看| 亚洲美女视频一区| 欧美日韩日日摸| 久久国产生活片100| 久久午夜羞羞影院免费观看| 国产精品中文欧美| 日韩伦理电影网| 欧美色视频在线观看| 美国毛片一区二区| 国产精品人成在线观看免费| 在线观看欧美黄色| 久久 天天综合| 国产精品久久久久久久浪潮网站| 色婷婷亚洲婷婷| 国产做a爰片久久毛片| 国产精品国产三级国产a| 欧美性猛片aaaaaaa做受| 久久99精品国产麻豆不卡| 国产精品美女久久福利网站 | 亚洲国产cao| 欧美成人bangbros| 岛国一区二区三区| 亚洲第一二三四区| 国产午夜亚洲精品午夜鲁丝片| 91丨九色丨国产丨porny| 日韩av一二三| 国产精品久久久久婷婷二区次| 欧美精品三级在线观看| 成人免费毛片a| 美国av一区二区| 亚洲欧美激情视频在线观看一区二区三区| 欧美肥胖老妇做爰| 成人av网站免费观看| 青青草成人在线观看| ...xxx性欧美| 久久亚洲综合色| 7777精品伊人久久久大香线蕉完整版 | 久久精品国产秦先生| 亚洲视频一二区| 久久久久亚洲综合| 91精品国产高清一区二区三区| 99精品久久只有精品| 国内久久精品视频| 石原莉奈在线亚洲二区| 亚洲青青青在线视频| 国产欧美一区视频| 欧美电视剧在线观看完整版| 欧美性受xxxx| 一本大道久久a久久精二百| 粉嫩一区二区三区性色av| 久久er99热精品一区二区| 亚洲国产精品尤物yw在线观看| 国产精品美女久久福利网站| 久久综合五月天婷婷伊人| 日韩三级免费观看| 欧美区一区二区三区| 日本韩国欧美国产| 99re成人在线| 97久久精品人人做人人爽| 国产不卡在线一区| 国产剧情一区在线| 国产福利精品导航| 国产91高潮流白浆在线麻豆| 国产一区欧美二区| 国产一区二区在线观看视频| 久久精品国产久精国产| 奇米四色…亚洲| 蜜臀av性久久久久av蜜臀妖精| 日韩成人dvd| 麻豆成人久久精品二区三区小说| 免费欧美在线视频| 久久99精品久久久久久动态图 | 久久精品一区二区三区不卡牛牛| 欧美va亚洲va香蕉在线| 中国色在线观看另类| 国产欧美视频在线观看| 国产日韩欧美高清| 国产精品国产精品国产专区不片| 国产精品久久一级| 亚洲激情图片小说视频| 一区二区三区影院| 午夜精品久久一牛影视| 免费观看在线色综合| 国产一区二区三区久久久 | 综合在线观看色| 一区二区三区久久久| 日韩精品一二三区| 国产一区高清在线| www.亚洲国产| 欧美日韩不卡一区二区| 精品日韩av一区二区| 国产精品区一区二区三| 亚洲国产欧美一区二区三区丁香婷| 五月婷婷色综合| 国产精品小仙女| 欧美午夜在线一二页| 日韩三级视频在线看| 国产精品久久久久7777按摩| 亚洲美女免费在线| 免费观看91视频大全| av不卡在线播放| 欧美日韩激情在线| 久久综合久色欧美综合狠狠| 中文字幕一区二区三区视频 | 国产iv一区二区三区| 一本大道久久精品懂色aⅴ| 这里只有精品免费| 国产精品无人区| 日本最新不卡在线| 成人精品小蝌蚪| 日韩一二三区视频| 亚洲欧美日韩久久| 精品一二线国产| 欧美熟乱第一页| 中文字幕 久热精品 视频在线| 午夜精品在线视频一区| 成人av在线网| 精品国产三级电影在线观看| 亚洲欧美一区二区三区久本道91| 麻豆久久久久久| 欧美三级一区二区| 国产精品久久久久久久久果冻传媒 | 一区二区三区四区视频精品免费| 另类欧美日韩国产在线| 91亚洲国产成人精品一区二区三 | 国产美女在线观看一区| 欧美三区在线视频| 亚洲少妇屁股交4| 国产风韵犹存在线视精品| 欧美亚洲综合另类| 中文字幕中文字幕一区二区 | 天天色图综合网| 91在线视频官网| 欧美国产激情二区三区| 99视频有精品| 337p日本欧洲亚洲大胆精品| 亚洲成人动漫一区| 91成人网在线| 亚洲精品中文字幕在线观看| 国产成人精品三级麻豆| 2023国产一二三区日本精品2022| 亚洲va欧美va人人爽| 在线免费观看日本一区| 亚洲精品国产a| 色综合 综合色| 一区二区高清免费观看影视大全| 不卡一卡二卡三乱码免费网站| 久久影视一区二区| 国内精品久久久久影院薰衣草| 91精品国产色综合久久ai换脸 | 亚洲欧美区自拍先锋| 成人不卡免费av| 国产精品女主播av| av一区二区不卡| 亚洲人一二三区| 欧美日韩一区二区三区四区| 亚洲高清视频中文字幕| 在线成人免费视频|