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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5342|回復: 0
打印 上一主題 下一主題
收起左側

匯編語言超聲波測距程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:75263 發表于 2015-4-19 23:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       我現在在做超聲波測距,用的是非門 + CX20106A方案。發射部分用非門驅動,如下




超聲波接收采用CX20106A,如下:



CX20106A是拆機件。

用萬用板搭好電路之后,在網上找到了一些參考匯編程序,我修改后可以通過串口發到PC顯示超聲波往返的時間:
;///////////////////////////////////////////////////////
;               USE  BY :超聲波測距器                  
;               IC      :STC89C52                     
;               OSCCAL  :XT   (12M)                                 
;///////////////////////////////////////////////////////
;
       T2CON    EQU     0C8H
       T2MOD    EQU     0C9H
       RCAP2L   EQU     0CAH
       RCAP2H   EQU     0CBH
       TH2      EQU     0CDH
       TL2      EQU     0CCH      
       VOUT     EQU     P3.7                    ;超聲波輸出端口

;********************************************
;*             中斷入口程序                 *
;********************************************
;
      ORG 0000H        ;復位
      LJMP  START           
      ORG 0003H        ;外部中斷0
      LJMP  PINT0     
      ORG 000BH        ;T0溢出中斷
      RETI     
      ORG 0013H        ;外部中斷1
      RETI                  
      ORG 001BH        ;T1溢出中斷   
      LJMP  INTT1                  
      ORG 0023H        ;串口中斷
      RETI                  
      ORG 002BH        ;T2EN端負跳變(52系列)
      RETI     
;
;********************************************
;*               主 程 序                   *
;********************************************
;
           START:  MOV     SP,#4FH                  
                   MOV     SCON,#50H     ;串口方式1工作,8位數據位,1位停止位,無奇偶校驗,允許接收
                   MOV     T2MOD,#00H    ;DCEN = 0,向上計數
                   MOV     RCAP2H,#0FEH  ;定時器T2置重裝數,波特率:1200. (12MHz)
                   MOV     RCAP2L,#0C8H
                   MOV     TH2,#0FEH     ;定時器T2置初值
                   MOV     TL2,#0C8H  
                   MOV     T2CON,#34H    ;T2工作方式:波特率發生器,同時啟動Time2定時器
                   CLR     TI  
                   CLR     30H           
                  
                   MOV     TMOD,#11H     ;T1、T0為16位定時器
                   MOV     TH0,#00H      ;65毫秒初值
                   MOV     TL0,#00H
                   MOV     TH1,#00H     
                   MOV     TL1,#00H
                   MOV     P0,#0FFH
                   MOV     P1,#0FFH
                   MOV     P2,#0FFH
                   MOV     P3,#0FFH
                   MOV     R4,#04H       ;超聲波脈沖個數控制(為賦值的一半,即2個超聲波)
                   SETB    PX0
                   CLR     IE0           ;外部中斷0中斷請求標志位。當主機響應中斷轉向該中斷服務程序執行時,由內部硬件自動將IE0位清0
                   SETB    IT0           ;當IT0 = 1時,則外部中斷0(INT0 )端口由“1 ”→“0 ”下降沿跳變,激活中斷請求標志位IE0,向主機請求中斷處理
                   SETB    ET1           ;允許T1中斷
                   SETB    EA
                   SETB    TR1           ;開啟測距定時器
;main主循環開始                  
            start1:
                    JNB    30H,$         ;收到反射信號時標志位為1
                    
                    CLR    EA            ;不讓T1中斷                 
                    MOV    R2,#64H       ;測量間隔控制(約5*100=500MS). 64H = 100
              LOOP: LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS
                    LCALL  DL1MS                    
                    DJNZ   R2,LOOP  
                                      
                    CLR    30H           ;清除反射信號標志位
                    CLR    ET0           ;關閉T0中斷
                    MOV    TH0,00H
                    MOV    TL0,00H
                    SETB   TR1           ;重新開啟測距定時器
                    SETB   EA                  
                    SJMP   start1
;main主循環結束

;****************************************************
;*                    中斷程序                      *
;****************************************************

;T1中斷,發超聲波用     ;T1中斷,65毫秒中斷一次
INTT1:          CLR     EA
                CLR     TR0
                CLR     EX0
                MOV     TH0,#00H
                MOV     TL0,#00H
                MOV     TH1,#00H
                MOV     TL1,#00H
                SETB    ET0             ;外部中斷0中斷請求標志位。當主機響應中斷轉向該中斷服務程序執行時,由內部硬件自動將IE0位清0
                SETB    EA
                SETB    TR0             ;啟動計數器T0,用以計算超聲波傳播時間
intt11:
                CPL     VOUT            ;發射40KHZ超聲波. 晶振:12MHz,1us
                nop
                nop
                nop
                nop
                nop
                nop
                nop
                nop
                nop                             
                DJNZ    R4,intt11       ;2us
                                        ;超聲波發送完畢
                CLR     IE0
                MOV     R4,#04H
                LCALL   DL1MS           ;延時2ms,避開發射的直達聲波信號,消除余震
                LCALL   DL1MS        
                SETB    EX0             ;開啟接收回波中斷
               
RETIOUT:        RETI

;外中斷0,收到回波時進入
PINT0:          nop
                jb      P3.2,pint0_exit
                CLR     TR0             ;關閉T0                 
                CLR     EA            
                CLR     EX0                  
               
                MOV     SBUF,TH0
                JNB     TI,$
                CLR     TI
               
                MOV     SBUF,TL0
                JNB     TI,$
                CLR     TI               
              
                MOV     TH0,#00H
                MOV     TL0,#00H
                JNB     p3.2,$
                SETB    30H             ;接收成功標志
pint0_exit:
                RETI
;

;****************************************************
;*                    延時程序                      *
;****************************************************
;
DL1MS:
               push    06H
               push    07H

               MOV    R6,#14H    ;14H = 20
        DL1:   MOV    R7,#19H    ;19H = 25
        DL2:   DJNZ   R7,DL2     ;2us * 25 = 50
               DJNZ   R6,DL1     ;50us * 20 = 1000us
               pop    07H
               pop    06H
               RET
;

;
DL100US:
               push    06H

               MOV    R6,#32H    ;32H = 50
        DL3:   DJNZ   R7,DL3     ;2us * 50 = 100us
               pop    07H
               pop    06H
               RET
;

   END





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av在线 | 九九九久久国产免费 | 国产精品久久久久久久久久久久久 | 99精品视频在线 | 五月天婷婷狠狠 | 成人高清视频在线观看 | 狠狠av | 日韩在线不卡 | 欧美日韩精品一区二区三区蜜桃 | 亚洲激情综合 | 亚洲一区亚洲二区 | 理论片87福利理论电影 | 国产福利二区 | 欧美日韩看片 | 香蕉久久av| 久久亚洲国产精品日日av夜夜 | 天天操天天摸天天干 | 亚洲精品影院 | 九九精品视频在线 | 红桃成人在线 | 精品日本中文字幕 | 瑟瑟激情 | 成人福利网 | 日韩中文字幕一区二区 | 国产欧美日韩久久久 | 精品国产不卡一区二区三区 | 亚洲美女网站 | 一区二区三区日韩 | 中文字幕国产精品 | 成人老司机 | 男人的天堂久久 | 成人精品一区二区三区中文字幕 | 狠狠影院 | 成人性视频免费网站 | 久久之精品 | 欧美日韩亚洲一区二区 | 国产yw851.c免费观看网站 | 黄色国产在线视频 | 亚洲国产高清在线观看 | 福利网址| 精品一区二区三区免费视频 |