;**********************************************************************
;                                                                     *
;    Filename:	    16F628ATEMP.asm                                   *
;    Date:          08/2014                                           *
;    File Version:  1.0                                               *
;                                                                     *
;    Author:        Kovalev A.Y.                                      *
;    Company:       AYK                                               *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F628A.INC                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes:         RGB-garland                                       *
;                                                                     *
;**********************************************************************

	list      p=16f628A           ; list directive to define processor
	#include <p16F628A.inc>       ; processor specific variable definitions

	errorlevel  -302              ; suppress message 302 from list file

	;1__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

	__CONFIG   _CP_OFF  & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_ON & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 
	
; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.

#define	LED1 PORTB,0
#define	LED2 PORTB,1
#define	LED3 PORTB,2

;***** VARIABLE DEFINITIONS
w_temp        EQU     0x7E        ; variable used for context saving 
status_temp   EQU     0x7F        ; variable used for context saving

P1            equ 0x20
P2            equ 0x21
P3            equ 0x22
CONFIGLED     equ 0x23

;**********************************************************************
	ORG     0x000             ; processor reset vector
	goto    main              ; go to beginning of program
	
	ORG     0x004             ; interrupt vector location
	movwf   w_temp            ; save off current W register contents
	movf	STATUS,w          ; move status register into W register
	movwf	status_temp       ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

	movf    status_temp,w     ; retrieve copy of STATUS register
	movwf	STATUS            ; restore pre-isr STATUS register contents
	swapf   w_temp,f
	swapf   w_temp,w          ; restore pre-isr W register contents
	retfie                    ; return from interrupt

;**********************************************************************
main               call   Clear_SRAM
                   call   Ports_Initializing
                   goto   Run  
;**********************************************************************
;**************************** Clear SRAM ******************************
;**********************************************************************
Clear_SRAM         bcf    STATUS,RP0
                   bcf    STATUS,RP1
                   clrf   P1     
                   clrf   P2     
                   clrf   P3 
                   clrf   CONFIGLED         
                   return    
;**********************************************************************
;************************* Ports Initializing *************************
;**********************************************************************
Ports_Initializing clrf   PORTA
                   clrf   PORTB
                   movlw  0x07
                   movwf  CMCON
                   bsf    STATUS,RP0
                   movlw  0x0F
                   movwf  OPTION_REG
                   clrwdt
                   movlw  0x0F
                   movwf  TRISA  
                   movlw  0x00
                   movwf  TRISB
                   bcf    STATUS,RP0
                   return 
;**********************************************************************
;******************************** Run *********************************
;********************************************************************** 
		   
		   
Run                call  Pause                                     ;100

;********************************************************************** 
                   call  Paus                                     ;221
Run_22             call  Pause_2
                   bsf   LED1
                   bsf   LED2
                   bsf   LED3
                   nop
                   nop
                   nop 
                   bsf   LED1
                   bsf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_22
;********************************************************************** 

;********************************************************************** 
                   call  Pause                                     ;200
Run_04             call  Pause_1
                   bsf   LED1
                   bcf   LED2
                   bcf   LED3
                   nop
                   nop
                   nop 
                   bsf   LED1
                   bcf   LED2
                   bcf   LED3
                   btfss CONFIGLED,0
                   goto  Run_04
;********************************************************************** 
                   call  Pause                                     ;020
Run_05             call  Pause_1
                   bcf   LED1
                   bsf   LED2
                   bcf   LED3
                   nop
                   nop
                   nop 
                   bcf   LED1
                   bsf   LED2
                   bcf   LED3
                   btfss CONFIGLED,0
                   goto  Run_05
;********************************************************************** 
                   call  Pause                                     ;002
Run_06             call  Pause_1
                   bcf   LED1
                   bcf   LED2
                   bsf   LED3
                   nop
                   nop
                   nop 
                   bcf   LED1
                   bcf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_06
;********************************************************************** 

;********************************************************************** 
                   call  Pause                                     ;220
Run_10             call  Pause_1
                   bsf   LED1
                   bsf   LED2
                   bcf   LED3
                   nop
                   nop
                   nop 
                   bsf   LED1
                   bsf   LED2
                   bcf   LED3
                   btfss CONFIGLED,0
                   goto  Run_10
;********************************************************************** 
                   call  Pause                                     ;202
Run_11             call  Pause_1
                   bsf   LED1
                   bcf   LED2
                   bsf   LED3
                   nop
                   nop
                   nop 
                   bsf   LED1
                   bcf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_11
;********************************************************************** 
                   call  Pause                                     ;022
Run_12             call  Pause_1
                   bcf   LED1
                   bsf   LED2
                   bsf   LED3
                   nop
                   nop
                   nop 
                   bcf   LED1
                   bsf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_12
;********************************************************************** 
		   
		   
                   call  Pause                                     ;120
Run_13             call  Pause_1
                   bsf   LED1
                   bsf   LED2
                   bsf   LED3
		  
                   nop
                   nop
                   nop 
                   bsf   LED1
                   bsf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_13
;********************************************************************** 
		   
		   
                   call  Pause                                     ;102
Run_14             call  Pause_1
                   bcf   LED1
                   bcf   LED2
                   bsf   LED3
                   nop
                   nop
                   nop 
                   bcf   LED1
                   bcf   LED2
                   bsf   LED3
                   btfss CONFIGLED,0
                   goto  Run_14
;********************************************************************** 
		   
		   
                   call  Pause                                     ;012
Run_15             call  Pause_1
                   bcf   LED1
                   bsf   LED2
                   bcf   LED3
                   nop
                   nop
                   nop 
                   bcf   LED1
                   bsf   LED2
                   bcf   LED3
                   btfss CONFIGLED,0
                   goto  Run_15
		   goto  Run
;********************************************************************** 
	   
;**********************************************************************
;******************************* Pause ********************************
;**********************************************************************          
Pause              clrwdt
                   clrf   P1
                   clrf   P2
                   movlw  0x01
                   movwf  P3
                   bcf    CONFIGLED,0
                   return 
;**********************************************************************
Pause_1            clrwdt
                   decfsz P1,f
                   return
                   decfsz P2,f
                   return
                   decfsz P3,f
                   return
                   bsf    CONFIGLED,0
                   return     
;**********************************************************************

Paus              clrwdt
                   clrf   P1
                   clrf   P2
                   movlw  0x01
                   movwf  P3
                   bcf    CONFIGLED,0
                   return 
;**********************************************************************
Pause_2            clrwdt
                   decfsz P1,f
                   return
                   decfsz P2,f
                   return
                   decfsz P3,f
                   return
                   bsf    CONFIGLED,0
                   return     
;**********************************************************************
; initialize eeprom locations

	ORG	0x2100
	DE	0x00, 0x01, 0x02, 0x03


	END                       ; directive 'end of program'



