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

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

?? receivetest.c

?? 關于rs485通信及iic通信的程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
#include <mega8.h>        
#include <delay.h>    
#include <string.h>    

#define led PORTD.5
#define led1 PORTD.6
#define led2 PORTD.7
#define led3 PORTB.0


#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

#define DRE PORTD.2   
#define DB_SENDMAXSIZE 7     


#define Send_Buff_Size 128 
#define Receive_Buff_Size  128
#define FunctionCode  2
#define Data_Head   0x7E
#define Data_Change 0x7D      


//定義RS485總線狀態,當狀態為0時才允許發送數據
#define RS485_Bus_IDLE 0
#define RS485_Bus_BUSY 1  

#define RS485_Receive_IDLE 0
#define RS485_Receive_RECEIVE 1
#define RS485_Receive_CHANGE 3

#define Answer_Size 8                            // 定義回復包數據長度為八個字節

#define RS485_Address_Self  0x21                 // 本機自己的地址 
#define RS485_Address_Broad 0x00                 // 廣播地址

// #define Address_Broad 0x00                       // 接收到的為廣播地址時回復0
// #define Address_Self  0x01                       // 接收到的為本機自己的地址時回復1
// #define Address_Rong  0x02                       // 接收到不為本機地址也不為廣播地址時回復2

#define Repeat_Send_Count 0x0A                   // 重發延時機制的延時時間,定為10ms
#define Check_Count       0xC8                   // 檢測回復包延時計數器,一次為50ms,延時200ms計數4次
#define Long_Wait_Count   0xF0                   // 超時等待計數器,一次為1ms,延時250MS計數250次

#define Repeat_Send_Delay 0x01                   // 重發延時狀態
#define Long_Wait_Delay   0x02                   // 超時等待狀態
#define Send_Broad_Delay  0x03                   // 回復廣播包延時狀態
#define Check_Delay       0x04                   // 檢測回復包延時狀態
#define Other_Delay       0x00                   // 其他中斷延時狀態
#define Start_Send        0x66   

#define Order_Attribute 16


typedef unsigned char  INT8U;
typedef char           INT8S;
typedef unsigned short INT16U;

// This flag is set on USART Receiver buffer overflow

//定義RS485總線接收狀態
INT8U   RS485_Receive_Status;

INT8U   ReSendFlag;                              // 重發數據標志位
INT8U   ReSendCount;                             // 重發數據計數器
INT8U   *P_RS485_Send_Buff;                      // 定義發送緩沖區指針
INT8U   RS485_Send_Buff[Send_Buff_Size]={0x00,0x21,0x10,0x00,0x00,0x02,0x00,0x44};         // 定義待發送數據緩沖區
INT8U   RS485_Receive_Buff[Receive_Buff_Size];   // 定義接收數據緩沖區
INT8U   RS485_Receive_Save[128];                 // 保存接收到的數據緩沖區
INT8U   RS485_Answer_Buff[8];                    // 回復包接收緩沖區,回復包只為8個字節
INT8U   RS485_Answer_Send_Buff[8];               // 回復數據包的發送緩沖區  

INT8U   Tx_Count;                                // 定義發送數據計數器
INT8U   Receive_Count;                           // 定義接收數據計數器
INT8U   Answer_Data_Count;                       // 回復包接收計數器
INT8U   Tx_Send_End;                             // 發送完一幀數據標志位

INT8U   Send_Broad_Delay_Flag;                   // 發送廣播回復包延時標志
INT8U   Repeat_Send_Data_Flag;                   // 重發第二次數據包標志
INT8U   Send_Data_Flag;                          // 發送數據包(包括首發和重發標志),通過此標志去檢驗是否有回復包
INT8U   RS485_Send_Flag;                         // 發送標志位
INT8U   Send_Answer_Flag;                        // 發送回復包標志
INT8U   Send_Broad_Flag;                         // 發送廣播回復包標志
INT8U   Add_Time_Flag;                           // 重發延時首次檢測到總線不空間,對延時加3ms標志
INT8U   RS485_Answer;                            // 回復包標志位

INT8U   Send_Size;                               // 待發送數據的長度
INT8U   Byte_Len;                                // 接收字節的長度,8;40;128;0

INT8U  Receive_Data;                             // 接收的一個字節的數據
INT8U  Receive_Status;                            // 接收數據時的狀態

INT8U   Receive_CheckHead;                       // 數據包頭接收和校驗
INT8U   Receive_CheckData;                       // 數據包數據接收和校驗  
INT8U   Send_CheckHead;                          // 數據包頭發送和校驗
INT8U   Send_CheckData;                          // 數據包數據發送和校驗  

INT8U   RS485_Bus_Status;                        // 定義485總線狀態                  
INT8U   Send_Status;                             // 發送數據狀態
INT8U   Delay_Status;                            // 延時中斷狀態

INT8U   Start_Delay;                             // 啟動延時檢測回復包程序

INT8U   Repeat_Send_Time;                        // 重發延時剩余時間計數器
INT8U   Long_Wait_Time;                          // 超時等待剩余時間計數器
INT8U   Com_Revert_Time;                         // 競爭回復延時剩余時間計算器
INT8U   Check_Time;                              // 檢測回復包延時剩余時間計算器

INT8U   Long_Time_End;                           // 超時等待結束標志

INT8U   UpdateFlag;                              // 狀態更新標志
INT8U   IICSendCount;                            // IIC發送計數器,一次通信接收8個字節
INT8U   IICReceiveCount;                         // IIC接收計數器,一次通信接收8個字節
INT8U   IICReceiveBuff[8]={0x01,0x01,0x02,0x01,0x02,0x03,0x04,0x0e};                       // IIC接收緩沖區     
INT8U   IICSendBuff[8];                          // IIC發送緩沖區
INT8U   IICChecksum;                             // IIC接收校驗和
INT8U   IICCSendDataheck;                        // IIC發送數據的校驗和
        
INT8U   Check_Receive_Data_Flag;

INT8U   RS485_Receive_End;                     // 485總線接收結束標志
// INT8U  Buff;
// INT8U  Length;
// INT8U  Address;  

// 競爭回復延時計數器,沒計數一次延時1ms
INT8U   Delay_Time_Count[]={
 0, 0,  0,  0,   0,   0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 2,  4,  6,   64,  102, 98,  155, 0,  0,   0,   0,   0,   0,0,0,
 0, 8,  36, 60,  66,  104, 140, 142, 166,168, 170, 172, 174, 0,0,0,
 0, 10, 38, 62,  68,  84,  85,  86,  0,  0,   0,   0,   0,   0,0,0,
 0, 12, 44, 100, 139, 0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 14, 46, 98,  0,   0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 16, 96, 136, 0,   0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 18, 94, 137, 0,   0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 20, 92, 138, 0,   0,   0,   0,   0,  0,   0,   0,   0,   0,0,0,
 0, 22, 40, 42,  70,  88,  90,  106, 156,158, 160, 162, 164, 0,0,0, 
 0, 24, 48, 72,  112, 124, 144, 143, 186,0,   0,   0,   0,   0,0,0,
 0, 26, 50, 74,  114, 126, 146, 176, 188,0,   0,   0,   0,   0,0,0,
 0, 28, 52, 76,  116, 128, 148, 178, 190,0,   0,   0,   0,   0,0,0,
 0, 30, 54, 78,  118, 130, 150, 180, 191,0,   0,   0,   0,   0,0,0,
 0, 32, 56, 80,  120, 132, 152, 182, 0,  0,   0,   0,   0,   0,0,0, 
 0, 34, 58, 82,  122, 134, 154, 184, 0,  0,   0,   0,   0,   0,0,0}; 
      



//---------------------------------------------------------------------------------------
//
//獲取當前485接收狀態
INT8U GetCurrentRS485RxStatus(void)
{
  return   RS485_Receive_Status;
}

 

//---------------------------------------------------------------------------------------
//
//設置當前485總線接收狀態
void SetCurrentRS485RxStatus(INT8U status)
{
  RS485_Receive_Status=status;
}   




//----------------------------------------------------------------------------------------------
//
//啟動發送程序
void RS485_Start_Send(void)               
{
    while (!(UCSRA&(1<<UDRE)));                        // 當數據寄存器為空時
    DRE=1;                                             // 將485轉換到發送狀態
    UDR=0x7E;                                          // 發送一幀的數據的開頭0x7E     
}


//---------------------------------------------------------------------------------------
//
// 重發延時函數
void Repeat_Delay_Program(void)
{
 //Long_Time_End=0;
 Repeat_Send_Time=Repeat_Send_Count;            // 延時10ms
 Delay_Status=Repeat_Send_Delay;                // 進入重發延時中斷狀態
//  //開中斷,啟動發送延時機制                            
//  TCNT0=0xFC;                                    // 定時1ms  
//  TCCR0=0x05;                                    // 1024分頻,計數39.0625次就為10ms                                           
}



//---------------------------------------------------------------------------------------
//
//發送數據,包括首發和重發  執行這程序之前需將485引腳定義為發送狀態
void RS485_Send_Subprogram(void)
{ 
   if(ReSendFlag==1)                                        // 判斷是否為重發數據
   {  
        ReSendFlag=0;                                       // 重發標志清0
        //將數據第二字節功能代碼的第七位置位,表示為重發數據
      
        RS485_Send_Buff[7]= RS485_Send_Buff[7] - RS485_Send_Buff[FunctionCode];
        RS485_Send_Buff[FunctionCode]=RS485_Send_Buff[FunctionCode]|0x40;  
        RS485_Send_Buff[7]= RS485_Send_Buff[7] + RS485_Send_Buff[FunctionCode];
        
               
        if(ReSendCount==1)                                  // 第一次同第二次重發之間的超時等待
        {                                        
           Long_Wait_Time=Long_Wait_Count;
           Delay_Status=Long_Wait_Delay;                    // 進入超時等待延時中斷狀態
           
//            Repeat_Send_Data_Flag=1;
           
//            //啟動定時器T00                                    // 超時等待350ms                    
//            TCNT0=0x3D;                                      // 定時50ms      
//            TCCR0=0x05;  
                                                            // 超時等待未結束,執行其他程序
                                                            // 超時等待350ms結束,再執行重發延時
//            while(Repeat_Send_Data_Flag==1)
//            { 
//               if(Long_Time_End==0)
//               {
//                 // Place your code here
//               }
//               else                                             // 超時等待350ms結束,再執行重發延時
//               {                 
//                 Long_Time_End=0;
//                 Repeat_Send_Data_Flag=0;
//                 Repeat_Delay_Program();           
//               }                                                                          
//            }                                                
        }
        else                                                
        {             
           Repeat_Delay_Program();
        }
   
   }                                                        // 首發數據不用延時,直接發送
   else
   {      
        ///
        Delay_Status=Start_Send;
        ///
       // RS485_Start_Send();                                 // 啟動發送,即將0x7E發送到數據寄存器
   }                             
}                                 



//----------------------------------------------------------------------------------------------
//
// 發送點對點回復包子程序
void RS485_Answer_Subprogram(void)
{  
  Send_Size=8;                                         // 發送回復包數據,固定為8個字節
  P_RS485_Send_Buff=RS485_Answer_Send_Buff;            // 將指針P_RS485_Send_Buff指向發送緩沖區RS485_Answer_Send_Buff首地址
  
  Delay_Status=Start_Send;
  //RS485_Start_Send();                                  // 啟動發送
}


//----------------------------------------------------------------------------------------------
//
// 發送點對類,廣播回復包子程序
void RS485_Answer_Broad_Subprogram(void)
{
 Send_Size=8;                                                      // 發送回復包數據,固定為8個字節
 P_RS485_Send_Buff=RS485_Answer_Send_Buff;                         // 將指針P_RS485_Send_Buff指向發送緩沖區RS485_Answer_Send_Buff首地址
 Com_Revert_Time=Delay_Time_Count[RS485_Answer_Send_Buff[0]];
 Delay_Status=Send_Broad_Delay;                                    // 進入發送廣播回復包延時中斷狀態
//  Send_Broad_Delay_Flag=1;
//  // 開定時中斷
//  TCNT0=0xFC;                                                       // 定時1ms      
//  TCCR0=0x05;                                                       // 1024分頻,約計數4次為1ms     
//  while(Send_Broad_Delay_Flag==1)
//  {
//   ;// Place your code here
//   
//   //led3=!led3;
// 
//  }  
//  led3=0;
//  
//  Delay_Status=Start_Send;
//  //RS485_Start_Send();                                               // 啟動發送
}


//----------------------------------------------------------------------------------------------
//發送中斷程序
interrupt [USART_TXC] void usart_tx_isr(void)
{ 
  led3=!led3;
  if(Tx_Send_End==0)                                         // 一幀數據尚未發完
  { 
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品影视| 精品成人a区在线观看| 国产麻豆精品95视频| 日本va欧美va欧美va精品| 亚洲精品videosex极品| 中文字幕一区二区视频| 国产精品久久久久影院亚瑟| 国产日韩欧美精品电影三级在线 | 日韩欧美你懂的| 欧美日韩三级一区| 欧美午夜在线一二页| 欧美日韩亚洲综合在线 | 亚洲一二三四在线观看| 亚洲欧美日韩中文播放 | 欧美区一区二区三区| 欧美一区二区免费| 欧美tickling挠脚心丨vk| 精品成人一区二区| 中文字幕一区二区三中文字幕| 亚洲精品亚洲人成人网| 天天色综合天天| 国内外成人在线| av动漫一区二区| 欧美日韩国产综合一区二区| 日韩一区二区视频在线观看| 久久久久久久久伊人| 成人免费在线播放视频| 艳妇臀荡乳欲伦亚洲一区| 人禽交欧美网站| 福利一区福利二区| 在线观看www91| 精品国产一区二区三区久久影院| 欧美国产一区二区| 亚洲成人午夜电影| 国产高清久久久| 欧美午夜一区二区三区免费大片| 日韩一区二区三区电影在线观看 | 成人免费观看视频| 欧美日韩国产小视频在线观看| 日韩区在线观看| 亚洲精品成人悠悠色影视| 麻豆国产欧美日韩综合精品二区| 国产**成人网毛片九色| 欧美性受xxxx黑人xyx| 久久精品一区四区| 午夜视频一区二区三区| av资源站一区| 精品国产三级电影在线观看| 亚洲与欧洲av电影| 成人晚上爱看视频| 精品欧美一区二区三区精品久久 | 日韩av一级片| 91免费在线播放| 国产日韩亚洲欧美综合| 喷白浆一区二区| 在线影视一区二区三区| 久久久久综合网| 麻豆国产精品官网| 欧美男女性生活在线直播观看| 国产精品久久一级| 激情偷乱视频一区二区三区| 欧美日韩高清一区二区| 亚洲视频免费观看| 懂色av一区二区三区蜜臀| 欧美一卡在线观看| 亚洲成人一区二区| 欧美视频一区二区三区四区| 亚洲欧美日韩在线| 成人av综合在线| 欧美国产日韩a欧美在线观看| 久久精品免费观看| 精品国产自在久精品国产| 日本大胆欧美人术艺术动态| 欧美日韩一区二区三区在线看| 亚洲人亚洲人成电影网站色| 成人免费三级在线| 国产精品国产三级国产aⅴ中文 | 99久久国产免费看| 中文一区二区在线观看| 成人精品在线视频观看| 国产精品青草综合久久久久99| 国产a区久久久| 国产日本一区二区| av一本久道久久综合久久鬼色| 国产精品拍天天在线| aaa国产一区| 亚洲综合丁香婷婷六月香| 色屁屁一区二区| 亚洲国产精品久久一线不卡| 欧美日韩成人综合天天影院 | 91.com视频| 日韩成人免费电影| 欧美xxx久久| 国产成人在线免费| 亚洲人成精品久久久久| 欧美日韩一区二区三区免费看| 天天色天天爱天天射综合| 欧美α欧美αv大片| 国产成人8x视频一区二区 | 欧美亚洲丝袜传媒另类| 午夜久久久久久| 久久综合资源网| 99re这里只有精品视频首页| 亚洲成精国产精品女| 久久蜜桃av一区精品变态类天堂| eeuss鲁片一区二区三区在线观看| 一区二区三区中文字幕电影| 欧美精品777| 国产一区中文字幕| 亚洲一区二区欧美激情| 欧美精品一区二区三区蜜臀| 99麻豆久久久国产精品免费| 亚洲成国产人片在线观看| 久久老女人爱爱| 91九色02白丝porn| 国产精品99久久久久久久女警| 亚洲欧美一区二区三区国产精品 | 国产99久久精品| 亚洲国产sm捆绑调教视频| 精品福利在线导航| 色哟哟国产精品免费观看| 久久超级碰视频| 亚洲精品成人悠悠色影视| 久久色在线观看| 制服丝袜亚洲播放| 91丨porny丨户外露出| 韩国av一区二区| 偷窥少妇高潮呻吟av久久免费| 国产精品天美传媒沈樵| 日韩一级片在线播放| 欧美在线免费观看亚洲| 国产成人啪免费观看软件| 日韩高清不卡一区| 亚洲国产一二三| 亚洲精品美腿丝袜| 国产精品二三区| 国产欧美久久久精品影院| 日韩欧美色电影| 亚洲国产sm捆绑调教视频 | 精品视频资源站| 欧美日韩国产综合一区二区三区| 欧美午夜片在线看| 日韩一区二区三| 欧美激情一区不卡| 一区二区三区四区蜜桃| 日韩**一区毛片| 激情深爱一区二区| 91免费版pro下载短视频| 在线观看91精品国产麻豆| 337p日本欧洲亚洲大胆精品| 国产精品视频一二三区| 亚洲一二三四久久| 国产综合成人久久大片91| 色综合久久久网| 日韩美女天天操| 中文字幕一区二区日韩精品绯色| 亚洲高清免费观看高清完整版在线观看| 日韩精品久久理论片| 波多野结衣一区二区三区| 3751色影院一区二区三区| 欧美激情一区二区| 蜜臀久久久99精品久久久久久| 春色校园综合激情亚洲| 欧美丰满一区二区免费视频| 日本一区二区电影| 麻豆成人av在线| 在线观看日韩电影| 国产精品嫩草久久久久| 美女在线视频一区| 欧洲亚洲国产日韩| 国产精品久久久久久久久久久免费看 | 成人免费高清视频在线观看| 91麻豆精品国产91久久久久久| 国产人伦精品一区二区| 日日夜夜免费精品视频| 91影院在线观看| 国产日韩欧美综合一区| 日本午夜精品一区二区三区电影| 91在线云播放| 国产欧美精品国产国产专区| 免费观看30秒视频久久| 欧美日韩久久一区二区| 亚洲丝袜制服诱惑| 国产福利一区二区三区视频在线 | 美女久久久精品| 欧美中文字幕一区二区三区亚洲| 国产欧美一区二区精品仙草咪| 麻豆成人91精品二区三区| 欧美高清dvd| 亚洲午夜羞羞片| 欧美亚洲动漫精品| 一区二区三区免费在线观看| 91香蕉视频污| 国产精品国产三级国产普通话蜜臀| 国产一区中文字幕| 亚洲精品在线观| 韩国三级中文字幕hd久久精品| 欧美xxxxxxxxx| 久久精品国产色蜜蜜麻豆| 日韩欧美电影一区|