hiho..
hab vor 2 tagen angefangen mich mit pic's zu beschäftigen und wollte das selbe zum adc-test realisieren...
verwendet hab ich einen 16f873 auf einem geäztem testboard...
* porta = adc
* portb = in
* portc = out (8xled)
in chansel (0x22) lege ich den abzufragenden ad kanal fest und speichere das ergebniss (8bit) in adcvalue..Code:; Variablen declaration wait EQU 0x20 ; 'wait' variable für den ADC adcvalue EQU 0x21 ; Ergebniss des ADC chansel EQU 0x22 ; ADC Channel für Unterprogramm getana (0-3 auf TestBoard verfügbar) ; Standard Init des TestBoard PIC16F873 Init bsf STATUS, RP0 ; auf Bank 1 umschalten movlw B'11111111' ; PortB alle input movwf TRISB movlw B'00000000' ; PortC alle output movwf TRISC BCF ADCON1, 7 bcf STATUS, RP0 ; auf Bank 0 zurückschalten bsf ADCON0,0 ; PORTA als analog-in festlegen bcf ADCON0,3 ; AN0 einstellen bcf ADCON0,4 ; " bcf ADCON0,5 ; " BSF ADCON0, 7 ; ADC Speed BCF ADCON0, 6 ; " clrf PORTC ; alle LEDs ausschalten ; Init ende ;************************************************************** ; Beginn Hauptprogrammschleife main btfsc PORTB, 0 call anaout goto main ; Ende Hauptprogrammschleife ;************************************************************** ; Beginn Unterprogramme anaout clrf chansel nop btfsc PORTB, 0 bsf chansel, 0 btfsc PORTB, 1 bsf chansel, 1 nop call getana movfw adcvalue movwf PORTC return ; Ende Unterprogramme ;************************************************************** ;*************************************** ;* Standard Funktionen für TestBorad * ;*************************************** goto main ; versehentlichen Aufruf verhindern ; Analog Input getana ; ADC Vorgang starten btfsc chansel, 0 ; ADC Channel Auswahl - bit3 bsf ADCON0, 3 btfss chansel, 0 bcf ADCON0, 3 btfsc chansel, 1 ; bit4 bsf ADCON0, 4 btfss chansel, 1 bcf ADCON0, 4 btfsc chansel, 2 ; bit5 bsf ADCON0, 5 btfss chansel, 3 bcf ADCON0, 5 nop ; 1Takt Pause bsf ADCON0, 2 ; ADC starten adcloop btfsc ADCON0, 2 ; ist der ADC fertig? goto adcloop ; nein, weiter warten movfw ADRESH ; obere 8 Bit des alanogwertes ins arbeitsverzeichnis movwf adcvalue ; Ergebniss zwischenspeichern clrf wait ; Warten, damit der ADC sich erholen kann adcwarten decfsz wait, f goto adcwarten return end
erstmal sry für meinen ghetto-code bin leider selbst anfänger, aber ich hoffe er hat dir geholfen







Zitieren

Lesezeichen