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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2840|回復: 1
收起左側

可燃氣體報警器設計 單片機匯編源碼

[復制鏈接]
ID:306549 發表于 2018-4-12 13:34 | 顯示全部樓層 |閱讀模式
單片機源程序如下:
  1. 軟件設計源程序
  2. ;30H:存放舊濃度地址                  31H:現在濃度值(A/D轉換后換算取得的新濃度)
  3. ;40H:初始調零值=0                     32H:A/D轉換后的值   33H:A/D轉換完成(中斷完成)標志
  4. ;50H:初始預警值=50                 55H:存放BCD轉換中的百位數
  5. ;56H:存放BCD轉換中的十位數           60H:轉換完的個位存放地址
  6. ;61H:轉換完的十位存放地址          62H:轉換完的百位存放地址
  7. ;63H:存放轉換完的壓縮BCD碼供顯示用        R1:BCD轉換中存放的百位數(可做百位報警)
  8. ;R2:BCD轉換中存放十位數>60H R3:當前濃度值保存
  9. ;R4:設置改變模式延時時間            R5,R6:延時程序中用到
  10. ;SP:堆棧->#70H
  11. ;* * * * * * * * * * * * * * * * *
  12. ;    可燃氣體探測報警器
  13. ;                 2008.5.20
  14. ;* * * * * * * * * * * * * * * * *
  15. ;* * * * * * * * * * * * * * * * *
  16. ;   各引腳用途及系統功能說明
  17. ;P1.4     接綠燈,指示正常
  18. ;P1.5     接黃燈,指示故障
  19. ;P1.6     接紅燈,燈光報警
  20. ;P1.7     接喇叭,音樂報警
  21. ;P2.0     接ADC0809
  22. ;P2.2     接調零開關
  23. ;P2.3     接繼電器,控制排氣閥門
  24. ;* * * * * * * * * * * * * * * * *
  25. ;      主     程     序
  26. ;* * * * * * * * * * * * * * * * *
  27.       ORG  00H
  28.       JMP  START         ;主程序入口地址
  29.       ORG  03H
  30.       JMP  INTO          ;外中斷INTO入口
  31.       ORG  0BH
  32.       JMP  ITOP        ; 定時器0中斷入口
  33.       ORG 0100H
  34. START:   MOVIE,#10000001B          ;INT0中斷使能
  35.          MOVIP,#00000001B           ;INT0中斷優先
  36.          MOVTCON,#00000000B        ;設置INT0為電平觸發
  37.          MOVSCON,#00000000B         ;串行口發送,接收標志位請0
  38.         MOV SP,#60H             ;設堆棧指針
  39.          MOV TMOD,#01H           ;設置T0為方式1
  40.          CALL PT0M0
  41. HERE:    AJMP HERE               ;自身跳轉
  42. PT0M0:   MOV TL0,#0CH            ;T0中斷服務程序,T0重新置初值
  43.          MOV TH0,#0FEH
  44.          SETB TR0                ;啟動T0
  45.          SETB ET0                ;允許T0中斷
  46.          SETB EA                 ;CPU開中斷
  47.          RET
  48. ITOP:    MOV TL0,#0CH            ;T0中斷服務程序,T0置初值
  49.          MOV TH0,0FEH
  50.          CPL P1.0               ;P1.0狀態取反
  51.          RETI
  52.          ACALL  LED                   ;調用LED自檢子程序
  53.          MOV 33H,#00H               ;設置中斷完成標志為0
  54.          MOV DPTR,#0FEFFH            ;ADC0809的端口地址
  55.          MOVX @DPTR,A                 ;使BUS為高阻抗,令ADC0809開始轉換
  56. WAIT:MOV A,33H                 ;等待A/D轉換完成信號
  57.          JNZ INTOK
  58.          JMP WAIT               ;未完成則跳回等待
  59. INTOK:   MOV A,32H                  ;將最新的濃度值存入累加器中,(若A/D未工作,則A=0)
  60.          JNZ  L1
  61.          MOV A,30H
  62.          JMP L2
  63. L1:      MOV 30H,31H
  64.          MOV A,31H                   ;將新濃度載入累加器
  65. L2:      CALL BCD                    ;調用BCD碼調整程序
  66.          CALL DISP                   ;顯示當前濃度
  67.          CALL ADZERO                 ;調用零點調整子程序
  68.          CALL ALARM                  ;調用判斷報警程序
  69.          CALL BCD
  70.          CALL DISP                   ;調用顯示子程序
  71.          CLR A                       ;清除累加器值
  72.          JMP START                   ;返回
  73.           ; 在主程序通過對33H中數值的判斷斷定A/D是否轉換完成
  74.           ; 當33H中為1時,轉換完成,程序調用調零、報警、顯示模塊對輸入數據進行處理。
  75. ;* * * * * * * * * * * * * * * * *
  76. ;          LED自檢子程序
  77. ;* * * * * * * * * * * * * * * * *
  78. LED:      CLR P1.4             ;綠燈
  79.           CLR P1.5             ;黃燈
  80.           CLR P1.6             ;紅燈
  81.           CALL DELAY2s
  82. DELAY2s:   MOV R5,#100
  83. DLY1:      MOV R6,#100
  84. DLY2:      MOV R7,#100
  85.            DJNZ R7,$
  86.            DJNZ R6,DLY2
  87.            DJNZ R5,DLY1
  88.            RET
  89.            SETB P1.4
  90.            SETB P1.5
  91.            SETB P2.6
  92.            RET
  93. ;* * * * * * * * * * * * * * * * *
  94. ;            調零子程序
  95. ;      (初始報警值為50)
  96. ;* * * * * * * * * * * * * * * * *
  97. ADZERO : CALL DELAY20ms
  98.         JB P2.2,JMP1                 ;判斷調零按紐是否按下,沒有則跳JMP1
  99. LOOP1:  CALL DELAY20ms
  100.         JNB P2.2,$                   ;消除抖動延時
  101.         MOV A,40H                    ;將調零預設值40H送入
  102.         CLR C                        ;清除進位標志
  103.         SUBB A,#01H                  ;調零值減1
  104.         JNC LOOP2                    ;未借位則跳LOOP2
  105.         MOV A,#05H                   ;有借位則重設調零值為5
  106. LOOP2:  MOV 40H,A                    ;將調零值送回40H保存
  107.         MOV A,R3                     ;將當前濃度值送入A
  108.         JZ XEND
  109.         DEC A                        ;當前濃度值減1(響應調整變化)
  110. XEND1:  MOV 30H,A                    ;送回30H保存
  111.         MOV 31H,A                    ;送回31H保存
  112.         CALL BCD
  113.         CALL DISP
  114.         JMP LOOP1
  115. XEND:   MOV A,#63H
  116.         JMP XEND1
  117.         JMP1: RET
  118. ;* * * * * * * * * * * * * * * * *
  119. ;  3位串行靜態顯示子程序
  120. ;* * * * * * * * * * * * * * * * *
  121. BCD:    MOV 55H,#00H                 ;存放BCD轉換中的百位數
  122.         MOV 56H,#00H                 ;存放BCD轉換中的十位數
  123.         CLR C                        ;清楚進位標志為下面的SUBB準備
  124.         MOV R2,#00H                  ;清楚R2
  125. CHAN:   SUBB A,#64H                  ;減100
  126.         JC CHAN1                     ;不能減,轉
  127.         INC R1                       ;百位值
  128.         JMP CHAN                     ;循環判斷百位
  129. CHAN1:  ADD A,#64H                   ;還原百位數
  130.         CLR C                        ;清楚進位標志為下面的SUBB準備
  131. CHAN2:  SUBB A,#0AH                  ;減10
  132.         JC CHAN3                     ;不夠減,跳
  133.         INC R2                       ;夠減十位加1
  134.         JMP CHAN2                    ;重復減10
  135. CHAN3:  ADD A,#0AH                   ;還原十位數
  136.         MOV 61H,R2                   ;把十位數放61H
  137.         MOV 60H,A                    ;把個位數放60H
  138.         MOV 62H,R1                   ;把百位數放62H
  139.         RET
  140. DISP:   MOV R7,#03H
  141.         MOV R0,#60H
  142. LED1:  MOV A,@R0
  143.         MOV DPTR,#TABLE
  144. LED2:   MOVC A,@A+DPTR
  145.         MOV SBUF,A
  146.         JNB TI,$
  147.         CLR TI
  148.         INC R0
  149.         DJNZ R7,LED1
  150.         RET
  151. DELAY20ms:  MOV R5,#40                   ;設定20毫秒
  152. D1:     MOV R6,#248
  153.         DJNZ R6,$
  154.         DJNZ R5,D1
  155.         RET
  156. ;* * * * * * * * * * * * * * * * *
  157. ;           報警子程序
  158. ;* * * * * * * * * * * * * * * * *
  159. ALARM:  MOV A,30H                    ;將當前濃度值送如累加器
  160.         CLR C                        ;清除進位標志
  161.         SUBB A,50H                   ;與預警值進行判斷
  162.         JNC GOOD1                    ;若無借位,則當前濃度值高于或者等于預警值,跳GOOD1報警
  163.         SETB P1.6                  ;關閉聲光報警
  164.         SETB P1.7
  165.         CLR P2.3                   ;關閉排氣閥門
  166.         SETB P1.5               ;關閉黃色LED
  167.         CLR P1.4                    ;打開綠色LED(顯示正常)
  168.         RET
  169.       GOOD1: CLR P1.6                ;打開聲光報警(危險報警)
  170.              CLR P1.7
  171.              CLR P2.3                ;打開排氣閥門
  172.              SETB P1.5               ;關閉黃色LED
  173.               SETB P1.4             ;關閉綠色LED(顯示不正常?
  174.            RET
  175. ;* * * * * * * * * * * * * * * * *
  176. ;         中斷取值子程序
  177. ;* * * * * * * * * * * * * * * * *
  178. INTO: PUSH ACC                    ;將累加器值壓入堆棧保存
  179.         PUSH PSW                     ;將PSW值壓入堆棧保存
  180.         MOVX A,@DPTR                   ;將A/D轉換好的值送入累加器
  181.         MOV 32H,A                    ;將A/D讀得的值存入32H保存
  182.         CLR C
  183.         SUBB A,51H                   ;判斷獲得的電壓是否小于1V(50)
  184.         JNC OK1
  185.         MOV 32H,#00H                 ;當前A/D轉換的電壓小于1V,則A/D轉換得的示數為00
  186.         JMP EMP1
  187.      OK1: MOV A,32H
  188.      CALL ADJUST                     ;調用ADJUST將其調整為濃度對應的16進制
  189.      CALL ADDD                       ;調用ADDD將其與調零預設值相加,得到調整后的16進制
  190.      MOV 31H,A                       ;將調整后的值送入31H保存
  191.        EMP1: MOVIE,#10000000B       ;關閉INT0中斷使能,關閉中斷
  192.         POP PSW                      ;至堆棧取回PSW值
  193.         POP ACC                      ;至堆棧取回ACC值
  194.        MOV 33H,#01H                  ;中斷完成,設置完成標記33H為1
  195.         RETI
  196. ;* * * * * * * * * * * * * * * * *
  197. ;    調整相加子程序
  198. ;* * * * * * * * * * * * * * * * *
  199.     ADJUST: CLR C
  200.             SUBB A,#32H              ;將A/D轉換的值減50再除10乘5可得當前濃度的16進制值
  201.             MOV B,#0AH
  202.             DIV AB
  203.             MOV B,#05H
  204.             MUL AB
  205.             RET
  206.      ADDD:  ADD A,40H
  207.     TABLE:
  208.         DB 0C0H,0F9H,0A4H,0B0H,99H
  209.         DB 92H, 82H, 0F8H,80H, 90H
  210.        END
復制代碼
回復

使用道具 舉報

ID:365243 發表于 2018-7-4 23:17 來自觸屏版 | 顯示全部樓層
樓主這個對應的仿真圖,是什么樣的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品不卡一区 | 中文字幕国产视频 | 国产欧美一区二区三区在线看蜜臀 | 久久成人午夜 | 欧美激情一区二区 | 91精品久久久久久久久 | 一区福利视频 | 激情91| 亚洲精品一区二区 | 久久久国产一区二区三区 | h免费观看 | 久久久久久av | 国产成人免费观看 | 国产丝袜一区二区三区免费视频 | 自拍在线 | 97免费视频在线观看 | 在线免费黄色小视频 | 欧美日韩国产在线 | 亚洲欧美日韩精品久久亚洲区 | 一区二区三区精品在线视频 | 亚洲精品一区二区三区蜜桃久 | 中文一区二区视频 | 中文字幕高清免费日韩视频在线 | 免费观看av网站 | 免费在线观看av网站 | 精品久久久久久久人人人人传媒 | 国产高清视频一区 | 欧美成人精品一区二区男人看 | 亚洲第1页| 亚洲欧美中文日韩在线v日本 | 欧美一区视频 | 成人一区二区视频 | 国产精品一区二区三区四区五区 | 久久精品免费 | 高清av一区 | 久久久www成人免费精品 | 九九在线视频 | 国产欧美日韩一区 | 国产一区二区三区在线看 | 日本在线播放一区二区 | 另类二区 |