for comparison I came up with this , oddly it uses mode code space
Code:'**************************************************************** '* Name : deMODULATOR.BAS * '* Author : richard * '* Notice : Copyright (c) 2016 * '* : All Rights Reserved * '* Date : 5/29/2016 * '* Version : 1.0 * '* Notes : decodes missing pulse encoded data stream A.5 * '* : 16F1825 * '**************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _CP_OFF & _WDTE_ON & _PWRTE_ON & _MCLRE_ON & _CLKOUTEN_OFF __config _CONFIG2, _PLLEN_ON & _LVP_OFF #ENDCONFIG OSCCON=$70 DEFINE OSC 32 ' PIC 16F1825 TRISA = %111110 ' Make somepins Input trisc = %111100 ;Make some pins Input ANSELA=0 ANSELC=0 led var latc.0 ;DEBUG led2 var latc.1 ;DEBUG demod var porta.5 ;demod in X VAR byte darta VAR byte[4] counter var word dm_state VAR byte lata.0=1 ;DEBUG clear led=0 DEFINE DEBUG_REG PORTA DEFINE DEBUG_BIT 0 DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 pause 2000 Debug "Start",13 ,10 DEFINE PULSIN_MAX 9000 main: select case dm_state case 0 PULSIN demod, 0, counter if counter > 7800 then dm_state=1 x=0 endif case 1 pir1.1=0 tmr2=0 t2con=7 while demod : wend if pir1.1 | (tmr2 < 220) then dm_state=0 else dm_state=2 tmr2=0 endif case 2 while !demod : wend t2con=0 if pir1.1 then dm_state=0 led=1 endif if tmr2 < 150 then darta.0[x]=0 else darta.0[x]=1 endif tmr2=0 x=x+1 if x >31 then dm_state=3 else while demod : wend t2con=7 endif case 3 led2=1 ;DEBUG ' Debug 13 ,10 ,hex2 darta[3] ,hex2 darta[2],hex2 darta[1],hex2 darta[0] ;DEBUG Debug 13 ,10 ,bin8 darta[3],bin8 darta[2],bin8 darta[1],bin8 darta[0] ;DEBUG pause 200 led2=0 ;DEBUG dm_state=0 end select goto main




Bookmarks