| 	
;****************************************************************
;Started 18/4/2015	
;4-Channel 303MHz (313MHz)- Press one of 4 buttons for
;a short time and the corresponding output will toggle. 
;****************************************************************
	list	p=12F629
	radix	dec
	include	"p12f629.inc"
	
	errorlevel -302	; Don't complain about 
                     BANK 1 Registers during assembly
	__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF 
                   & _INTRC_OSC_NOCLKOUT  ;Internal osc.
;_MCLRE_OFF - master clear must be off for gp3 to work as input pin 
;****************************************************************
; variables - names and files
;****************************************************************
temp1	equ 20h	;
temp2	equ 21h	;
temp3	equ 22h	;
temp4	equ 23h	; 		
_flash	equ 26h ;for flashing the LED
;****************************************************************
;Equates
;****************************************************************
status	equ	0x03
rp1	equ	0x06
rp0	equ	0x05
GPIO 	equ     0x05
			
status	equ	03h
option_reg	equ 81h
	; bits on GPIO
				
pin7	equ	0	;GP0  Input from 303MHz module
pin6	equ	1	;GP1  Output A
pin5	equ	2	;GP2  Output B
pin4	equ	3	;GP3  not used
pin3	equ	4	;GP4  Output C
pin2	equ	5	;GP5  Output D   
 
	;bits
				
rp0	equ	5	;bit 5 of the status register
;****************************************************************
;Beginning of program
;****************************************************************
	org	0x00
	nop
	nop
	nop
	nop
	nop			
SetUp	bsf	status, rp0 	;Bank 1			
       	movlw	b'11001001'	;Set TRIS  GP1,2,4,5 out GP0,input
	movwf	TRISIO	   	;		
	bcf	status, rp0	;bank 0
	movlw   07h         	;turn off Comparator ports
        movwf   CMCON       	;must be placed in bank 0  
        clrf    _flash     
	clrf 	GPIO       	;Clear GPIO of junk		
	goto 	Main	
			
;*********************
;* delays			*
;*********************
	;approx 16uS  delay
_10uS	goto 	$+1
        goto 	$+1
	goto 	$+1
        goto 	$+1
        goto 	$+1
        goto 	$+1
        goto 	$+1
	retlw 	00
_XuS	movlw	.100
	movwf	temp1
_2	nop
	decfsz 	temp1,f
	goto 	_2		
	retlw 	00
	
		
		
_1mS	movlw	.2
	movwf	temp2
_1	nop
	decfsz 	temp1,f
	goto 	_1
	decfsz 	temp2,f
	goto 	_1	
	retlw 	00	
		
		
_100mS	movlw	.100
	movwf	temp2
_100	nop
	decfsz 	temp1,f
	goto 	_100
	decfsz 	temp2,f
	goto 	_100	
	retlw 	00		
				
				
_500mS	movlw	0FFh
	movwf	temp2
_500	goto	$+1
	goto	$+1
	decfsz 	temp1,f
	goto 	_500
	decfsz 	temp2,f
	goto 	_500	
	retlw 	00	
		
		
			
;****************************
;* Sub Routines 			*
;****************************
		
LED     bsf  	 gpio,1
        call	 _500mS
	bcf  	 gpio,1
        call	 _100mS	
        decfsz   _flash,1
        goto     LED
        call	 _500mS
        call	 _500mS
        call	 _500mS
        call	 _500mS 
	goto     Main	
	   
	   
	   
Toggle	decfsz  _flash,1
        goto    $+4
        movlw 	02
	xorwf	gpio,1	;pin6 button A (1)
	goto    M2
	decfsz  _flash,1
        goto    $+4
        movlw 	02
	xorwf	gpio,1	;pin6 button A (2)
	goto    M2
	decfsz  _flash,1
        goto    $+4
        movlw 	04
	xorwf	gpio,1	;pin5 button B (3)
        goto    M2
	decfsz  _flash,1
        goto    $+4
        movlw 	04
		xorwf	gpio,1	;pin5 button B (4)
        goto    M2
        decfsz  _flash,1
        goto    $+4
        movlw 	04
	xorwf	gpio,1	;pin5 button B (5)
        goto    M2
        decfsz  _flash,1
        goto    $+4
        movlw 	10h
	xorwf	gpio,1	;pin3 button C (6)
	goto    M2
	decfsz  _flash,1
        goto    $+4
        movlw 	10h
	xorwf	gpio,1	;pin3 button C (7)
	goto    M2
        decfsz  _flash,1
        goto    $+4
        movlw 	10h
	xorwf	gpio,1	;pin3 button C (8)
	goto    M2
				
        decfsz  _flash,1
	goto    $+4
	movlw 	20h
	xorwf	gpio,1  ;pin2 button D (9)
        goto    M2	   
	decfsz  _flash,1
        goto    $+4
        movlw 	20h
	xorwf	gpio,1  ;pin2 button D (10)
	goto    M2
	   	
	decfsz  _flash,1
        goto    M2	
        movlw 	20h
	xorwf	gpio,1  ;pin2 button D (11)
	goto    M2		
		
					
						
;****************************************************************
;* Main 							*
;****************************************************************
Main	bsf	status, rp0 	;Bank 1			
       	bcf 	TRISIO,0        ;make pin7 output		
	bcf	status, rp0	;bank 0
	bcf	gpio,0     	;make pin7 low to discharge 100n
        call	_1mS    	;discharge 100n
        
        bsf	status, rp0 	;Bank 1			
       	bsf 	TRISIO,0        ;make pin7 input		
	bcf	status, rp0	;bank 0	
	nop
	btfss  	gpio,0  
	goto    $-2
	bsf	status, rp0 	;Bank 1			
       	bcf 	TRISIO,0        ;make pin7 output		
	bcf	status, rp0	;bank 0
	bcf	gpio,0     	;make pin7 low to discharge 100n
        call	_1mS    	;discharge 100n
        clrf    _flash
        bsf	status, rp0 	;Bank 1			
       	bsf 	TRISIO,0        ;make pin7 input		
	bcf	status, rp0	;bank 0	
		
	btfsc  	gpio,0        
	goto    Toggle
	incf    _flash,1
	call    _XuS
	goto    $-4
		
	;switch debounce:
		
M2      bsf	status, rp0 	;Bank 1			
       	bcf 	TRISIO,0        ;make pin7 output		
	bcf	status, rp0	;bank 0
	bcf	gpio,0     	;make pin7 low to discharge 100n
        call	_1mS    	;discharge 100n
        
        bsf	status, rp0 	;Bank 1			
       	bsf 	TRISIO,0        ;make pin7 input		
	bcf	status, rp0	;bank 0
	call	_1mS 
	call	_1mS 	
	btfsc  	gpio,0  
	goto    M2
        goto    Main
								
	END
		
 |