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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于AT89c51單片機的超聲波測距匯編語言源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198058 發(fā)表于 2017-5-8 11:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序清單
以下是用匯編語言編寫的超聲波測距控制源程序:
采用AT89S51 12MHz晶振
顯示緩沖單元在40H~43H,使用內(nèi)存44H、45H、46H用于計算距離
20H用于標(biāo)志

完整資料下載:
asdfdf.doc (59 KB, 下載次數(shù): 57)

單片機源程序:
  1. VOUT   EQU    P1.0   ;脈沖輸出端口
  2. *中斷入口程序*
  3. ORG  0000H
  4.       LJMP  START
  5. ORG  0003H
  6.       LJMP  PINT0
  7. ORG  000BH
  8.       LJMP  INTT0
  9. ORG  0013H
  10.       RETI
  11. ORG  001BH
  12.       LJMP  INTT1
  13. ORG  0023H
  14. RETI
  15. ORG  002BH
  16.       RETI

  17. *主程序*
  18. START: MOV  SP, #4FH
  19.        MOV  R0, #40H   ;40~43H為顯示數(shù)據(jù)存放單元(40為最高位)
  20.        MOV  R7,#0BH

  21. CLEARDISP:MOV  @R0, #00H
  22.             INC   R0
  23.             DJNZ  R7, CLEARDISP
  24.             MOV  20H, #00H
  25.             MOV  TMOD, #21H    ;T1為8位自動重裝模式,T0為16位定時器
  26.             MOV  TH0, #00H      ;65ms初值
  27.             MOV  TL0, #00H      ;40KHz初值      
  28.             MOV  TH1, #0F2H
  29.             MOV  TL1, #0F2H
  30.             MOV  P0, #0FFH
  31. MOV  P1, #0FFH
  32.             MOV  P2, #0FFH
  33.             MOV  P3, #0FFH
  34. MOV  R4, #04H        ;超聲波脈沖個數(shù)控制(為賦值的一半)
  35. SETB  PX0
  36. SETB  ET0
  37. STEB  EA
  38. CLR   00H
  39. SETB  TR0                    ;開啟測距定時器

  40. START1:    LCALL  DISPLAY
  41.             JNB     00H, START1       ;收到反射信號時標(biāo)志位為1
  42.             CLR  EA
  43.             LCALL  WORK          ;計算距離子程序
  44.             SETB    EA
  45.             CLR     00H
  46.             SETB    TR0             ;重新開啟測距定時器
  47.             MOV    R2, #64H         ; 測量間隔控制(約4*100=400ms)

  48. LOOP:      LCALL  DISPLAY
  49.             DJNZ   R2, LOOP
  50.             SJMP   START 1

  51. *中斷程序*
  52. ;T0中斷,65ms中斷一次
  53. INTT0:      CLR    EA
  54.             CLR    TR0
  55.             MOV   TH0, #00H
  56.             MOV   TL0, #00H
  57.             SETB   ET1
  58.             SETB   EA
  59.             SETB   TR0                ;啟動計時器T0,用以計算超聲波來回時間
  60.             SETB   TR1                ;開啟發(fā)超聲波用定時器T1
  61. OUT:        RETI


  62. ;T1中斷,發(fā)超聲波用
  63. INTT1:      CPL    VOUT
  64.             DJNZ   R4,RETIOUT
  65.             CLR    TR1               ;超聲波發(fā)送完畢,關(guān)T1
  66.             CLR    ET1
  67.             MOV   R4,#04H
  68.             SETB   EX0               ;開啟接收回波中斷
  69. RETIOUT:   RETI

  70. ;外中斷0,收到回波時進(jìn)入
  71. PINT0:       CLR   TR0                ;關(guān)計數(shù)器
  72.              CLR   TR1
  73.              CLR   ET1
  74.              CLR   EA
  75.              CLR   EX0
  76.              MOV  44H, TL0            ;將計數(shù)值移入處理單元
  77.              MOV  45H, TH0
  78.              SETB  00H                 ;接收成功標(biāo)志
  79.              RETI

  80. *延時程序*
  81. DL1MS:      MOV  R6, #14H
  82. DL1:         MOV  R7, #19H
  83. DL2:         DJNZ  R6, DL2
  84.              DJNZ  R6, DL1
  85.              RET


  86. *顯示程序*
  87. ;40H為最高位,43H為最低位,先掃描高位
  88. DISPLAY:                MOV        R1, #40H;G
  89.                                 MOV        R5,#0F7H;G

  90.         PLAY:                MOV        A, R5
  91.                                 MOV        P0, #0FFH               
  92.                                 MOV        P2, A
  93.                                 MOV        A, @R1
  94.                                 MOV        DPTR, #TAB
  95. MOVC        A, @A+DPTR
  96. MOV        P0, A
  97. LCALL DLIMS
  98. INC                R1
  99. MOV        A, R5
  100. JNB        ACC.0, ENDOUT;G
  101. RR                A
  102. MOV        R5, A
  103. AJMP        PLAY

  104. ENDOUT;                MOV        P2, #0FFH
  105.                                 MOV        P0, #0FFH
  106.                                 RET

  107. TAB; DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,88H,0BFH
  108. ;共陽數(shù)碼管  0 ,1, 2,3,4,5,6,7,8,9,不亮,A, —

  109. *距離計算程序(=計算值×17/1000cm)  近似
  110. WORK:                        PUSH        ACC
  111.         PUSH        PSW
  112.               PUSH        B
  113.         MOV        PSW, #18H
  114.         MOV        R3, 45H
  115.         MOV        R2, 44H
  116.         MOV        R1, #00D
  117.         MOV        R0, #17D
  118.         LCALL MUL2BY2
  119.         MOV        R3, #03H
  120.         MOV        R2, #0E8H
  121.           LCALL        DIV4BY2
  122.         LCALL        DIV4BY2
  123.         MOV        40H, R4        
  124.         MOV        A, 40H
  125.         JNZ        JJ0
  126.         MOV        40H, #0AH           ;最高位為0,不點亮

  127. JJ0:        MOV        A        R0
  128.         MOV        R4, A
  129.         MOV        A        R1
  130.         MOV        R5         A
  131.         MOV         R3, #00D
  132.         MOV        R2, #100D
  133.         LCALL        DIV4BY2
  134.         MOV        41H, R4
  135.         MOV        A, 41H
  136.          JNZ        JJ1
  137.         MOV        A, 40H         ;此高位為0,先看最高位是否為不亮
  138.          SUBB        A, #0AH
  139.         JNZ        JJ1
  140.         MOV        41H, #0AH      ; 最高位不亮,次高位也不亮

  141. JJ1:        MOV        A, R0
  142.         MOV        R4, A
  143.         MOV        A, R1
  144.         MOV        R5, A
  145.         MOV        R3, #00D
  146.         MOV        R2, #10D
  147.         LCALL DIV4BY2
  148.         MOV        42H, R4
  149.         MOV        A        42H        
  150.         JNZ        JJ2
  151.         MOV        A, 41H         ;次高位為0,先看次高位是否為不亮
  152.         SUBB        A, #0AH
  153.         JNZ        JJ2
  154.         MOV        42H, #0AH     ;次高位不亮,次高位也不亮

  155. JJ2:        MOV        43H, R0
  156.         POP        B
  157.         POP        PSW
  158.         POP        ACC
  159.         RET  

  160. *兩字節(jié)無符號數(shù)乘法程序
  161. MUL2BY2:        CLR        A
  162.         MOV        R7, A
  163.         MOV        R6, A
  164.         MOV  R5, A
  165.         MOV        R4, A
  166.         MOV        46H, #10H
  167. MULLOOP1:        CLR        C
  168.         MOV        A, R4
  169.         RLC        A
  170.         MOV        R4, A
  171.         MOV        A,        R5
  172.         RLC        A
  173.         MOV        R5, A
  174.         MOV        A, R6
  175.         RLC        A
  176.         MOV        R6, A
  177.         MOV        A, R7
  178.         RLC        A
  179.         MOV  R7, A
  180.         MOV  A, R0
  181.         RLC   A
  182.         MOV        R0, A
  183.         MOV        A, R1
  184.         RLC        A
  185.         MOV        R1, A
  186.         JNC        MULLOOP2
  187.         MOV        A, R4
  188.         ADD        A, R2
  189.         MOV        R4, A
  190.         MOV        A, R5
  191.         ADDC        A, R3
  192.         MOV        R5, A
  193.         MOV        A, R6
  194.         ADDC        A, #00H
  195.         MOV        R6, A
  196.         MOV        A, R7
  197.         ADDC        A, #00H
  198.         MOV        R7, A
  199. MULLOOP2:        DJNZ        46H, MULLOOP1
  200.         RET
  201.         
  202. *四字節(jié)/兩字節(jié)無符號數(shù)除法程序*
  203. DIV4BY2:        MOV        46H, #20H
  204.         MOV        R0,        #00H
  205.         MOV        R1, #00H

  206. DIVLOOP1:          MOV        A, R4
  207.                  RLC        A
  208.         MOV        R4, A
  209.         MOV        A, R5
  210.         RLC        A
  211.         MOV        R5, A
  212.         MOV        A, R6
  213.         RLC        A
  214.         MOV        R6, A
  215.         MOV        A, R7
  216.         RLC        A
  217.         MOV        R7, A
  218.         MOV        A, R0
  219.         RLC        A
  220.         MOV        R0, A
  221.         MOV        A, R1
  222.         RLC        A
  223.         MOV        R1, A
  224.         CLR        C
  225.         MOV        A, R0
  226.         SUBB        A, R2
  227.         MOV        B, A
  228.         MOV  A, R1
  229.         SUBB        A, R3
  230.         JC                DIVLOOP2
  231.         MOV        R0, B
  232.         MOV        R1, A
  233.         
  234. DIVLOOP2:        CPL        C
  235.         DJNZ        46H, DIVLOOP1
  236.         MOV        A, R4
  237.         RLC        A
  238.         MOV        R4,        A
  239.         MOV        A,        R5
  240.         RLC        A
  241.         MOV        R5,        A
  242.         MOV        A, R6
  243.                      RLC        A
  244.         MOV        R6, A
  245.         MOV        A, R7
  246.         RLC        A
  247.         MOV        R7, A
  248.         RET
  249. ;
  250.         END

  251.            附C51程序

  252. #INCLUDE <REG51.H>
  253. #DEFINE UCHAR UNSIGNED CHAR
  254. #DEFINE UINT UNSIGNED INT
  255. #DEFINE ULONG UNSIGNED LONG

  256. EXTERN VOID CS_T(VOID);
  257. EXTERN VOID DELAY(UINT);
  258. EXTERN VOID DISPLAY(UCHAR*);
  259. //DATA UCHAR DISPLAY(UCHAR*);
  260. DATA UCHAR TESTOK;



  261. VOID MAIN (VOID)
  262. {
  263. DATA UCHAR DISPRAM[5];
  264. DATA UINT I;
  265. DATA ULONG TIME;
  266. P0=0XFF;
  267. P2=0XFF;
  268. TMOD=0X11;
  269. IE=0X80;
  270. WHILE (1)
  271. {
  272. CS_T();
  273. DELAY(1);
  274. TESTOK=0;
  275. EX0=1;
  276. ET0=1;
  277. WHILE(! TESTOK) DISPLAY(DISPRAM);
  278. IF (1==TESTOK)
  279.    {
  280.    TIME=TH0;
  281.    TIME=(TIME<<8)| TL0;
  282.    TIME*=172;  
  283.    TIME/=10000;
  284.    DISPRAM[0]=(UCHAR) (TIME%10);
  285.    TIME/=10;
  286.    DISPRAM[1]=(UCHAR) (TIME%10);
  287.    TIME/=10;
  288.    DISPRAM[2]=(UCHAR) (TIME%10);
  289.    DISPRAM[3]=(UCHAR) (TIME/10);
  290.    IF (0==DISPRAM[3]) DISPRAM[3]=17;
  291.    } ELSE
  292.    {
  293.    DISPRAM [0]=16;
  294.    DISPRAM [1]=16;
  295.    DISPRAM [2]=16;
  296.    DISPRAM [3]=16;
  297.    }
  298. FOR (I=0;I<300;I++) DISPLAY(DISPRAM);
  299. }
  300. }



  301. VOID CS_R(VOID) INTERRUPT 0
  302. {
  303. TR0=0;
  304. ET0=0;
  305. EX0=0;
  306. TESTOK=1;
  307. }



  308. VOID OVERTIME(VOID) INTERRUPT 1
  309. {
  310. EX0=0;
  311. TR0=0;
  312. ET0=0;
  313. TESTOK=2;
  314. }
  315.                      NAME      CS_T
  316. ?PR?CS_T?CS_T             SEGMENT   CODE
  317.                      PUBLIC   CS_T   
  318.                         RSEG     ?PR?CS_T?CS_T
  319. CS_T:                PUSH      ACC
  320.                      MOV       TH0, #00H
  321.                      MOV       TL0, #00H
  322.                      MOV       A, #4D
  323.                      SETB       TR0
  324. CS_T1:               CPL        p1.0
  325.                      NOP
  326.                              NOP
  327.                              NOP
  328.                      NOP
  329.                      NOP
  330.                      NOP
  331.                      NOP
  332.                      NOP
  333.                      NOP
  334.                      NOP
  335.                      DJNZ       ACC,CS_T1
  336.                      POP        ACC
  337.                      RET
  338. ;
  339.                      END  
  340. NAME   DELAY
  341. ?PR?_DELAY?DELAY   SEGMENT   CODE
  342. PUBLIC   _DELAY
  343. RSEG    ?PR?_DELAY?DELAY
  344. _DELAY:    PUSH   ACC
  345.            MOV A,R7
  346.            JZ   DELA1
  347.            INC   R6
  348. DELA1:   MOV   R5,#50D
  349.          DJNZ   R5, $
  350.          DJNZ   R7,DELA1
  351.          DJNZ    R6,DELA1
  352.             POP   ACC
  353.            RET
  354. END
  355.     NAME  DISPLAY
  356. ?PR?_DISPLAY?DISPLAY   SEGMENT  CODE
  357. ?CO?_DISPLAY?DISPLAY    SEGMENT  DATA
  358.                         EXTRN    CODE    (_DELAY)
  359.                         PUBLIC    _DISPLAY
  360.                         RSEG    ?CO?_DISPLAY?DISPLAY
  361. ?_DISPLAY?BYTE:
  362. DISPBIT:   DS  1
  363. DISPNUM:   DS  1
  364.            RSEG    ?PR?_DISPLAY?DISPLAY
  365. _DISPLAY:  PUSH ACC
  366.            PUSH  DPH
  367.            PUSH  DPL
  368.           PUSH  PSW
  369.            INC   DISPNUM
  370.             MOV A,DISPNUM
  371.            CJNE  A,#4D,DISP1
  372. DISP1:    JC  DISP2
  373.            MOV  DISPNUM,#00H
  374.            MOV  DISPBIT,#0FEH
  375. DISP2:     MOV  A,R1
  376.            ADD   A,DISPNUM
  377.            MOV  R0,A
  378.            MOV  A,@R0
  379.            MOV  DPTR,#DISPTABLE
  380.            MOVC   A,@A+DPTR
  381.            MOV P0,A
  382.            MOV A,DISPNUM
  383.            CJNE  A,#2D,DISP3
  384.            CLR   P0.7
  385. DISP3:       MOV P2,DISPBIT
  386.              MOV R5,#00H
  387.              MOV  R7,#0AH
  388.              LCALL  _DELAY
  389.              MOV P0,#0FFH
  390.              MOV  P2,#0FFH
  391.              MOV A,DISPBIT
  392.              RL   A
  393.               MOV DISPBIT,A
  394.              POP  PSW
  395.              POP   DPL


  396. …………限于本文篇幅 余下代碼請從51黑下載附件…………

復(fù)制代碼

評分

參與人數(shù) 1黑幣 +3 收起 理由
阿佳啊 + 3 很給力!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:256444 發(fā)表于 2017-12-2 21:57 | 只看該作者
你好,樓主,請問有沒有仿真文件啊
回復(fù)

使用道具 舉報

板凳
ID:333970 發(fā)表于 2018-5-19 23:47 | 只看該作者
同問 請問有仿真文件嗎
回復(fù)

使用道具 舉報

地板
ID:434819 發(fā)表于 2018-11-30 15:10 | 只看該作者
想問一下,超聲波的trig  tcho分別接在哪個io口?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 米奇成人网 | 国产农村妇女精品一二区 | 中文字幕一区二区视频 | 99综合在线 | 韩日在线| 国产欧美日韩综合精品一 | 精品视频一区二区 | 亚洲成人三级 | 综合色站导航 | 激情三区 | 久久精品视频99 | 黄网站涩免费蜜桃网站 | 亚洲欧美视频 | 一区二区三区国产在线观看 | 中文字幕在线视频精品 | 国产一区二区电影 | 成人在线中文字幕 | 久久亚洲高清 | 日韩美女爱爱 | 在线免费黄色小视频 | 欧洲毛片 | 丁香婷婷综合激情五月色 | 国产精品一区二区三区在线 | 久草青青| 99久久久久国产精品免费 | 亚洲国产一区在线 | 在线观看的av | 欧美精品一区二区三区在线播放 | 日韩av一区二区在线观看 | 日韩国产在线 | 中文字幕视频在线免费 | 国产精品一区二区无线 | 日韩成人一区 | www.亚洲精品 | 不卡av在线| 亚洲网在线 | 国产免费拔擦拔擦8x高清 | 欧美综合一区二区 | 一区二区三区影院 | 中文字幕第7页 | 中文字幕国产视频 |