Code:
LIST p=16F877 ; list directive to define processor
#include <p16F877.inc>; processor specific variable defs
__CONFIG H'3F39' ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
ERRORLEVEL -302 ; unterdrücke Warnungen zur Bank-Auswahl
ERRORLEVEL -203
;**************************************************************
;*
;* Pinbelegung
;* ----------------------------------
;* PORTA:
;* 1
;* 2
;* 3
;* 4
;* PORTB:
;* 1
;* 2
;* 3
;* 4
;* 5
;* 6
;* 7
;* PORTC:
;* 1
;* 2 PWM-Ausgang
;* 3
;* 4
;* 5
;* 6
;* 7
;*
;**************************************************************
;**********************************************************
Counter1 EQU H'20'
Counter2 EQU H'21'
Counter3 EQU H'22'
Zahl EQU H'23'
Zahl_2 EQU H'24'
ADW_1 EQU H'25'
; Anfangsinitialisierung
Initialisierung
bsf STATUS,RP0
clrf TRISB
clrf TRISD
bcf STATUS,RP0
clrf PORTC
clrf PORTB
; bsf PORTB,5
; bcf PORTB,4
init
clrf PORTB
bsf PORTB,4
; Vorteiler 16:1 und Timer2 einschalten
BsF T2CON,T2CKPS1 ; Vorteiler 16:1
bcf T2CON,T2CKPS0
BSF T2CON,TMR2ON ; Timer2 ein
; Frequenz auf 10 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW D'90'
MOVWF PR2 ; 2,5 kHz
BCF STATUS,RP0 ; Bank1
; Tastverhältnis auf 50% einstellen
MOVLW D'47' ;62
MOVWF CCPR1L ; 50% von 124
; RC2/CCP1 auf Ausgang stellen
BSF STATUS,RP0 ; Bank1
BCF TRISC, 2 ; RC2: output=0
BCF STATUS,RP0 ; Bank 0
; PWM MODE mit CCP1 initialisieren
CLRF CCP1CON ; CCP1-Modus aus
BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
BSF CCP1CON,CCP1M2
loop
; ADC-Vorbereitungen:
; ADC speed für (fosc/32) MHz einstellen
bsf ADCON0, 7 ; ADCS1=1
bcf ADCON0, 6 ; ADCS0=0
; ADC einschalten
bsf ADCON0, 0 ; ADON=1
clrf ADW_1
bcf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
;call Verzögerung_1s
bsf ADCON0, 2
warte_auf_ADW:
btfsc ADCON0, 2
goto warte_auf_ADW
movf ADRESH,W
movwf ADW_1
movlw D'100'
subwf ADW_1,W
btfsc STATUS,C
goto Signal
goto loop
Signal
clrf PORTB
bsf PORTB,5
; Vorteiler 16:1 und Timer2 einschalten
BsF T2CON,T2CKPS1 ; Vorteiler 16:1
bcf T2CON,T2CKPS0
BSF T2CON,TMR2ON ; Timer2 ein
; Frequenz auf 10 kHz einstellen
BSF STATUS,RP0 ; Bank1
MOVLW D'90'
MOVWF PR2 ; 2,5 kHz
BCF STATUS,RP0 ; Bank1
; Tastverhältnis auf 50% einstellen
MOVLW D'62' ;62
MOVWF CCPR1L ; 50% von 124
; RC2/CCP1 auf Ausgang stellen
BSF STATUS,RP0 ; Bank1
BCF TRISC, 2 ; RC2: output=0
BCF STATUS,RP0 ; Bank 0
; PWM MODE mit CCP1 initialisieren
CLRF CCP1CON ; CCP1-Modus aus
BSF CCP1CON,CCP1M3 ; CCP1-Modus PWM-Mode
BSF CCP1CON,CCP1M2
loop2
; ADC-Vorbereitungen:
; ADC speed für (fosc/32) MHz einstellen
bsf ADCON0, 7 ; ADCS1=1
bcf ADCON0, 6 ; ADCS0=0
; ADC einschalten
bsf ADCON0, 0 ; ADON=1
clrf ADW_1
bcf ADCON0, 5
bcf ADCON0, 4
bcf ADCON0, 3
;call Verzögerung_1s
bsf ADCON0, 2
warte_auf_ADW2:
btfsc ADCON0, 2
goto warte_auf_ADW
movf ADRESH,W
movwf ADW_1
movlw D'100'
subwf ADW_1,W
btfsc STATUS,C
goto init
goto loop2
#include "Verz\Verz_a.inc"
end
Lesezeichen