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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

完整資料下載:
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       ;收到反射信號時標志位為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ā)送完畢,關T1
  66.             CLR    ET1
  67.             MOV   R4,#04H
  68.             SETB   EX0               ;開啟接收回波中斷
  69. RETIOUT:   RETI

  70. ;外中斷0,收到回波時進入
  71. PINT0:       CLR   TR0                ;關計數(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                 ;接收成功標志
  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黑下載附件…………

復制代碼

評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99热欧美| 999久久久免费精品国产 | 一区二区三区高清 | 中文字幕一区二区三区在线乱码 | 一区二区国产在线观看 | 国产精品美女久久久免费 | 久在草| 免费av在线网站 | 一区二区av| 91精品国产综合久久久密闭 | 色久伊人| 国产精品永久免费 | 久久久久久久久久久蜜桃 | 欧美成人aaa级毛片在线视频 | 小视频你懂得 | 在线视频成人 | 99re视频在线| 成人做爰www免费看视频网站 | 成人激情视频在线观看 | 免费v片在线观看 | 国产激情视频网址 | 亚洲精品一区二区三区四区高清 | av中文字幕在线播放 | 亚洲 欧美 日韩 在线 | 国产精品a久久久久 | 涩涩视频在线观看 | 久久久久国产精品一区三寸 | 成人欧美一区二区三区在线播放 | 一区二区免费看 | 日日夜夜免费精品 | 成人在线播放网站 | 精品二区 | 欧美久久一区 | 日韩电影中文字幕 | 中文字幕在线播放不卡 | 草久久久| 日本综合在线观看 | 黄色在线观看网址 | 亚洲综合色 | 成人激情视频免费在线观看 | 99爱在线视频 |