
; CC5X Version 3.8, Copyright (c) B Knudsen Data
; C compiler for the PICmicro family
; ************   8. Dec 2021  14:04  *************

        processor  OB36A01A1
        radix  DEC

TMR0        EQU   0x01
STATUS      EQU   0x03
PORTA       EQU   0x05
INTCON      EQU   0x0B
Zero_       EQU   2
RP0         EQU   5
RP1         EQU   6
T0IF        EQU   2
OPTION_REG  EQU   0x81
ANSELA      EQU   0x07
ANSELB      EQU   0x08
T0RD        EQU   0x09
PAM0        EQU   0x0F
PAM1        EQU   0x10
PBIM        EQU   0x11
TCON        EQU   0x87
TMR1        EQU   0x88
T1RD        EQU   0x89
PA_0        EQU   0
PA_4        EQU   4
PA_5        EQU   5
PA_6        EQU   6
PB_0        EQU   0
T1IF        EQU   4
svrWREG     EQU   0x20
svrSTATUS   EQU   0x21
svrWREG_2   EQU   0x22
svrSTATUS_2 EQU   0x23
svrWREG_3   EQU   0x22
svrSTATUS_3 EQU   0x23
TMP         EQU   0x7F
ErrorCode   EQU   0x7F

        GOTO main

  ; FILE .\Timer.c
                        ;#include "int16CXX.h"
                        ;
                        ;#pragma interruptSaveCheck  n
                        ;
                        ;
                        ;////////////////////////////////////////////////////////////////////////////////
                        ;// Interrupt ISR
                        ;////////////////////////////////////////////////////////////////////////////////
                        ;void Sub_ALLINT(void);
                        ;void Sub_TMR0(void);
                        ;void Sub_TMR1(void);
                        ;
                        ;void Check_SFR();
                        ;
                        ;#pragma unlockISR   // If the ISR address!=0x04, you will do this.
                        ;#pragma origin 4    // Define the following code at flash address 0x04
        ORG 0x0004
                        ;interrupt INTR_ISR( void)
                        ;{
INTR_ISR
                        ;    Sub_ALLINT();    
        CALL  Sub_ALLINT
                        ;}
        RETFIE
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Sub_ALLINT()
                        ;{
Sub_ALLINT
                        ;    int_save_registers    // W, STATUS (and PCLATH)
        MOVWF svrWREG
        SWAPF STATUS,W
        BCF   0x03,RP0
        BCF   0x03,RP1
        MOVWF svrSTATUS
                        ;	
                        ;	if(T0IF==1)
        BTFSS 0x0B,T0IF
        GOTO  m001
                        ;		Sub_TMR0();
        CALL  Sub_TMR0
                        ;	else if(T1IF==1)
        GOTO  m002
m001    BCF   0x03,RP0
        BTFSC 0x0C,T1IF
                        ;		Sub_TMR1();
        CALL  Sub_TMR1
                        ;    
                        ;   
                        ;    int_restore_registers // W, STATUS (and PCLATH)
m002    BCF   0x03,RP0
        SWAPF svrSTATUS,W
        MOVWF STATUS
        SWAPF svrWREG,1
        SWAPF svrWREG,W
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Sub_TMR0()
                        ;{
Sub_TMR0
                        ;    int_save_registers    // W, STATUS (and PCLATH)
        MOVWF svrWREG_2
        SWAPF STATUS,W
        BCF   0x03,RP0
        BCF   0x03,RP1
        MOVWF svrSTATUS_2
                        ;    
                        ;	PA_3=!PA_3;
        MOVLW 8
        XORWF PORTA,1
                        ;	
                        ;	T0IF=0;
        BCF   0x0B,T0IF
                        ;	
                        ;	PB_0=T0IF;
        BTFSS 0x0B,T0IF
        BCF   0x06,PB_0
        BTFSC 0x0B,T0IF
        BSF   0x06,PB_0
                        ;			
                        ;    int_restore_registers // W, STATUS (and PCLATH)
        SWAPF svrSTATUS_2,W
        MOVWF STATUS
        SWAPF svrWREG_2,1
        SWAPF svrWREG_2,W
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Sub_TMR1()
                        ;{
Sub_TMR1
                        ;    int_save_registers    // W, STATUS (and PCLATH)
        MOVWF svrWREG_3
        SWAPF STATUS,W
        BCF   0x03,RP0
        BCF   0x03,RP1
        MOVWF svrSTATUS_3
                        ;   
                        ;	PA_4=!PA_4;
        MOVLW 16
        XORWF PORTA,1
                        ;		
                        ;	T1IF=0;
        BCF   0x0C,T1IF
                        ;	
                        ;	PB_0=T0IF;
        BTFSS 0x0B,T0IF
        BCF   0x06,PB_0
        BTFSC 0x0B,T0IF
        BSF   0x06,PB_0
                        ;   
                        ;    int_restore_registers // W, STATUS (and PCLATH)
        SWAPF svrSTATUS_3,W
        MOVWF STATUS
        SWAPF svrWREG_3,1
        SWAPF svrWREG_3,W
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Check_SFR()
                        ;{
Check_SFR
                        ;	uns8 TMP,ErrorCode;
                        ;	
                        ;	
                        ;	PB_0=1;		
        BCF   0x03,RP0
        BSF   0x06,PB_0
                        ;	
                        ;	T0RD=0x55;	
        MOVLW 85
        MOVWF T0RD
                        ;	TMP=T0RD;
        MOVF  T0RD,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x55)
        MOVF  TMP,W
        XORLW 85
        BTFSC 0x03,Zero_
        GOTO  m003
                        ;	{
                        ;		ErrorCode=1;
        MOVLW 1
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	T0RD=0xAA;	
m003    MOVLW 170
        BCF   0x03,RP0
        MOVWF T0RD
                        ;	TMP=T0RD;
        MOVF  T0RD,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0xAA)
        MOVF  TMP,W
        XORLW 170
        BTFSC 0x03,Zero_
        GOTO  m004
                        ;	{
                        ;		ErrorCode=2;
        MOVLW 2
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	//------------------------------------------
                        ;	TMR0=0x55;	
m004    MOVLW 85
        BCF   0x03,RP0
        MOVWF TMR0
                        ;	TMP=TMR0;
        MOVF  TMR0,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x55)
        MOVF  TMP,W
        XORLW 85
        BTFSC 0x03,Zero_
        GOTO  m005
                        ;	{
                        ;		ErrorCode=3;
        MOVLW 3
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	TMR0=0xAA;	
m005    MOVLW 170
        BCF   0x03,RP0
        MOVWF TMR0
                        ;	TMP=TMR0;
        MOVF  TMR0,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0xAA)
        MOVF  TMP,W
        XORLW 170
        BTFSC 0x03,Zero_
        GOTO  m006
                        ;	{
                        ;		ErrorCode=4;
        MOVLW 4
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	//------------------------------------------
                        ;	OPTION=0x55;	
m006    MOVLW 85
        BSF   0x03,RP0
        MOVWF OPTION_REG
                        ;	TMP=OPTION;
        MOVF  OPTION_REG,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x55)
        MOVF  TMP,W
        XORLW 85
        BTFSC 0x03,Zero_
        GOTO  m007
                        ;	{
                        ;		ErrorCode=5;
        MOVLW 5
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	OPTION=0x2A;	
m007    MOVLW 42
        BSF   0x03,RP0
        MOVWF OPTION_REG
                        ;	TMP=OPTION;
        MOVF  OPTION_REG,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x2A)
        MOVF  TMP,W
        XORLW 42
        BTFSC 0x03,Zero_
        GOTO  m008
                        ;	{
                        ;		ErrorCode=6;
        MOVLW 6
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	OPTION=0x00;
m008    BSF   0x03,RP0
        CLRF  OPTION_REG
                        ;	
                        ;	//------------------------------------------
                        ;	T1RD=0x55;	
        MOVLW 85
        MOVWF T1RD
                        ;	TMP=T1RD;
        MOVF  T1RD,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x55)
        MOVF  TMP,W
        XORLW 85
        BTFSC 0x03,Zero_
        GOTO  m009
                        ;	{
                        ;		ErrorCode=7;
        MOVLW 7
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	T1RD=0xAA;	
m009    MOVLW 170
        BSF   0x03,RP0
        MOVWF T1RD
                        ;	TMP=T1RD;
        MOVF  T1RD,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0xAA)
        MOVF  TMP,W
        XORLW 170
        BTFSC 0x03,Zero_
        GOTO  m010
                        ;	{
                        ;		ErrorCode=8;
        MOVLW 8
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	//------------------------------------------
                        ;	TMR1=0x55;	
m010    MOVLW 85
        BSF   0x03,RP0
        MOVWF TMR1
                        ;	TMP=TMR1;
        MOVF  TMR1,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x55)
        MOVF  TMP,W
        XORLW 85
        BTFSC 0x03,Zero_
        GOTO  m011
                        ;	{
                        ;		ErrorCode=9;
        MOVLW 9
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	TMR1=0xAA;	
m011    MOVLW 170
        BSF   0x03,RP0
        MOVWF TMR1
                        ;	TMP=TMR1;
        MOVF  TMR1,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0xAA)
        MOVF  TMP,W
        XORLW 170
        BTFSC 0x03,Zero_
        GOTO  m012
                        ;	{
                        ;		ErrorCode=10;
        MOVLW 10
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	//------------------------------------------
                        ;	TCON=0x15;	
m012    MOVLW 21
        BSF   0x03,RP0
        MOVWF TCON
                        ;	TMP=TCON;
        MOVF  TCON,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=0x15)
        MOVF  TMP,W
        XORLW 21
        BTFSC 0x03,Zero_
        GOTO  m013
                        ;	{
                        ;		ErrorCode=11;
        MOVLW 11
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m015
                        ;	}
                        ;	
                        ;	TCON=0xAA;	
m013    MOVLW 170
        BSF   0x03,RP0
        MOVWF TCON
                        ;	TMP=TCON&0xBF;
        MOVLW 191
        ANDWF TCON,W
        BCF   0x03,RP0
        MOVWF TMP
                        ;	
                        ;	if(TMP!=TCON)
        MOVF  TMP,W
        BSF   0x03,RP0
        XORWF TCON,W
        BTFSC 0x03,Zero_
        GOTO  m014
                        ;	{
                        ;		ErrorCode=12;
        MOVLW 12
        BCF   0x03,RP0
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m015
                        ;	}
                        ;	
                        ;	//------------------------------------------
                        ;	PORTA=0x99;
m014    MOVLW 153
        BCF   0x03,RP0
        MOVWF PORTA
                        ;	return;
        RETURN
                        ;	
                        ;Error:
                        ;	PB_0=0;	
m015    BCF   0x03,RP0
        BCF   0x06,PB_0
                        ;	PORTA=ErrorCode;
        MOVF  ErrorCode,W
        MOVWF PORTA
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Set_Timer_0()
                        ;{
Set_Timer_0
                        ;	//timer 0
                        ;	T0RD=0x0;		//reload counter
        BCF   0x03,RP0
        CLRF  T0RD
                        ;	TMR0=T0RD;		//Timer counter
        MOVF  T0RD,W
        MOVWF TMR0
                        ;	OPTION=0x83;	//TR0=1 - enable timer 0
        MOVLW 131
        BSF   0x03,RP0
        MOVWF OPTION_REG
                        ;	OPTION=0xA0;	//TR0=1 , T0CS - clock in from T0 (PA_0) + rising 
        MOVLW 160
        MOVWF OPTION_REG
                        ;	INTCON=0xA0;	//T0IE=1, GIE=1
        MOVLW 160
        MOVWF INTCON
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Set_Timer_1()
                        ;{
Set_Timer_1
                        ;	//timer 1
                        ;	 TMR1=0x00;	//timer counter
        BSF   0x03,RP0
        CLRF  TMR1
                        ;	 T1RD=TMR1;	//reload counter
        MOVF  TMR1,W
        MOVWF T1RD
                        ;	 TCON=0x82;	//TR1=1
        MOVLW 130
        MOVWF TCON
                        ;	 //TCON=0xa0;	//TR1=1, T1CS - clock in from T1(PA_3) + rising 
                        ;	 INTCON=0x90;	//T1IE=1, GIE=1
        MOVLW 144
        MOVWF INTCON
                        ;	
                        ;	
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Check_Timer_Flag()
                        ;{
Check_Timer_Flag
                        ;	//Test timer 0 polling flag state
                        ;	PA_4=1;
        BCF   0x03,RP0
        BSF   0x05,PA_4
                        ;	if(T0IF==1)
        BTFSS 0x0B,T0IF
        GOTO  m016
                        ;	{
                        ;		PA_3=!PA_3;
        MOVLW 8
        XORWF PORTA,1
                        ;		T0IF=0;
        BCF   0x0B,T0IF
                        ;		PA_4=T0IF;
        BTFSS 0x0B,T0IF
        BCF   0x05,PA_4
        BTFSC 0x0B,T0IF
        BSF   0x05,PA_4
                        ;	}
                        ;
                        ;	//------------------------------------------
                        ;	//Test timer 1 polling flag state
                        ;	PA_5=1;		
m016    BCF   0x03,RP0
        BSF   0x05,PA_5
                        ;	if(T1IF==1)
        BTFSS 0x0C,T1IF
        GOTO  m017
                        ;	{
                        ;		PA_4=!PA_4;
        MOVLW 16
        XORWF PORTA,1
                        ;		T1IF=0;
        BCF   0x0C,T1IF
                        ;		PA_5=T1IF;
        BTFSS 0x0C,T1IF
        BCF   0x05,PA_5
        BTFSC 0x0C,T1IF
        BSF   0x05,PA_5
                        ;	}
                        ;}
m017    RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Reset_Timer()
                        ;{
Reset_Timer
                        ;	//Test timer 0 reset
                        ;	if(PA_6==0)
        BCF   0x03,RP0
        BTFSC 0x05,PA_6
        GOTO  m018
                        ;	{
                        ;		TMR0=0;
        CLRF  TMR0
                        ;		PA_6=1;
        BSF   0x05,PA_6
                        ;	}
                        ;
                        ;	//------------------------------------------
                        ;	//Test timer 1 reset
                        ;	if(PA_0==0)
m018    BCF   0x03,RP0
        BTFSC 0x05,PA_0
        GOTO  m019
                        ;	{
                        ;		TMR1=0;
        BSF   0x03,RP0
        CLRF  TMR1
                        ;		PA_0=1;
        BCF   0x03,RP0
        BSF   0x05,PA_0
                        ;	}		
                        ;}
m019    RETURN
                        ;
                        ;/*******************************************************************************/
                        ;// Main
                        ;/*******************************************************************************/
                        ;void main() 
                        ;{   
main
                        ; 
                        ;    //Initiate GPIO
                        ;	ANSELA=0x00;
        BCF   0x03,RP0
        CLRF  ANSELA
                        ;	ANSELB=0x00;
        CLRF  ANSELB
                        ;	PAM0=0xff;
        MOVLW 255
        MOVWF PAM0
                        ;	PAM1=0xff;
        MOVLW 255
        MOVWF PAM1
                        ;	PBIM=0x03;
        MOVLW 3
        MOVWF PBIM
                        ;	
                        ;	PORTA=0xff;
        MOVLW 255
        MOVWF PORTA
                        ;	PB_0=1;
        BSF   0x06,PB_0
                        ;	
                        ;	
                        ;	//------------------------------------------	
                        ;	//Check_SFR();
                        ;
                        ;	//------------------------------------------	
                        ;	Set_Timer_0();
        CALL  Set_Timer_0
                        ;	
                        ;	//------------------------------------------
                        ;	Set_Timer_1();
        CALL  Set_Timer_1
                        ;	
                        ;	while(1)
                        ;	{
                        ;		Check_Timer_Flag();
m020    CALL  Check_Timer_Flag
                        ;		
                        ;		Reset_Timer();
        CALL  Reset_Timer
                        ;		
                        ;		
                        ;		PA_7=PA_7^1;
        MOVLW 128
        BCF   0x03,RP0
        XORWF PORTA,1
                        ;	}
        GOTO  m020

        END


; *** KEY INFO ***

; 0x0006   18 word(s)  1 % : Sub_ALLINT
; 0x0018   17 word(s)  1 % : Sub_TMR0
; 0x0029   17 word(s)  1 % : Sub_TMR1
; 0x003A  166 word(s) 16 % : Check_SFR
; 0x0004    2 word(s)  0 % : INTR_ISR
; 0x00E0   12 word(s)  1 % : Set_Timer_0
; 0x00EC    9 word(s)  0 % : Set_Timer_1
; 0x00F5   23 word(s)  2 % : Check_Timer_Flag
; 0x010C   13 word(s)  1 % : Reset_Timer
; 0x0119   20 word(s)  1 % : main

; RAM usage: 4 bytes (4 local), 60 bytes free
; Maximum call level: 1 (+3 for interrupt)
; Total of 298 code words (29 %)
