?? adconvert.asm
字號:
LIST P=PIC16F690
#INCLUDE P16F690.INC
temp1 equ 30h
temp2 equ 31h
R0 equ 50h
R1 equ 51h
R2 equ 52h
ACCBHI equ 53h
ACCBLO equ 54h
count equ 55h
TEMP equ 56h
;..........................
;讀寫24lc64的寄存器
;..........................
;DI EQU 7
;DO EQU 6
F0 EQU 0 ;W
C EQU 0
RTCC EQU 1
Z EQU 2
PC EQU 2
STATUS EQU 3
FSR EQU 4
RA EQU 5 ;PORTA
RB EQU 6 ;PORTB
RC EQU 7 ;PORTC
RE EQU 9
INDF EQU 0
RP0 EQU 5
SCL EQU 6 ;RB6
SDA EQU 4 ;RB4
DICS EQU 1
DI EQU 7
DO EQU 6
ERR_1 EQU 0
PCAB EQU 2
ECHO EQU 3
CREN EQU 4
SYNC EQU 4
BRGH EQU 2
SPEN EQU 7
TX89 EQU 6
TXIE EQU 4
TXEN EQU 5
TXIF EQU 4
TRMT EQU 1
RC89 EQU 6
RCIF EQU 5
RCIE EQU 5
RCD8 EQU 0
OERR EQU 1
FERR EQU 2
ICSTA EQU 2DH ;
;TMCOUN EQU 41H ;
SLAVE EQU 22H ;
TXBUF EQU 23H ;
DATA0 EQU 24H ;
BCOUNT EQU 25H ;
ERCODE EQU 26H ;
EEPROM EQU 27H ;
FLAG1 EQU 28H ;
RXBUF EQU 29H ;
DATAI EQU 2AH ;
ADDL EQU 2BH ; 存放24LC64寄存器地址
ADDH EQU 2CH ;
STATUS EQU 03H ;
TRISC EQU 87H ;
INTCON EQU 0BH ;
SSPCON EQU 14H ;
SSPSTAT EQU 94H ;
SSPADD EQU 93H ;
FLAG EQU 2DH ;
PIE1 EQU 8CH ;
PIR1 EQU 0CH ;
ORG 0
GOTO START
ORG 10h
;..............................................................................................................
; 子程序:A/D轉(zhuǎn)換延時
;..............................................................................................................
SIMPLE:clrf 20h
clrf 21h
MOVLW 02h
MOVWF 20H
LOOP1: MOVLW 03h
MOVWF 21H
LOOP2: DECFSZ 21H,1
GOTO LOOP2
DECFSZ 20H,1
GOTO LOOP1
RETURN
;..............................................................................................................
; 子程序: A/D轉(zhuǎn)換16進制結果乘5
;..............................................................................................................
x5: BCF STATUS,RP0 ;選擇BANK0
BCF STATUS,RP1
MOVLW 04H ;循環(huán)次數(shù)寄存器
MOVWF 3EH
MOVLW 03H ;高位字節(jié)只保留低2位
ANDWF 40H,1
ANDWF 41H,1
loop: MOVF 40H,0 ;把40H寄存器中內(nèi)容傳送給W
ADDWF 41H,1 ;41H內(nèi)容自加1次,存回41h (高位)
MOVF 42H,0 ;把42H寄存器中內(nèi)容傳送給W
ADDWF 43H,1 ;43H內(nèi)容自加1次,存回43h (低位)
BTFSC STATUS,0 ;測試有無進位?
INCF 41H,1 ;有進位則高位字節(jié)自加1
DECFSZ 3EH ;
GOTO loop ;
RETURN
;........................................................................................................................
; 子程序: 乘5之后轉(zhuǎn)10進制
; R0,R1,R2 = 06,55,35
;........................................................................................................................
B2_BCD
BCF STATUS,RP0 ;選擇BANK0
BCF STATUS,RP1
bcf STATUS,0 ; clear the carry bit
movlw 10h
movwf count
clrf R0
clrf R1
clrf R2
loop16 rlf ACCBLO,1
rlf ACCBHI,1 ;
rlf R2,1
rlf R1,1
rlf R0,1
decfsz count,1
goto adjDEC
RETLW 0
adjDEC movlw R2
movwf FSR
call adjBCD
movlw R1
movwf FSR
call adjBCD
movlw R0
movwf FSR
call adjBCD
goto loop16
adjBCD movlw 3
addwf 0,W
movwf TEMP
btfsc TEMP,3 ; test if result > 7
movwf 0
movlw 30
addwf 0,W
movwf TEMP
btfsc TEMP,7 ; test if result > 7
movwf 0 ; save as MSD
RETLW 0
RETURN
;.......................................................................................................................
; 轉(zhuǎn)換為10進制之后,將結果轉(zhuǎn)為ASCII碼,只取高三位!
;.......................................................................................................................
ASCII: BCF STATUS,RP0 ;選擇BANK0
BCF STATUS,RP1
SWAPF R1,0 ;R1 高位存入44H
ANDLW 0FH
MOVWF 44H
MOVLW 0FH ;R1 低位存入45H
ANDWF R1,0
MOVWF 45H
SWAPF R2,0 ;R2 高位存入46H
ANDLW 0FH
MOVWF 46H
MOVLW 30 ;轉(zhuǎn)ASCII碼
ADDWF 44H,1
ADDWF 45H,1
ADDWF 46H,1
RETURN
;-------------------------------------------------------------------
;IIC通信子程序
;-------------------------------------------------------------------
IICINIT MOVLW B'00111110' ;7位從,支持主控
MOVWF SSPCON ;地址14h
BSF STATUS,RP0 ;選BANK1
MOVLW B'00001000'
MOVWF PIE1 ;ENABLE SSP INTER,tm1,tm2,ccp1,scit,scir pr
MOVLW B'10100010' ;SLAVE ADD A2h
MOVWF SSPADD
BSF TRISB,SCL ;SET SCL H
BSF TRISB,SDA ;SET SDA H
BCF STATUS,RP0
BCF PIR1,3 ;CLEAR SSP INTER FLAG
MOVLW B'11100000' ;***OPEN TIME0中斷, 總中斷使能,開PIE1
MOVWF INTCON
RETURN-
;----------------------------------------------------------------------
;RBINIT BSF STATUS,RP0 ;選BANK1
; MOVLW 0XA0 ;RC7-RX WEI I,手動/自動
; MOVWF TRISB
; RETURN-
;-----------------------------------------------------------------------
;_____________________________________________________________________________________________________________________________
; 7路A/D轉(zhuǎn)換開始
;_____________________________________________________________________________________________________________________________
;CPAD0-----RA0--------AN0
START: BCF STATUS,RP0 ;Bank 0
BCF STATUS,RP1
clrf 30h
clrf 31h
clrf 32h
clrf 33h
clrf 34h
clrf 35h
clrf 36h
clrf 37h
clrf 38h
clrf 39h
clrf 3ah
clrf 3bh
clrf 3ch
clrf 3dh
;1
BSF STATUS,RP0 ;Bank 1
BCF STATUS,RP1 ;
MOVLW 70h ;A/D RC clock
MOVWF ADCON1 ;
BSF TRISA,0 ;Set RA0 to input
BCF STATUS,RP0 ;Bank 2
BSF STATUS,RP1 ;
BSF ANSEL,0 ;Set RA0 to analog
BCF STATUS,RP1 ;Bank 0
MOVLW b'11000001' ;Right, Vdd Vref, AN0
MOVWF ADCON0
CALL SIMPLE ;Wait min sample time
BSF ADCON0,GO ;Start conversion
BCF STATUS,RP1 ;
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1
;No, test again
MOVF ADRESH,W ;Read upper 2 bits
MOVWF 30H ;
BSF STATUS,RP0 ;Bank 1
MOVF ADRESL,W ;Read lower 8 bits
BCF STATUS,RP0 ;Bank 0
MOVWF 31H
;_________________________________________________________
;2
BSF STATUS,RP0 ;Bank 1
MOVLW 70h ;A/D RC clock
MOVWF ADCON1 ;
BSF TRISA,2 ;Set RA2 to input
BCF STATUS,RP0 ;Bank 2
BSF STATUS,RP1 ;
BSF ANSEL,2 ;Set RA2 to analog
BCF STATUS,RP1 ;Bank 0
MOVLW b'11001001'
BCF STATUS,RP1 ;Bank 0 ;Right, Vdd Vref, AN2
MOVWF ADCON0
CALL SIMPLE ;Wait min sample time
BSF ADCON0,GO ;Start conversion
BCF STATUS,RP1 ;
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
MOVF ADRESH,W ;Read upper 2 bits
MOVWF 32H ;
BSF STATUS,RP0 ;Bank 1
MOVF ADRESL,W ;Read lower 8 bits
BCF STATUS,RP0 ;Bank 0
MOVWF 33H
;__________________________________________________________
;3
BSF STATUS,RP0 ;Bank 1
BCF STATUS,RP1 ;
MOVLW 70h ;A/D RC clock
MOVWF ADCON1 ;
BSF TRISC,0 ;Set RC0 to input
BCF STATUS,RP0 ;Bank 2
BSF STATUS,RP1 ;
BSF ANSEL,4 ;Set RC0 to analog
BCF STATUS,RP1 ;Bank 0
MOVLW b'11010001' ;Right, Vdd Vref, AN4
MOVWF ADCON0
CALL SIMPLE ;Wait min sample time
BSF ADCON0,GO ;Start conversion
BCF STATUS,RP1 ;
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
MOVF ADRESH,W ;Read upper 2 bits
MOVWF 34H ;
BSF STATUS,RP0 ;Bank 1
MOVF ADRESL,W ;Read lower 8 bits
BCF STATUS,RP0 ;Bank 0
MOVWF 35H
;__________________________________________________________
;4
BSF STATUS,RP0 ;Bank 1
BCF STATUS,RP1 ;
MOVLW 70h ;A/D RC clock
MOVWF ADCON1 ;
BSF TRISC,1 ;Set RC1 to input
BCF STATUS,RP0 ;Bank 2
BSF STATUS,RP1 ;
BSF ANSEL,5 ;Set RC1 to analog
BCF STATUS,RP1 ;Bank 0
MOVLW b'11010101' ;Right, Vdd Vref, AN5
MOVWF ADCON0
CALL SIMPLE ;Wait min sample time
BSF ADCON0,GO ;Start conversion
BCF STATUS,RP1 ;
BTFSC ADCON0,GO ;Is conversion done?
GOTO $-1 ;No, test again
MOVF ADRESH,W ;Read upper 2 bits
MOVWF 36H ;
BSF STATUS,RP0 ;Bank 1
MOVF ADRESL,W ;Read lower 8 bits
BCF STATUS,RP0 ;Bank 0
MOVWF 37H
;__________________________________________________________
;5
BSF STATUS,RP0 ;Bank 1
BCF STATUS,RP1 ;
MOVLW 70h ;A/D RC clock
MOVWF ADCON1 ;
BSF TRISC,2 ;Set RC2 to input
BCF STATUS,RP0 ;Bank 2
BSF STATUS,RP1 ;
BSF ANSEL,6 ;Set RC2 to analog
BCF STATUS,RP1 ;Bank 0
MOVLW b'11011001' ;Right, Vdd Vref, AN6
MOVWF ADCON0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -