Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LIST P=16F628A, r=dec, w=-302
- include "P16F628A.INC" ; Include header file
- __CONFIG _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
- ;------------------------------------------------------------
- cblock 0x20 ; Beginn General Purpose-Register
- ;-------------------------- counters
- ;place this at very top of codw
- COUNT
- count1
- count2
- count3
- INTCOUNT
- ;--------------------------
- endc
- ;--------------------------
- cblock 0x70
- W_TEMP
- STATUS_TEMP
- PCLATH_TEMP
- endc
- #DEFINE pwmu PORTB,3
- ;--- Reset --------------------------------------------------
- org h'00'
- goto init ; reset -> init
- ;--- Interrupt ----------------------------------------------
- org h'04'
- ;--------------------------
- movwf W_TEMP
- swapf STATUS,W
- banksel 0
- movwf STATUS_TEMP
- movfw PCLATH
- movwf PCLATH_TEMP
- decfsz INTCOUNT,F
- goto $+5
- movlw 1
- xorwf PORTA,F
- movlw 5
- movwf INTCOUNT
- clrf TMR0
- bcf INTCON,T0IF
- ISREx movfw PCLATH_TEMP
- movwf PCLATH
- swapf STATUS_TEMP,W
- movwf STATUS
- swapf W_TEMP,F
- swapf W_TEMP,W
- retfie
- init
- CLRF PORTA ; Initialise PORT A by setting ouput data latches
- CLRF PORTB ; Initialise PORT B by setting ouput data latches
- movlw 5
- movwf INTCOUNT
- MOVLW H'07' ; Turn Comparators off and enable pins for I/O functions
- MOVWF CMCON ;
- BCF STATUS, RP1 ; Bank 1
- BSF STATUS, RP0 ; Bank 1
- MOVLW B'11111110' ; RA<7:6>, Inputs. RA<5:2> Outputs. RA<1:0> Inputs.
- MOVWF TRISA ;
- MOVLW B'00000000' ; RB<7:4> Inputs. RB<3:2> Ouputs. RB<0:1> Inputs.
- MOVWF TRISB ;
- movlw 0xD7 ;timer 0 1:256 prescale, tmr0 clock source = Tcy
- movwf OPTION_REG
- BCF STATUS, RP1 ; Bank 0
- BCF STATUS, RP0 ; Bank 0
- clrf TMR0
- bcf INTCON,T0IF
- bsf INTCON,T0IE
- bsf INTCON,GIE
- call pause ; wait 126ms
- call set_timer
- ;--------------------------
- Reset movlw 99 ;set increment counter
- movwf COUNT
- movlw 1 ;set CCPR1L to 1
- movwf CCPR1L
- call pause ;wait 126mS
- incf CCPR1L,F ;increment CCPR1L
- decfsz COUNT,F ;do 99 times
- goto $-3
- call pause ;wait 126mS
- decfsz CCPR1L,F ;decrement CCPR1L
- goto $-2 ;do 99 times
- goto Reset ;start over
- ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- set_timer
- clrf T2CON
- clrf TMR2
- bsf STATUS,RP0
- movlw 0xFF
- movwf PR2 ; compare with 255
- bcf STATUS,RP0
- movlw 0x02
- movwf CCPR1L
- movlw 0x03
- movwf T2CON ; prescaler 1:16 and postscaler 1:1
- movlw 0x3C
- movwf CCP1CON
- bsf T2CON,TMR2ON ;turn on timer, see pic16f628 datasheet
- return
- ;************************************************************************
- ; Delay *
- ;************************************************************************
- pause movlw 0x01 ;126 ms
- movwf count3
- d3 movlw 0x0F ;63 ms
- movwf count1
- d1 movlw 0xFA ; 1ms
- movwf count2
- d2 nop
- decfsz count2,F
- goto d2
- decfsz count1,F
- goto d1
- decfsz count3,F
- goto d3
- retlw 0x00
- ;============================================================
- usi bsf STATUS,RP0 ; Bank 1
- movlw 0xFF ; all input
- movwf TRISA
- movlw 0x00
- movwf TRISB ; all output
- bcf STATUS,RP0 ; Bank 0
- return
- ;============================================================
- end
- ;============================================================
Add Comment
Please, Sign In to add comment