久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5904|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

CCD紅外掃描槍 PS/2接口協(xié)議的郁悶

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:68618 發(fā)表于 2014-11-22 16:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
CCD紅外掃描槍,PS/2接口,如果用232接口的價格貴點,MCU那邊程序處理好一點,掃描出來的條碼掃描槍按照PS/2協(xié)議自動發(fā)送給上位機,默認形式下有個終止符,就是回車鍵,鍵值是0x5a,0xf0,0x5a,現(xiàn)在的情況是掃描EAN-13型的條碼,當然對接收的數(shù)據(jù)可以采用兩種辦法,判斷接收的位數(shù),因為位數(shù)是死的,到那個位數(shù)值就處理判斷,然后送LCD顯示看一下,還有一種就是判斷有沒有碰到終止符,碰到就說明一組數(shù)據(jù)傳輸完畢,畢竟條碼有長有短,為了靈活運用,偶還是采用了判斷終止符的辦法。奇怪無比郁悶的是老是成功閱讀了若干個條碼后會無法判斷識別出終止符了。MCU肯定沒死機,執(zhí)行其他程序是OK的,因為沒有仿真器,所以設(shè)置了幾個點亮關(guān)閉LED的動作來判斷程序到底出錯在哪里。折騰了三天了,急死了。唉,附一些程序。

void Receive_Data(void)
    {
          if((Int_counter>0)&&(Int_counter<9))   //第1位起始位低電平拋棄,故從第2次中斷開始到第9次中斷是8位數(shù)據(jù)
          {
               Key_buf=Key_buf>>1;
               if((DATA_STATUS))
              Key_buf|=0x80;//如果數(shù)據(jù)線是高電平,則為1
          }
        Int_counter++;
        while(!(CLK_STATUS));//等待PS/2的CLK拉高
     
        if(Int_counter>10)
         {
              Int_counter=0;
              Receive_status|=BIT(0);//成功接收一個數(shù)據(jù)后設(shè)置一個判斷位
         }
   }   
   
/********************************INT1中斷**************************************/
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
      {
             if(IsEnd==FALSE)
              {
                    Receive_Data();
                    if(Receive_status&0x01)
                     {
                            Receive_status&=~BIT(0);
                            PS2_Receive.buf[PS2_Receive.cnt]=Key_buf;//第0個即存放第一個數(shù)據(jù)
                            PS2_Receive.cnt++;
                            LED_GREEN_ON;
                            if(PS2_Receive.buf[PS2_Receive.cnt-1]==0x5a)//碰到"ENTER"終止符,通碼+斷碼為0x5a+0xf0,0x5a
                            {
                                   IsEnd=TRUE;
                                   Endcnt=0;
                                   LED_RED_ON;
                            }
                       if(PS2_Receive.cnt>64)//正常的話,數(shù)據(jù)接收不可能超過64個,如果成功閱讀碰到終止符,程序跳轉(zhuǎn)執(zhí)行完后會自動清PS2_Receive.cnt;無法閱讀,LED_GREEN老是接收了滿數(shù)據(jù)后暗滅交替,IsEnd老是為FALSE,也就是判斷不到0x5a啊,就是郁悶在這里。
                        {
                                 LED_GREEN_OFF;
                        }
          }
     }   
    else
     {
           Receive_Data();
           if(Receive_status&0x01)
             {
                   PS2_Receive.buf[PS2_Receive.cnt]=Key_buf;
                   PS2_Receive.cnt++;   
                   Receive_status&=~BIT(0);
                   Endcnt++;
                   if(Endcnt==2)
                   {
                           if((PS2_Receive.buf[PS2_Receive.cnt-1]==0x5a)&&(PS2_Receive.buf[PS2_Receive.cnt-2]==0xf0))     
                             {
                                   if((SendToRBuf(PS2_Receive)==COMM_NO_ERR))
                                    {
                                          Comm_status|=BIT(7);
                                    }
                                  IsEnd=FALSE;
                                  Endcnt=0;
                                  PS2_Receive.cnt=0;
                                  LED_GREEN_OFF;
                           }
                         else
                           {
                                 IsEnd=FALSE;
                                 Endcnt=0;
                                 PS2_Receive.cnt=0;
                                 Scan_error|=BIT(7);   
                          }
                  }
             }
        }
   }                                                                                                  
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:68618 發(fā)表于 2014-11-22 16:08 | 只看該作者
奶奶的,老天終于開眼,昨天晚上應(yīng)該是徹底搞定了。這幾天一直感覺還有層紙,一直捅不破,就在成功的邊緣。PS/2協(xié)議的格式11個CLK信號,第一個DATA線上是START BIT,要為低電平,然后余下8個CLK是數(shù)據(jù),再接下來兩個CLK是奇偶校驗位和STOP BIT,接收端的子程序也是網(wǎng)上看別人寫的,他們就很簡單的把第一個CLK和最后兩個CLK省略掉不判斷了,也是可以很好的成功接收判斷的,而且偶運用的時候一開始也是能夠接收好多是成功的。但是他們那種是對應(yīng)PS/2接口的鍵盤做的,畢竟敲一個鍵下去才有數(shù)據(jù)傳輸,而且時間間隔比較久,不象偶這種情況一下子連續(xù)幾十個數(shù)據(jù)過來,頭腦里想想如果某個數(shù)據(jù)接收錯誤,判斷不到終止符,會重新讀幾遍會好的,但實際情況很糟糕,錯了一個后連續(xù)讀若干遍的數(shù)據(jù)都是錯誤的,又沒有仿真器,只能一步步摸索,后來發(fā)現(xiàn)接收過來的數(shù)據(jù)感覺老是會少右移若干位。想想以前接收無線電信號的碼頭,UART傳輸,都要嚴格判斷初始的碼頭或命令頭,于是嚴格按照PS/2的協(xié)議,第一次CLK產(chǎn)生后,下降沿中斷進去后,先判斷一下,DATA線上的START BIT是不是為0,如果不為0,就舍棄,結(jié)果昨晚試了上千下,證實下來有很多時候會判斷到START BIT是不為0的,但讀出來的數(shù)據(jù)準確率幾乎是99.9%以上了,就發(fā)現(xiàn)一次錯誤,還是第一位數(shù)字不正確,余下的都是正確的,而且程序也都能順利執(zhí)行,不會中斷發(fā)生后老是捕捉不到終止符。積聚幾天的郁悶情緒一掃而光,現(xiàn)在才完成整個項目的1/6左右工作量,要加快進度了。
以下是接收的代碼。
void Receive_Data(void)
    {
if(Int_counter==0)
{
      if((DATA_STATUS)==0)
{
     Enable=1;
     Int_counter++;
}
        else
{
     Enable=0;
     LED_GREEN_ON;
         }
}
else
{
      if(Enable)
      {
                   if((Int_counter>0)&&(Int_counter<9)) //第1位起始位低電平拋棄,故從第2次中斷開始到第9次中斷是8位數(shù)據(jù)
                    {
                        Key_buf=Key_buf>>1;
                        if(DATA_STATUS)
                        Key_buf|=0x80;//如果數(shù)據(jù)線是高電平,則為1
                    }
                   Int_counter++;  
                   while(!(CLK_STATUS));//等待PS/2的CLK拉高  
     
                   if(Int_counter>10)
                    {
                        Int_counter=0;
      Enable=0;
                        Receive_status|=BIT(0);//成功接收一個數(shù)據(jù)后設(shè)置一個判斷位
                    }  
      }
        }
   }
LED_GREEN_ON還是會動作的,主程序里再把LED清掉,LED閃爍出現(xiàn)的頻率還是蠻多的,大概快速連續(xù)掃描幾十個條碼后會出現(xiàn)閃爍一下。但數(shù)據(jù)是成功正確的。
回復(fù)

使用道具 舉報

板凳
ID:68618 發(fā)表于 2014-11-22 16:09 | 只看該作者
一個字,暈!
兩個字,真暈!
三個字,還是暈!
四個字,徹底的暈!
回復(fù)

使用道具 舉報

地板
ID:80259 發(fā)表于 2015-5-17 15:13 | 只看該作者
樓主,您好。請問您可不可以把您寫的關(guān)于CCD紅外掃描器與單片機的通信整個程序給我?謝謝
郵箱:2274074978@qq.com
回復(fù)

使用道具 舉報

5#
ID:157626 發(fā)表于 2016-12-26 00:04 | 只看該作者
樓主,我們也在做這個東西,可以幫我們做么,有償。郵箱:cwlong163@163.com
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品毛片一区二区三区 | 丁香五月网久久综合 | 国产激情一区二区三区 | 欧美精品一区二区三区在线 | 国产片侵犯亲女视频播放 | 日韩精品极品视频在线观看免费 | jizz在线免费观看 | 久久人| 亚洲欧美综合精品久久成人 | 国产一区二区三区 | 免费高潮视频95在线观看网站 | 亚洲一区二区中文字幕 | 一区二区三区久久 | 久热爱 | av一区二区在线观看 | 国产伦精品一区二区三区精品视频 | 国产激情在线 | 欧美成人免费在线 | 亚洲综合三区 | 91不卡| 国产精品永久免费 | 手机看片在线播放 | 欧美视频在线观看 | 九九在线精品视频 | 天堂中文在线观看 | 亚洲一区二区综合 | 久久看精品 | 99精品免费| 日韩一区二区三区在线视频 | 成人在线 | 99re国产视频| 不卡在线视频 | 天堂一区二区三区 | 成人在线视频免费播放 | av影音 | 怡红院怡春院一级毛片 | 亚洲欧美中文字幕在线观看 | 巨大黑人极品videos精品 | 成人网在线观看 | 色婷婷久久综合 | 国产精品久久久久久一区二区三区 |