;LZ4GV 04-2004 ;PIC16F628 list p=16F628 #include __CONFIG _BODEN_ON & _CP_OFF & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT ;PORTA RA0 EQU 0 ;RA0 RA1 EQU 1 ;RA1 RA2 EQU 2 ;RA2 RA3 EQU 3 ;RA3 RA4 EQU 4 ;RA4 RA5 EQU 5 ;RA5 RA6 EQU 6 ;RA6 RA7 EQU 7 ;RA7 ;PORTB RB0 EQU 0 ;RB0 RB1 EQU 1 ;RB1 RB2 EQU 2 ;RB2 RB3 EQU 3 ;RB3 RB4 EQU 4 ;RB4 RB5 EQU 5 ;RB5 RB6 EQU 6 ;RB6 RB7 EQU 7 ;RB7 ; EQU 0x20 PCLMEM EQU 0x74 ; OPTIONMEM EQU 0x75 ; FSRMEM EQU 0x76 ; ACQT EQU 0x77 ; TMR0MEM EQU 0x78 ; TMR1LMEM EQU 0x79 ; TMR1HMEM EQU 0x7A ; INTCONMEM EQU 0x7B ;0x70 to 0x7F Bank 0,1,2,3 REEADR EQU 0x7C ;-//- REEDATA EQU 0x7D ;-//- W_TEMP EQU 0x7E ;-//- STATUS_TEMP EQU 0x7F ;-//- ORG 0x0000 GOTO START ORG 0x0004 GOTO START BEGIN ;********** Начало *********** MAIN MOVLW .4 ; MOVWF TMR0MEM ; COMF TMR0MEM,W ; MOVWF TMR0 ; BCF INTCON,T0IF ;Overflow TMR0 CLRF TMR1L ; MOVLW .250 ; MOVWF TMR1HMEM ; COMF TMR1HMEM,W ; MOVWF TMR1H ; BCF PIR1,TMR1IF ;Overflow TMR1 MOVLW .0 ;Pulse Width Modulation MOVWF CCPR1L ;Bit 9 - 2 BCF CCP1CON,CCP1X ;Bit 1 BCF CCP1CON,CCP1Y ;Bit 0 GOTO MAIN ;********** Край ************* ; WRITE ;In:F(REEADR,REEDATA) BSF STATUS,RP0 ;Page 1 MOVF REEADR,W MOVWF EEADR MOVF REEDATA,W MOVWF EEDATA BCF INTCON,GIE BSF EECON1,WREN movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 BSF EECON1,WR ;initiate write WRITE1 BTFSC EECON1,WR ;write complete? GOTO WRITE1 ;BSF INTCON,GIE BCF EECON1,WREN ;disable write BCF STATUS,RP0 ;Page 0 RETURN ; READE ;In:F(REEADR) Out:F(REEDATA),W BSF STATUS,RP0 ;Page 1 MOVF REEADR,W MOVWF EEADR BSF EECON1,RD ;do a read READE1 ; BTFSC EECON1,RD ;rd done? GOTO READE1 ;no then loop MOVF EEDATA,W MOVWF REEDATA BCF STATUS,RP0 ;Page 0 RETURN ; SET_PWM ;Reset Pulse Width Modulation BSF STATUS,RP0 ;Select Bank1. BCF TRISB,3 ;RB3 Output! MOVLW 0xFF ; MOVWF PR2 ;Period register. BCF STATUS,RP0 ;Bank0 CLRF CCPR1L ;Bit 9 - 2 BCF CCP1CON,CCP1X ;Bit 1 BCF CCP1CON,CCP1Y ;Bit 0 BCF T2CON,T2CKPS1 ;Timer prescaler 1 - 0 4 - 0 16 - 1 BCF T2CON,T2CKPS0 ;Timer prescaler 0 1 X BSF T2CON,TMR2ON ;Timer2 is ON. MOVLW B'00001100' ;PWM mode. MOVWF CCP1CON ; RETURN ; ; SET_TMR0 BSF STATUS,RP0 ;Select Bank1. MOVWF OPTION_REG ; BSF OPTION_REG,NOT_RBPU ;'1' - Pull-ups Disabled BSF OPTION_REG,INTEDG ;'1' -Rising RB0 Interrupt BCF OPTION_REG,T0CS ; BCF OPTION_REG,T0SE ; BCF OPTION_REG,PSA ; BCF STATUS,RP0 ;Bank0 RETURN ; SET_TMR1 ;Timer1 Module: Max period 8uS * 65536 = 524,288mS BSF T1CON,T1CKPS1 ;Timer prescaler /1 - 0 /2 - 0 /4 - 1 /8 - 1 BSF T1CON,T1CKPS0 ;Timer prescaler 0 1 0 1 BCF T1CON,T1OSCEN ;Oscillator is shut off. BCF T1CON,NOT_T1SYNC ;Asinchronous Operration BCF T1CON,TMR1CS ;Internal Clock Fosc/4 4MHz = 8uS BSF T1CON,TMR1ON ;Timer1 On bit. RETURN ; ;******************************** START MOVLW B'00000111' ;Comparator off. MOVWF CMCON CLRF PORTA CLRF PORTB CLRF INTCON ;Забрана за прекъване. BSF STATUS,RP0 ;Bank1 MOVLW B'00000000' ; MOVWF TRISA ;PortA MOVLW B'11111111' ; MOVWF TRISB ;PortB BSF PCON,OSCF ;4MHz IntRC. MOVLW B'11000000' ; MOVWF VRCON BCF STATUS,RP0 ;Bank0 MOVLW B'00000111' ;Fosc/4/256 4MHz = 0,256mS CALL SET_TMR0 CALL SET_TMR1 ;CALL SET_PWM ;Enable PWM & Reset GOTO BEGIN END