Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- list p=16F877A ;Controller Type
- #include <p16F877A.inc> ;inc file from Microchip
- __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _LVP_OFF
- ; -- Variable Definition RAM --
- Tmp EQU 0x0020 ;RAM Counter
- Chk equ 0x0021
- x equ 0x0022
- y equ 0x0023
- op equ 0x0024
- t equ 0x0025
- ducy equ 0x0026
- ; ----------------------------------
- ; Code
- ; ----------------------------------
- ;Reset Vector
- ORG 0x000
- call Init
- Loop
- bcf STATUS,RP0 ;Switch back to Bank0
- bsf ADCON0,GO ;Start ADC
- IL
- btfsc ADCON0,GO ;warte auf ADC
- goto IL
- movfw ADRESH;
- movwf PORTB;
- movwf CCPR1H
- movwf CCPR2H
- ; bsf STATUS,RP0 ;Switch back to Bank1
- ; movwf PR2
- movwf CCPR1L ; set duty cycle
- movwf CCPR2L
- movlw D'16'
- movwf x
- movlw D'16'
- movwf y
- call Multiply
- nop
- goto Loop
- ; ----------------------------------
- ; Subroutines
- ; ----------------------------------
- ; -- testet die Bits Z, DC, C auf 0, wenn keins = 0 setze Chk
- ; --> Underflow Check
- Check
- bcf Chk,0
- movfw x
- movwf Tmp
- movfw y
- subwf Tmp,1
- btfsc STATUS,Z
- return
- btfsc STATUS,DC
- return
- btfsc STATUS,C
- return
- bsf Chk,0
- return
- ; --- Dividieren
- Divide
- movlw D'0'
- movwf op
- incf y
- decfsz y ; div / 0
- goto divLoop
- goto divEnd
- divLoop call Check
- btfsc Chk,0
- goto divEnd
- incf op
- movfw Tmp
- movwf x
- goto divLoop
- divEnd movfw op
- return
- ; --- Multiplizieren
- Multiply
- movlw D'0'
- movwf op
- ty incf y
- decfsz y ; multiplikation mit 0 -> x * 0
- goto tx
- goto mulEnd
- tx incf x
- decfsz x ; multiplikation mit 0 -> 0 * y
- goto mulLoop ; x und y != 0
- goto mulEnd ; x oder y = 0
- mulLoop movfw x
- addwf op,1
- decf y
- goto ty
- mulEnd movfw op
- return
- ;--- pwm
- ; software-seitig pwm-erzeugung
- Pwm
- movlw D'0'
- movwf op
- movfw ducy
- movwf x
- movlw D'255'
- movwf y
- call Divide
- movfw op
- movwf y
- movfw t
- movwf x
- call Multiply
- nop
- return
- Init
- bsf STATUS,RP0 ;Bank1
- movlw B'00000000' ;RB0 LED Output
- clrf PORTB ;LED = off
- bcf ADCON1,PCFG0 ;Port Configuration Control bits
- bcf ADCON1,PCFG1
- bcf ADCON1,PCFG2
- bcf ADCON1,PCFG3
- bcf ADCON1,ADFM ;Format selet left justified
- bcf STATUS,RP0 ;Switch back to Bank0
- clrf PORTB ;LED = off
- bcf ADCON0,CHS2 ; Select Channel 0 (AN0)
- bcf ADCON0,CHS1
- bcf ADCON0,CHS0
- bsf ADCON0,ADCS0 ; Set conversion Clock
- bsf ADCON0,ADCS1
- bsf ADCON0,ADON ; ADC ON
- ; Initialisation for the PWM
- ; pwm 1
- bsf STATUS,RP0
- movlw H'FF'
- movwf PR2
- bcf TRISC,1 ; pwm 1 - hardware
- bcf TRISC,2 ; pwm 2 - hardware
- bcf TRISC,3 ; pwm 3 - software
- bcf STATUS,RP0
- bsf T2CON,T2CKPS1
- bcf T2CON,T2CKPS0
- bsf T2CON,TMR2ON
- bsf CCP1CON,CCP1M3
- bsf CCP1CON,CCP1M2
- ; pwm 2
- bsf CCP2CON,CCP2M3
- bsf CCP2CON,CCP2M2
- return
- END
Add Comment
Please, Sign In to add comment