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

        processor  OB36A01A1
        radix  DEC

STATUS      EQU   0x03
PORTA       EQU   0x05
INTCON      EQU   0x0B
Carry       EQU   0
Zero_       EQU   2
RP0         EQU   5
RP1         EQU   6
ANSELA      EQU   0x07
ANSELB      EQU   0x08
INTFS       EQU   0x0C
WDTC        EQU   0x0E
PAM0        EQU   0x0F
PAM1        EQU   0x10
PBIM        EQU   0x11
IOCAE       EQU   0x8C
IOCAES      EQU   0x8D
SCON0       EQU   0x8E
SCON1       EQU   0x8F
SRELL       EQU   0x90
SRELH       EQU   0x91
SBUF        EQU   0x92
PA_7        EQU   7
PB_0        EQU   0
TXIF        EQU   1
svrWREG     EQU   0x20
svrSTATUS   EQU   0x21
Data        EQU   0x7F
TMP         EQU   0x7F
ErrorCode   EQU   0x7F
svrWREG_2   EQU   0x22
svrSTATUS_2 EQU   0x23
i           EQU   0x24

        GOTO main

  ; FILE .\IOC.c
                        ;#include "int16CXX.h"
                        ;
                        ;#pragma interruptSaveCheck  n
                        ;
                        ;
                        ;////////////////////////////////////////////////////////////////////////////////
                        ;// Interrupt ISR
                        ;////////////////////////////////////////////////////////////////////////////////
                        ;void Sub_IOC();
                        ;
                        ;void Send_Data(uns8 Data);
                        ;void Initiate_UART();
                        ;
                        ;void Sub_ALLINT(void);
                        ;void Check_SFR();
                        ;
                        ;uns8  g_Data;
                        ;
                        ;
                        ;#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((INTFS&0x0F)!=0)
        MOVLW 15
        ANDWF INTFS,W
        BTFSS 0x03,Zero_
                        ;		Sub_IOC();
        CALL  Sub_IOC
                        ;	
                        ;    int_restore_registers // W, STATUS (and PCLATH)
        BCF   0x03,RP0
        SWAPF svrSTATUS,W
        MOVWF STATUS
        SWAPF svrWREG,1
        SWAPF svrWREG,W
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Initiate_UART()
                        ;{	
Initiate_UART
                        ;	SCON0=0x90;
        MOVLW 144
        BSF   0x03,RP0
        MOVWF SCON0
                        ;	SCON1=0x00;
        CLRF  SCON1
                        ;
                        ;	//9600
                        ;	SRELH=0x03;
        MOVLW 3
        MOVWF SRELH
                        ;	SRELL=0xF3;				
        MOVLW 243
        MOVWF SRELL
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Send_Data(uns8 Data)
                        ;{
Send_Data
        BCF   0x03,RP0
        MOVWF Data
                        ;	SBUF=Data;
        MOVF  Data,W
        BSF   0x03,RP0
        MOVWF SBUF
                        ;	
                        ;	while(TXIF==0);		
m001    BSF   0x03,RP0
        BTFSS 0x8E,TXIF
        GOTO  m001
                        ;			
                        ;	TXIF=0;		
        BSF   0x03,RP0
        BCF   0x8E,TXIF
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Check_SFR()
                        ;{
Check_SFR
                        ;	uns8 TMP,ErrorCode;
                        ;	
                        ;	
                        ;	WDTC=0x55;	
        MOVLW 85
        BCF   0x03,RP0
        MOVWF WDTC
                        ;	TMP=WDTC&0x9F;
        MOVLW 159
        ANDWF WDTC,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=WDTC)
        MOVF  TMP,W
        XORWF WDTC,W
        BTFSC 0x03,Zero_
        GOTO  m002
                        ;	{
                        ;		ErrorCode=1;
        MOVLW 1
        MOVWF ErrorCode
                        ;		goto Error;
        GOTO  m004
                        ;	}
                        ;	
                        ;	WDTC=0xAA;	
m002    MOVLW 170
        BCF   0x03,RP0
        MOVWF WDTC
                        ;	TMP=WDTC&0x9F;
        MOVLW 159
        ANDWF WDTC,W
        MOVWF TMP
                        ;	
                        ;	if(TMP!=WDTC)
        MOVF  TMP,W
        XORWF WDTC,W
        BTFSC 0x03,Zero_
        GOTO  m003
                        ;	{
                        ;		WDTC &=0x7F;
        BCF   WDTC,7
                        ;		ErrorCode=2;
        MOVLW 2
        MOVWF ErrorCode
                        ;		goto Error;	
        GOTO  m004
                        ;	}
                        ;	
                        ;	WDTC &= 0x7F;	//disable WDT
m003    BCF   0x03,RP0
        BCF   WDTC,7
                        ;	
                        ;		
                        ;	//------------------------------------------
                        ;	PORTA=0x99;
        MOVLW 153
        MOVWF PORTA
                        ;	return;
        RETURN
                        ;	
                        ;Error:
                        ;	PB_0=0;	
m004    BCF   0x03,RP0
        BCF   0x06,PB_0
                        ;	PORTA=TMP;
        MOVF  TMP,W
        MOVWF PORTA
                        ;	
                        ;	//while(1);
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;/*******************************************************************************/
                        ;void Sub_IOC()
                        ;{
Sub_IOC
                        ;    int_save_registers    // W, STATUS (and PCLATH)
        MOVWF svrWREG_2
        SWAPF STATUS,W
        BCF   0x03,RP0
        BCF   0x03,RP1
        MOVWF svrSTATUS_2
                        ;
                        ;	PORTA &=0x0F;
        MOVLW 15
        ANDWF PORTA,1
                        ;	
                        ;	//show flag status
                        ;	PORTA = PORTA |(INTFS<<4);
        SWAPF INTFS,W
        ANDLW 240
        IORWF PORTA,1
                        ;
                        ;	//Clear flag		
                        ;	INTFS = INTFS &0xF0;		
        MOVLW 240
        ANDWF INTFS,1
                        ;		
                        ;    int_restore_registers // W, STATUS (and PCLATH)
        SWAPF svrSTATUS_2,W
        MOVWF STATUS
        SWAPF svrWREG_2,1
        SWAPF svrWREG_2,W
                        ;}
        RETURN
                        ;
                        ;/*******************************************************************************/
                        ;// Main
                        ;/*******************************************************************************/
                        ;void main() 
                        ;{   
main
                        ;	uns16 i;
                        ;	
                        ;	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();
                        ;
                        ;	//Initiate_UART();
                        ;	
                        ;	//------------------------------------------
                        ;	//IOC
                        ;	 IOCAE=0x0f;
        MOVLW 15
        BSF   0x03,RP0
        MOVWF IOCAE
                        ;	 //IOCAES=0x00;	//rising
                        ;	 IOCAES=0x0f;	//falling
        MOVLW 15
        MOVWF IOCAES
                        ;	 INTCON=0x88;	//enable interrupt	
        MOVLW 136
        MOVWF INTCON
                        ;	 
                        ;	 // Send_Data(IOCAE);
                        ;	 // Send_Data(IOCAES);
                        ;	 // Send_Data(INTCON);
                        ;	
                        ;	
                        ;	while(1)
                        ;	{
                        ;		PA_7=1;
m005    BCF   0x03,RP0
        BSF   0x05,PA_7
                        ;		
                        ;		//Enter power down mode
                        ;		sleep();
        SLEEP
                        ;
                        ;		for(i=0;i<0x8000;i++)
        CLRF  i
        CLRF  i+1
m006    MOVLW 128
        BCF   0x03,RP0
        SUBWF i+1,W
        BTFSC 0x03,Carry
        GOTO  m005
                        ;			PA_7=!PA_7;
        MOVLW 128
        XORWF PORTA,1
        INCF  i,1
        BTFSC 0x03,Zero_
        INCF  i+1,1
        GOTO  m006
                        ;				
                        ;		
                        ;	}

        END


; *** KEY INFO ***

; 0x004E   17 word(s)  1 % : Sub_IOC
; 0x001E   11 word(s)  1 % : Send_Data
; 0x0015    9 word(s)  0 % : Initiate_UART
; 0x0006   15 word(s)  1 % : Sub_ALLINT
; 0x0029   37 word(s)  3 % : Check_SFR
; 0x0004    2 word(s)  0 % : INTR_ISR
; 0x005F   35 word(s)  3 % : main

; RAM usage: 7 bytes (6 local), 57 bytes free
; Maximum call level: 0 (+3 for interrupt)
; Total of 127 code words (12 %)
