Re: ADC轉換2
|
||||
---|---|---|---|---|
高級會員
|
list p=12f675
;================================= ;我只看你的程式結構 , 細節自行處理
發表於: 2009/6/21 12:23
Edited by genitec on 2009年06月21日 12:39:16
|
|||
|
Re: ADC轉換2
|
||||
---|---|---|---|---|
新會員
|
好心的大大
這我有改過在mainloop最後寫 goto mainloop,在call turn最後寫return,結果是會回到call ADT2temp,有另外指令可以逃過媽....^^!!!
發表於: 2009/6/20 16:58
|
|||
|
Re: ADC轉換2
|
||||
---|---|---|---|---|
資深會員
|
MainLoop
bcf STATUS,RP0 bsf T1CON,TMR1ON call ADconverter <------CALL . . . . return <--------Return ???? /GOTO MainLoop ;*************************************** ADconverter . . . call turn goto MainLoop <----GOTO ???? / RETURN ASM 程式架構 非常非常重要..
發表於: 2009/6/20 16:24
|
|||
少年不知愁滋味,老來方知路難行。
|
||||
|
ADC轉換2
|
||||
---|---|---|---|---|
新會員
|
小弟繼續經由討論(一)延伸出來做實驗,發現有時候這樣的寫法movlw ADRESH,和MOVF ADRESH , W有時候有值有時候沒有(怪….),這是新寫的,以AN3為可調VR的10K電阻,GP5仍為輸出,用GP2作為切換開關,..,也曾經改變過為MOVF ADRESH , W還是沒有用,用一個禮拜去了仍無結果,再猜是不是時間的不足造成,再次請教個位大大先進前輩們,幫幫小弟…..^^!!!嗚嗚.
list p=12f675 include <P12f675.INC> __CONFIG _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF ADStatus EQU 0x20 W_temp EQU 0x21 STATUS_Temp EQU 0x22 scaler EQU 0x27 Delay1 EQU 0x23 Delay2 EQU 0x24 Delay3 EQU 0x25 ADStatus1 EQU 0x26 Countms EQU 0x30 ADCloop EQU 0x31 ADloop_scaler EQU 0x32 change EQU 0x33 T1HCAP_1 EQU 0x34 T1LCAP_1 EQU 0x35 T1HCAP_2 EQU 0x36 T1LCAP_2 EQU 0x37 ;***********Resect Vector*************** org 0x00 nop goto MainLine ;************ interrupt ************** org 0x04 goto intService intService movwf W_temp swapf STATUS,w movwf STATUS_Temp btfsc PIR1,TMR1IF call Timer1 swapf STATUS_Temp,w movwf STATUS swapf W_temp,f swapf W_temp,w retfie ;********** Timer1 *************** Timer1 bcf PIR1,TMR1IF decf scaler,f clrf TMR1L movlw T1HCAP_2 movwf TMR1H movlw T1LCAP_2 movwf TMR1L return ;********** Main Program *************** MainLine call Initial MainLoop bcf STATUS,RP0 bsf T1CON,TMR1ON call ADconverter ;*************************************** turn movlw .2 movwf scaler turn_off bcf STATUS,RP0 bcf GPIO,GP5 btfss scaler,0 goto turn_off bsf GPIO,GP5 btfsc scaler,0 goto turn_on btfsc GPIO,GP2 goto turn call ADloop_time call ADloop_time return ;*********Initial Subroutine************ Initial bsf STATUS,RP0 clrf TRISIO ;Init GPIO movlw B'00010100' movwf TRISIO bcf STATUS,RP0 movlw 07h movwf CMCON ;movlw .20 ;movwf scaler bcf STATUS,RP0 bsf GPIO,GP2 clrf T1CON clrf TMR1H clrf TMR1L clrf INTCON bsf INTCON,PEIE bsf STATUS,RP0 clrf PIE1 bsf PIE1,TMR1IE bcf STATUS,RP0 clrf PIR1 clrf TMR1L movlw 0x5 movwf TMR1H movlw 0x9F movwf TMR1L bcf T1CON,TMR1ON bsf INTCON,GIE bsf STATUS,RP0 clrf ADRESL movlw B'00011000' movwf ANSEL bcf STATUS,RP0 clrf ADCON0 movlw B'00001101' movwf ADCON0 clrf ADRESH return ;************A/D converter************** ADconverter movlw .2 movwf ADCloop ADconverter1 bcf STATUS,RP0 bsf ADCON0,GO call ADloop_time ;A/D start call ADloop_time Wait1 btfsc ADCON0,GO goto Wait1 movf ADRESH,W movwf Countms movlw (.65536 - Countms)/.256 decfsz ADCloop,F movwf T1HCAP_1 btfss ADCloop,0 call ADT2temp call ADloop_time call ADloop_time call ADloop_time goto ADconverter1 ADT2temp movwf T1HCAP_2 xorwf T1HCAP_1,F btfsc STATUS,Z goto Wait2 goto ADconverter1 Wait2 movlw (.65536 - Countms)%.256 movwf T1LCAP_2 call turn goto MainLoop ;------------------------------------------------------------------------------ ; ADloop_time ;------------------------------------------------------------------------------ Delay1ms: movlw .198 movwf Delay1 Delay1ms_01: decfsz Delay1, F goto Delay1ms_01 return ADloop_time movlw .100 movwf ADloop_scaler ADloop_time1 call Delay1ms decfsz ADloop_scaler,F goto ADloop_time1 return end
發表於: 2009/6/20 16:15
|
|||
|