找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

8通道車(chē)燈檢測(cè)程序(匯編)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70976 發(fā)表于 2014-12-26 22:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. ;時(shí)鐘 11.0592MHz,波特率=9600.

  2.          CONTR EQU 0C5H         ;A/D轉(zhuǎn)換寄存器
  3.          DAT   EQU 0C6H         ;A/D轉(zhuǎn)換結(jié)果寄存器

  4.          OUT   EQU  30H         ;測(cè)量后數(shù)值的8個(gè)地址的起始地址(30~37H)
  5.          BIAOS EQU  20H         ;20H.0為發(fā)送串口數(shù)據(jù)標(biāo)識(shí)位,為1時(shí)發(fā)送數(shù)據(jù),為0時(shí)不發(fā)送數(shù)據(jù)
  6.          ZHIL  EOU  10H         ;識(shí)別主機(jī)發(fā)來(lái)的指令代碼的,10H表示要顯示車(chē)燈狀態(tài)

  7.          P1M0  EQU  91H         ;P1口模式選擇寄存器0
  8.          P1M1  EQU  92H         ;P1口模式選擇寄存器1

  9. ;=================================================================================
  10. ;主程序
  11. ;=================================================================================
  12.          ORG 0000H
  13.          LJMP KS
  14.          ORG 0003H
  15.          LJMP INTO              ;串口中斷
  16.          ORG 0100H

  17. KS:      MOV SP,#60H            ;設(shè)置堆棧
  18.          MOV CHKOU,#00H         ;清標(biāo)識(shí)
  19.          ACALL POWER            ;初始化AD轉(zhuǎn)換程序
  20.          ********************** ;初始化串口中斷
  21.          ACALL RS232            ;初始化串口

  22. KS1:     ACALL ADZH             ;調(diào)用AD轉(zhuǎn)換程序
  23.          ACALL ZTCB             ;調(diào)用車(chē)燈狀態(tài)識(shí)別程序
  24.          JB BIAOS.0,KS2         ;檢測(cè)主機(jī)是否發(fā)來(lái)要求顯示數(shù)據(jù)代碼指令
  25.          ACALL FSDM             ;收到指令,則發(fā)送車(chē)燈狀態(tài)標(biāo)識(shí)代碼到主機(jī)
  26.          CLR BIAOS.0            ;發(fā)送數(shù)據(jù)完畢清標(biāo)識(shí)

  27. KS2:     MOV R5,#100            ;100--延時(shí)1S
  28. LP1:     MOV R6,#200
  29.          ACALL DELAY
  30.          DJNZ R5,LP1
  31.          SJMP KS1               ;重新檢測(cè)


  32. INTO:                    ;串口接收程序
  33.          CJNE A,#ZHIL,L1        ;收到主機(jī)發(fā)來(lái)10H指令代碼的表示要顯示車(chē)燈狀態(tài),其他代碼視為無(wú)效
  34.          SETB BIAOS.0           ;設(shè)顯示標(biāo)識(shí)
  35. L1:      RET





  36. ;=================================================================================
  37. ;AD初始化程序
  38. ;=================================================================================
  39. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  40. ;開(kāi)ADC電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源
  41. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  42. POWER:   ORL CONTR,#10000000H   ;開(kāi)A/D轉(zhuǎn)換電源
  43.          MOV R6,#2
  44.          ACALL DELAY            ;開(kāi)A/D轉(zhuǎn)換電源后要加延時(shí),1mS以?xún)?nèi)就足夠了
  45. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  46. ;設(shè)置P1.*,設(shè)置A/D通道所在的I/O為開(kāi)漏模式
  47. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  48. OPEN:    MOV P1M0,#11111111B    ;把P1口設(shè)為高阻輸入
  49.          MOV P1M1,#00000000B
  50.          RET

  51. ;=================================================================================
  52. ;AD初始化結(jié)束
  53. ;=================================================================================






  54. ;=================================================================================
  55. ;串口初始化
  56. ;=================================================================================
  57. RS232:   CLR ES                 ;禁止串口中斷
  58.          MOV TMOD,#20H          ;設(shè)置T1為波特率發(fā)生器
  59.          MOV SCON,#50H          ;0101,0000 8位數(shù)據(jù)位,無(wú)奇偶校驗(yàn)
  60.          MOV TH1,#0FDH          ;11.0592MHz 晶振,波特率=9600,時(shí)長(zhǎng)0.6695
  61.          MOV TL1,#96H  
  62.          SETB TR1               ;啟動(dòng)T1
  63.          RET

  64. ;=================================================================================
  65. ;串口初始化結(jié)束
  66. ;=================================================================================







  67. ;=================================================================================
  68. ;AD轉(zhuǎn)換程序
  69. ;=================================================================================

  70. ADZH:    MOV R0,#11100000B      ;從P1.0通道開(kāi)始測(cè)量,直到P1.7后返回再檢測(cè)
  71.          MOV R1,#OUT            ;測(cè)量后的數(shù)值(16進(jìn)制)分別放到OUT(30H)起8個(gè)地址內(nèi)
  72. LP2:     ACALL SET_CH           ;設(shè)置P1.*作為A/D轉(zhuǎn)換通道
  73.          ACALL GET_AD           ;測(cè)量電壓并且取A/D轉(zhuǎn)換結(jié)果
  74.          INC R1                 ;地址加1
  75.          INC R0                 ;換另一端口
  76.          CJNE R0,#11101000B,LP3 ;直到P1.7
  77.          MOV R0,#11100000B      ;再?gòu)腜1.0來(lái)
  78.          MOV R1,#OUT            ;重新設(shè)定存放AD轉(zhuǎn)換后數(shù)值的地址
  79.          SJMP LP2

  80. LP3:     RET                    ;返回

  81. ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  82. ;R0存通道地址代碼:11100000B~11100111B,R1存通道地址:分別為30H~37H
  83. ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  84. ;以下測(cè)量電壓程序
  85. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  86. ;設(shè)置P1.*作為A/D轉(zhuǎn)換通道
  87. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  88. SET_CH:  MOV CONTR,R0           ;選擇P1.*作為A/D轉(zhuǎn)換通道
  89.          MOV R6,#1              ;更換A/D轉(zhuǎn)換通道后要適當(dāng)延時(shí),使輸入電壓穩(wěn)定
  90.          ACALL DELAY         ;切換A/D轉(zhuǎn)換通道,加延時(shí)20uS~200uS就可以了,
  91.          RET

  92. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  93. ;測(cè)量電壓并且取A/D轉(zhuǎn)換結(jié)果
  94. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  95. GET_AD:  MOV DAT,#0
  96.          ORL CONTR,#00001000B   ;啟動(dòng) AD 轉(zhuǎn)換

  97. WAIT:    MOV A,#00010000B       ;判斷 AD 轉(zhuǎn)換是否完成
  98.          ANL A,CONTR
  99.          JZ WAIT                ;AD 轉(zhuǎn)換尚未完成,繼續(xù)等待
  100.          ANL CONTR,#11100111B   ;清0 ADC_FLAG,ADC_START位,停止A/D轉(zhuǎn)換         
  101.          MOV A,DAT
  102.          MOV @R1,A              ;保存 AD 轉(zhuǎn)換結(jié)果
  103.          RET

  104. ;=================================================================================
  105. ;AD轉(zhuǎn)換結(jié)束
  106. ;=================================================================================






  107. ;=================================================================================
  108. ;車(chē)燈狀態(tài)識(shí)別程序
  109. ;=================================================================================
  110. ZTCB:    MOV A,30H
  111.          CJNE A,#00H,L11        ;讀取車(chē)燈狀態(tài),如果為0,表示沒(méi)有通電
  112.          CLR P2.0               ;給燈泡通電
  113.          ACALL ADZH2            ;AD轉(zhuǎn)換讀取數(shù)據(jù)
  114.          SETB P2.0              ;燈泡斷電
  115.          MOV A,30H
  116.          CJNE A,#00H,L12        ;讀取車(chē)燈狀態(tài),如果為0,表示短路
  117.          MOV 38H,#00010010B     ;作標(biāo)記,表示1#車(chē)燈短路
  118.          SJMP FAHUI
  119. L12:     CJNE A,#10H,L13        ;讀取車(chē)燈狀態(tài),如果為10H,表示正常
  120.          MOV 38H,#00010000B     ;作標(biāo)記,表示1#車(chē)燈正常
  121.          SJMP FAHUI
  122. L13:     CJNE A,#20H,L14        ;讀取車(chē)燈狀態(tài),如果為20H,表示缺燈
  123.          MOV 38H,#00010011B     ;作標(biāo)記,表示1#車(chē)燈缺燈
  124.          SJMP FAHUI
  125. L14:     CJNE A,#0F0H,FAHUI     ;讀取車(chē)燈狀態(tài),如果為F0H,表示開(kāi)路
  126.          MOV 38H,#00010011B     ;作標(biāo)記,表示1#車(chē)燈開(kāi)路
  127.          SJMP FAHUI

  128. L11:     CJNE A,#0F0H,FAHUI     ;讀取車(chē)燈狀態(tài),如果為F0H,表示正在通電
  129.          MOV 38H,#00011000B     ;作標(biāo)記,表示1#車(chē)燈通電

  130. FAHUI;  RET


  131. ADZH2:   MOV R0,#11100000B      ;從P1.0通道開(kāi)始測(cè)量,直到P1.7后返回再檢測(cè)
  132.          MOV R1,#OUT            ;測(cè)量后的數(shù)值(16進(jìn)制)分別放到OUT(30H)起8個(gè)地址內(nèi)
  133.          ACALL SET_CH           ;設(shè)置P1.*作為A/D轉(zhuǎn)換通道
  134.          ACALL GET_AD           ;測(cè)量電壓并且取A/D轉(zhuǎn)換結(jié)果
  135.          RET
  136. ;=================================================================================
  137. ;車(chē)燈狀態(tài)識(shí)別結(jié)束
  138. ;=================================================================================







  139. ;=================================================================================
  140. ;向主機(jī)發(fā)送數(shù)據(jù)程序
  141. ;=================================================================================
  142. FADM:    CLR TI
  143.          MOV A,@R1
  144.          MOV SBUF,A
  145.          JNB TI,$
  146.          CLR TI
  147.          INC R1
  148.          CJNE R1,#38H,FADM
  149.          MOV R1,#30H
  150.          RET
  151. ;=================================================================================
  152. ;向主機(jī)發(fā)送數(shù)據(jù)結(jié)束
  153. ;=================================================================================





  154. ;=================================================================================
  155. ;延時(shí)子程序
  156. ;=================================================================================
  157. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  158. ;延時(shí)500微秒子程序   
  159. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  160. DELAY:   MOV  R7,#229          ;延時(shí) 500 微秒,此條2個(gè)機(jī)器周期
  161.          DJNZ  R7,$
  162.          DJNZ R6,DELAY
  163.          RET                   ;此條2個(gè)機(jī)器周期,總延時(shí)(229*2+2+2)*(12/11.0592)≈500uS
  164. ;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

  165.          END
復(fù)制代碼


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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表