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

標題: 基于AT89c51單片機的超聲波測距匯編語言源程序 [打印本頁]

作者: 殤阡陌    時間: 2017-5-8 11:21
標題: 基于AT89c51單片機的超聲波測距匯編語言源程序
程序清單
以下是用匯編語言編寫的超聲波測距控制源程序:
采用AT89S51 12MHz晶振
顯示緩沖單元在40H~43H,使用內存44H、45H、46H用于計算距離
20H用于標志

完整資料下載:
asdfdf.doc (59 KB, 下載次數: 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為顯示數據存放單元(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        ;超聲波脈沖個數控制(為賦值的一半)
  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                ;開啟發超聲波用定時器T1
  61. OUT:        RETI


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

  70. ;外中斷0,收到回波時進入
  71. PINT0:       CLR   TR0                ;關計數器
  72.              CLR   TR1
  73.              CLR   ET1
  74.              CLR   EA
  75.              CLR   EX0
  76.              MOV  44H, TL0            ;將計數值移入處理單元
  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. ;共陽數碼管  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. *兩字節無符號數乘法程序
  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. *四字節/兩字節無符號數除法程序*
  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黑下載附件…………

復制代碼


作者: zx110    時間: 2017-12-2 21:57
你好,樓主,請問有沒有仿真文件啊
作者: 阿佳啊    時間: 2018-5-19 23:47
同問 請問有仿真文件嗎
作者: 12366abc    時間: 2018-11-30 15:10
想問一下,超聲波的trig  tcho分別接在哪個io口?





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 成人免费一区二区三区视频网站 | 中国美女一级黄色片 | 天天干.com| 色播视频在线观看 | 亚洲午夜精品一区二区三区 | 中文字幕在线观看 | 午夜成人在线视频 | 精品免费国产一区二区三区四区 | 久久国产美女视频 | 蜜桃在线一区二区三区 | www.久久99 | 国产yw851.c免费观看网站 | 欧美日韩成人在线 | 国产精品免费一区二区三区四区 | 羞视频在线观看 | 色婷婷一区二区三区四区 | 看羞羞视频免费 | 天天夜干 | 日韩一区二区在线视频 | 青青草精品视频 | 亚洲国产成人av好男人在线观看 | 国产精品免费一区二区三区四区 | 国产精品美女久久久久aⅴ国产馆 | 欧美一区二区三区,视频 | 综合婷婷 | 国产精品一二三区在线观看 | 久久一区精品 | 亚洲一区精品在线 | 日韩成人免费中文字幕 | 皇色视频在线 | 欧美精品免费观看二区 | 伊人手机在线视频 | 在线视频91 | 日本在线播放一区二区 | 九九热在线视频 | 欧美激情精品久久久久久 | 白浆在线 | 狠狠操狠狠操 | 国产成人精品一区二三区在线观看 | 粉嫩一区二区三区国产精品 | 国产成人亚洲精品 |