日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
ATmega128實(shí)現(xiàn)一個工業(yè)設(shè)備的主控制板
ATmega128實(shí)現(xiàn)一個工業(yè)設(shè)備的主控制板
 更新時間:2008-7-26 19:21:33  點(diǎn)擊數(shù):3
【字體: 字體顏色
使用ATmega128實(shí)現(xiàn)一個工業(yè)設(shè)備的主控制板,它與由ATmega8管理的按鍵和LED顯示構(gòu)成的控制面板距離在2米左右,兩者之間采用 USART通信聯(lián)系?紤]到在實(shí)際應(yīng)用中,倆者之間交換的數(shù)據(jù)很少,通信速度也不需要很高,重要的是保證通信的可靠和抗干擾,因此在硬件設(shè)計上采用電流環(huán)的連接方式,見圖5.4。 
   在圖中通信雙方采用光隔和三極管,將USART的電平變化變成電流變化后傳送連接,如同工業(yè)上使用的20mA電流環(huán)通信一樣,大大提高了通信的抗干擾能力。
通信協(xié)議和規(guī)程的制定:

   l.通信速率采用2400bps(速率太高時電流環(huán)的變化會跟不上)。

   2. 用戶數(shù)據(jù)包采用定長格式,每個數(shù)據(jù)包長度為6個字節(jié),其中第1個字節(jié)是數(shù)據(jù)包起始字節(jié)0xBB,第6字節(jié)為數(shù)據(jù)包結(jié)束字節(jié)0xEE,其它為用戶命令、數(shù)據(jù)和系統(tǒng)狀態(tài)參數(shù)。

   3.每次通信由A端發(fā)起,下發(fā)一個數(shù)據(jù)包;B端收到一個正確的數(shù)據(jù)包后,必須返回一個數(shù)據(jù)包應(yīng)答。

   4.A端下發(fā)一個數(shù)據(jù)包后,在300ms內(nèi)沒有正確收到應(yīng)答包時(在2400bps時傳送6個字節(jié)的時間約為30ms),將再次重發(fā);3次重發(fā)均不能正確收到應(yīng)答包則報警。

   5.在系統(tǒng)正常工作時,A端每隔250ms下發(fā)一個數(shù)據(jù)包,B端如果在1s內(nèi)沒有正確收到一個下發(fā)的數(shù)據(jù)包,將進(jìn)入安全保護(hù)程序。

   在這個應(yīng)用實(shí)例中,USART接口的發(fā)送程序與前面給出的典型例程中的一樣,而對USART的接收程序進(jìn)行了改動和簡化,使其更加符合在本系統(tǒng)中使用。

#define UART_BEGIN_STX        0xBB
#define UART_END_STX        0xEE
#define RX_BUFFER_SIZE0        6

char rx_buffer0[RX_BUFFER_SIZE0];
unsigned char rx_counter;
bit Uart_RecvFlag

// USART Receiver interrupt service routine
#pragma savereg-
interrupt [USART_RXC] void uart_rx_isr(void)
{
  unsigned char status,data;
  #asm
    push r26
    push r27
    push r30
    push r31
    in   r26,sreg
    push r26
  #endasm

  status=UCSRA;
  data=UDR;
  if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
  {
    if (!Uart_RecvFlag)
    {    
       rx_buffer[rx_counter] = data;
    switch (rx_counter)
    {
            case 0:
        if (data == UART_BEGIN_STX)     rx_counter = 1;
        break;
       case 1:
       case 2:
       case 3:
       case 4:
        rx_counter++;
        break;
       case 5:
        rx_counter = 0;
        if (data == UART_END_STX)  Uart_RecvFlag = 1;
        break;
    }
      }
   }
   else
      rx_counter = 0;

   #asm
        pop  r26
    out  sreg,r26
    pop  r31
    pop  r30
    pop  r27
    pop  r26
  #endasm
}
#pragma savereg+
…………
void main(void)
{
  while(1)
  {
    if (Uart_RecvFlag)
    {
    …………            //處理收到的數(shù)據(jù)包
    Uart_RecvFlag = 0;        //允許USART接受新的數(shù)據(jù)包
     }
  …………            //處理其它任務(wù)
  }
}

     在這段代碼中,接收中斷服務(wù)程序直接對數(shù)據(jù)包的起始字符和結(jié)束字符進(jìn)行判斷,并完成對整個數(shù)據(jù)包的接收。當(dāng)接收到正確的6個字符的數(shù)據(jù)包后,將 “Uart_RecvFlag”標(biāo)志置位,通知上層程序處理收到的數(shù)據(jù)。一旦“Uart_RecvFlag”標(biāo)志置位后,中斷服務(wù)程序?qū)⒉辉俳邮招碌臄?shù)據(jù)(放棄掉收到的字節(jié)),使得數(shù)據(jù)緩沖區(qū)不會溢出。

    上層程序的設(shè)計,應(yīng)保證以200ms左右的間隔對“Uart_RecvFlag”標(biāo)志位進(jìn)行一次判斷。一旦判斷“Uart_RecvFlag”標(biāo)志置位后,馬上進(jìn)行處理,回送應(yīng)答數(shù)據(jù)。處理完后將“Uart_RecvFlag”標(biāo)志清除,允許USART接收新的數(shù)據(jù)包。
還可以考慮在數(shù)據(jù)包中增加“數(shù)據(jù)包編號”和“數(shù)據(jù)校驗(yàn)”2個字節(jié),以進(jìn)一步提高通信的可靠性。
  • 上一篇: AVR單片機(jī)LCD1602驅(qū)動程序
  • 下一篇: AVR單片機(jī)定時/計數(shù)器PWM設(shè)計要點(diǎn)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1