單片機

;*****************************
;** 變量及常數項定義   ***
;*****************************
        $INCLUDE(VARDFN.INC)  
;*****************************
 ORG 0000H
        LJMP MAIN
 ORG 0030H
MAIN:  
 $INCLUDE(INITIAL.INC) ;添加初始化模塊
MLOOP:  JNB TF0,$  ;4mS到?
 CLR TF0   ;清定時標誌
 MOV TH0,#0F0H  ;4mS定時重設
 MOV TL0,#60H
        LCALL RDKEY  ;調用讀鍵狀態及去抖處理 
 LCALL DISP  ;調用數碼管動態顯示
        LCALL ADC               ;調用AD轉換子程序
        LCALL ZH
 LCALL WORK1
 SJMP MLOOP
;******************************
;** 通道轉換程序段 *******
;**100單端通道0  101通道2 *****
;**110通道1      111通道3 *****
;**000差分 通道0+ 1-      *****
;******************************
WORK1:  JNB EK0,W11     
        MOV TDC,#11000000B      ;通道0
        MOV R2,#00H
    W11:JNB EK1,W12      
        MOV TDC,#11100000B      ;通道1
        MOV R2,#01H
    W12:JNB EK2,W13             
        MOV TDC,#11010000B  ;通道2
        MOV R2,#02H
    W13:JNB EK3,W14                    
 MOV TDC,#11110000B     ;通道3
        MOV R2,#03H
    W14:JNB EK4,W15                    
 MOV TDC,#10000000B   ;通道0+ 1-
        MOV R2,#08H
    W15:JNB EK5,W16        
        MOV TDC,#10100000B  ;通道1+ 0-
        MOV R2,#09H               
    W16:LCALL CK 
 RET
;******************************
;** AD轉換子程序    ****
;******************************
ADC:    MOV A,TDC        ;工作方式設定
        CLR CS   ;選通
        MOV R7,#04H
ADC1:   CLR CLK
        RLC A
        MOV DI,C
        SETB CLK
        DJNZ R7,ADC1
        SETB DO          ;第五個脈衝
        CLR CLK
        SETB CLK
        MOV R7,#08H
ADC2:   CLR CLK
        SETB CLK
        MOV C,DO
        RLC A
        DJNZ R7,ADC2      
        MOV R7,#08H
ADC3:   CLR CLK
        SETB CLK
        DJNZ R7,ADC3
        CLR CLK
        SETB CS
        RET
;********************************
;**將讀到的DO數據轉換成電壓值****
;********************************
ZH:     MOV DSB4,A  ;將讀到的數據送DSB4
 MOV B,#51
        DIV AB
        MOV DSB3,A              ;取整數  即爲整數部分電壓
     MOV R7,#3               ;小數點後三位循環計算三次
 MOV R1,#33H  ;用R3間接尋址DSB3~0顯
ZH1:   MOV A,B
 CLR C
 SUBB A,#26 
 JC ZH2   ;C不等於1則於26跳轉直接計算 
 MOV B,#10
 MUL AB 
 MOV B,#51
 DIV AB
 ADD A,#5
 SJMP ZH3
ZH2: MOV A,B
 MOV B,#10
 MUL AB
 MOV B,#51
 DIV AB
ZH3:   MOV @R1,A
 DEC R1
 DJNZ R7,ZH1
 RET
;********************************
;** 串口顯示子程序      ****
;********************************
CK: MOV DPTR,#DTABT
 MOV A,R2
        MOVC A,@A+DPTR
        MOV SBUF,A
        JNB TI,$                 ;判斷中斷標誌位是否置1
        CLR TI                    ;將中斷標誌位清零       
JS2:    RET
DTABT:  DB 00000011B,10011111B,00100101B,00001101B,10011001B
 DB 01001001B,01000001B,00011111B,00000001B,00001001B
        ;航碩工作室  http://hangshuo.blog.51cto.com/ 

 $INCLUDE(RDKEY.INC);添加讀鍵狀態及去抖處理子程序
        $INCLUDE(DISP.INC) ;添加數碼管動態掃描顯示子程序
        END
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章