PIC單片機adc轉換并顯示
CL04 BTFSS 57H,2;判斷標志是否有進位
GOTO CL4;否
MOVLW 6H;
ADDWF 53H,1;自身加6H
CL4 BTFSS 57H,5;判斷標志是否有進位
GOTO CL05;
INCF 51H,1;是進位
MOVLW 60H;
ADDWF 52H,1;自身加60H
CL05 BTFSS 57H,1;判斷標志是否有進位
GOTO CL5;否
MOVLW 6H;
ADDWF 52H,1;自身加6H
CL5
CLRF 57H;清標志
DECFSZ 56H,1;
GOTO CL2;
RETURN;
;;;**************************************************************
;;; 十進制數調整
;;;**************************************************************
DA1 MOVWF 60H;將W里的數保存到60H里
MOVLW B00001111;
ANDWF 60H,0;將60H的數與00001111去除高4位
MOVWF 62H;將去除高位后的數保存到62H
MOVLW 0AH;
SUBWF 62H,0;去除高位的數減0AH
BTFSS STATUS,DC;判斷是否比0AH大
GOTO DA2 ;否則跳轉
ADDLW B10000;比0AH大則進位
MOVWF 62H;高4位加1
DA2 MOVLW B11110000;
ANDWF 60H,1;將60H的數與11110000去除低4位
MOVLW 0A0H;
SUBWF 60H,0;高4位的數減0A0H
BTFSS STATUS,C;判斷是否比0A0H大
GOTO DA3;否
ADDWF 62H,1;是則將差加上低位
BSF STATUS,C;是則置位
GOTO DA4;
DA3 MOVFW 60H;
ADDWF 62H,1;否則將高4位加上低4位
MOVFW 62H;
ANDLW B11110000;
SUBLW 0A0H ;加后判斷是否大于或等于0A0H
BCF STATUS,C;
BTFSS STATUS,Z;
GOTO DA4;否則退出
MOVLW B00001111;是
ANDWF 62H,1;則去掉高4位并進位
BSF STATUS,C;置進位標志
DA4 MOVFW 62H;
RETURN;
;**************************************************************
; 定時中斷數碼管顯示程序
;**************************************************************
ZD01 BTFSS INTCON,T0IF;判斷是否產生定時中斷
GOTO ZD03;否跳出是繼續執行
MOVWF W_TEMP;W備份到W_TEMP中
SWAPF STATUS,0;STATUS半字交換后送W
CLRF STATUS;選擇體0為當前體備份
MOVWF STATUS_TEMP;將原來的STATUS送體0上的
MOVF PCLATH,0;PCLATH送W
MOVWF PCLATH_TEMP;W送備份寄存器中
CLRF PCLATH ;設置為0頁
BCF INTCON,T0IF
BSF STATUS,RP0;體1
BCF STATUS,RP1;
MOVLW 0;
MOVWF TRISB;RB口設為輸出口
MOVWF TRISD;RD口設為輸出口
BCF STATUS,RP0;體0
BCF STATUS,RP1;
MOVLW 0FFH;
MOVWF PORTB;RB口輸出高電平
MOVLW 0
MOVWF PORTD;RD口輸出低電平起清屏作用
MOVFW INDF;間接尋址顯示數據
CALL Q1;查數據表
MOVWF PORTB;顯示斷碼輸出到RB口
INCF FSR,1;間接尋址地址加1
MOVFW 41H ;位碼
MOVWF PORTD;位碼輸出到RD口
RLF 41H,0;處理C
RLF 41H,1;左移位碼
DECFSZ 40H,1;判斷是否顯示完4位
GOTO ZD02;否則繼續顯示
MOVLW 5;顯示位數
MOVWF 40H;
MOVLW B00000001;位碼
MOVWF 41H;
MOVLW 5AH;
MOVWF FSR ;間接尋址
ZD02
MOVLW 0FFH;
MOVFW TMR0;重裝初值
; 恢復現場
CLRF STATUS;恢復到體0
MOVF PCLATH_TEMP,0;開始恢復數據
MOVWF PCLATH;恢復PCLATH
SWAPF STATUS_TEMP,0
MOVWF STATUS;恢復STATUS
SWAPF W_TEMP,1;半字交換后放回
SWAPF W_TEMP,0;再半字交換后送W
ZD03
RETFIE ;中斷返回
ADC1 BSF STATUS,RP0;體1
BCF STATUS,RP1
MOVLW 0FFH
MOVWF TRISA;設置A口為輸入口
MOVLW B10001110;設置ADC轉換格式為右對齊并選RA0位AD口
MOVWF ADCON1
BCF STATUS,RP0;選擇體0
BCF STATUS,RP1
MOVLW B11000001 ;選擇ADC時鐘頻率選擇RA0位AD通道使能ADC
MOVWF ADCON0
BSF ADCON0,GO;開始AD轉換
BTFSC ADCON0,GO;判斷是否轉換完成
GOTO $-1
BSF ADCON0,GO;清完成標志
MOVFW ADRESH;將轉換完成高位數存到50H
MOVWF 50H
BSF STATUS,RP0;體1
BCF STATUS,RP1
MOVFW ADRESL;將轉換完成數存到51H
BCF STATUS,RP0;體0
BCF STATUS,RP1
MOVWF 51H
RETURN
M001 MOVLW 1
MOVWF 30H
M002 MOVLW D24
MOVWF 31H
M003 MOVLW D250
MOVWF 32H
DECFSZ 32H,1
GOTO $-1
評論