| 
;*******************************
;IT'S A SMALL WORLD TUNE        *
;  14-5-2010                    *
;                               *
;********************************
	list	p=12F629
	radix	dec
	include	"p12f629.inc"
	
	errorlevel	-302	; Don't complain about BANK 1 
	__CONFIG	_MCLRE_OFF & _CP_OFF 
                    & _WDT_OFF & _INTRC_OSC_NOCLKOUT  ;Internal osc.
;==================================
;
;       Configuration Bits
;
;==================================
note	equ	21h	;value of HIGH and LOW for note
gap	equ	22h 	;gap between notes - uses delay "gap_1"
loops	equ	23h 	;loops of HIGH/LOW for 250mS or other duration
temp1	equ	24h 	;temp file for note 
jump	equ	25h
D1	equ	26h	;used in 250mS delay
D2	equ	27h	;used in 250mS delay
D3	equ	28h	;used in 250mS delay
gapDela	equ	29h	;used in gap delay
tempA	equ	2Ah	;used in gap delay
extend      equ	2Bh	;used to increase number of loops
;************************
;Beginning of program
;************************
	org	0x00
	nop
	nop
	nop
	nop
	nop			
SetUp	bsf       status, rp0 	;Bank 1		
	call       0x3FF       	;retrieve factory calibration value 
	movwf   OSCCAL      	;update register with factory cal value 
       	movlw   b'00001011'	;Set TRIS  
	movwf   TRISIO	;GP2,4 outputs			
	bcf       status, rp0	;bank 0		
	movlw   07h         	;turn off Comparator 
                movwf   CMCON       	;must be placed in bank 0 
                clrf        jump	;jump value for table	
	goto 	M1		
;********************************
;* Delays 		
;********************************	
		
	;gap_1 produces the gap between notes - 3rd byte in the table	
		
gap_1	movlw	.2
	movwf	gapDela
gap_1a	decfsz	tempA
	goto	gap_1a
	decfsz	gapDela,1 ;produces loops
	goto	gap_1a
	decfsz	gap,1	;
	goto	gap_1
	retlw	00	
	
	;250mS second delay
		
_250mS	nop
	goto	$+1		
	decfsz 	D1,1
	goto 	_250mS
	decfsz 	D2,1
	goto 	_250mS		
	retlw 	00	
		
;****************************************************************
;* Table			*
;****************************************************************
	;table values are as follows:
	;1st value = value of HIGH and LOW for note
	;2nd value = value to create 48mS note
	;3rd value = gap between notes
table1  addwf   pcl,f   ;02h,1  add W to program counter
        nop		
        retlw   .14     ;loops - cycles of HIGH/LOW  "E"  It's
        retlw   .84     ;note - value of HIGH/LOW
        retlw   .50     ;gap between notes - uses "gap_1" delay      
        retlw   .14     		; "F" - A
        retlw   .80 	
        retlw   .50 
        retlw   .30		;"G"  world
        retlw   .142
        retlw   .50 
        retlw   .30		;"E"  of
        retlw   .84    
        retlw   .50 
        retlw   .30		;"C"   laugh
        retlw   .105
        retlw   .50 
        retlw   .14		;"D"- ter
        retlw   .94
        retlw   .50 
        retlw   .14		;"C"   a
        retlw   .105
        retlw   .50 
        retlw   .30		;"C"   world
        retlw   .105
        retlw   .50  
        retlw   .30		;"B"  of
        retlw   .113
        retlw   .50  
        retlw   .40		;"B"  tears
        retlw   .113
        retlw   .50 
        retlw   .14		;"D"- It's
        retlw   .94
        retlw   .50
        retlw   .15		;"E"  a
        retlw   .84    
        retlw   .50
        retlw   .30    		 ; "F" - world
        retlw   .80 	
        retlw   .50
        retlw   .30		;"D"- of
        retlw   .94
        retlw   .50
        retlw   .40		;"B"  hopes
        retlw   .113
        retlw   .50 
        retlw   .14		;"C"   and
        retlw   .105
        retlw   .50 
        retlw   .14		;"B"  a
        retlw   .113
        retlw   .50 
        retlw   .30		;"A"  world
        retlw   .126
        retlw   .20 
        retlw   .30		;"G"  of
        retlw   .142
        retlw   .50 
        retlw   .30		;"G"  fears
        retlw   .142
        retlw   .50 
        retlw   .15		;"E"  There's
        retlw   .84    
        retlw   .50
        retlw   .15   		  ; "F" - so
        retlw   .80 	
        retlw   .50
        retlw   .30		;"G"  much
        retlw   .142
        retlw   .50
        retlw   .14		;"C"   that
        retlw   .105
        retlw   .50 
        retlw   .14		;"D"- we
        retlw   .94
        retlw   .50
        retlw   .30 		;"E"  share
        retlw   .84    
        retlw   .50
        retlw   .14		;"D"- that
        retlw   .94
        retlw   .50
        retlw   .14		;"C"   it's
        retlw   .105
        retlw   .50
        retlw   .15		;"A"  time
        retlw   .126
        retlw   .20
        retlw   .14		;"D"- we're
        retlw   .94
        retlw   .50
        retlw   .15 		;"E"  a
        retlw   .84    
        retlw   .50
        retlw   .30     		; "F" - ware
        retlw   .80 	
        retlw   .50
        retlw   .14		  ;"E"   It's
        retlw   .84
        retlw   .50 
        retlw   .14		;"D"   A
        retlw   .94
        retlw   .50 
        retlw   .30		;"G"  small
        retlw   .142
        retlw   .50 
        retlw   .14     		; "F" - world
        retlw   .80 	
        retlw   .50 
        retlw   .30    		 ; "E" - af
        retlw   .84 	
        retlw   .50 
        retlw   .14		;"D"   ter
        retlw   .94
        retlw   .50 
        retlw   .60		;"C"  all
        retlw   .105
        retlw   .240
        retlw   .45		;"C"  It's
        retlw   .105
        retlw   .50 
        retlw   .14		;"C"   a
        retlw   .105
        retlw   .50 
        retlw   .30    		 ; "E" - small
        retlw   .84 	
        retlw   .50
        retlw   .30		;"C"   world
        retlw   .105
        retlw   .50 
        retlw   .45		;"D"   af
        retlw   .94
        retlw   .50 
        retlw   .15		;"D"   ter
        retlw   .94
        retlw   .50
        retlw   .60		;"D"   all
        retlw   .94
        retlw   .240 
        retlw   .48    		 ; "D" -It's
        retlw   .94 	
        retlw   .50     
        retlw   .14		;"D"- A
        retlw   .94
        retlw   .50          
        retlw   .30		;"F"  small
        retlw   .80
        retlw   .50   
        retlw   .24		;"D"   word
        retlw   .94
        retlw   .50 
        retlw   .48		;"E"   af
        retlw   .84    
        retlw   .50 
        retlw   .14		  ;"E"   ter
        retlw   .84
        retlw   .20  
        retlw   .48     		; "E" - all
        retlw   .84 	
        retlw   .240 
        retlw   .48		;"E"- It's
        retlw   .84
        retlw   .20  
        retlw   .14		;"E"  A
        retlw   .84
        retlw   .20  
        retlw   .50		;"G+"   small
        retlw   .71
        retlw   .20  
        retlw   .24		;"E"  world 
        retlw   .84    
        retlw   .20  
        retlw   .48		;"F"  af
        retlw   .80    
        retlw   .20 
        retlw   .14     		; "F" -ter
        retlw   .80 	
        retlw   .20 
        retlw   .14     		; "F" - all
        retlw   .80 	
        retlw   .240
        retlw   .30		;"E"  it's 
        retlw   .84    
        retlw   .20 
        retlw   .14		;"D"- A
        retlw   .94
        retlw   .50 
        retlw   .40		;"G"  small
        retlw   .142
        retlw   .50 
        retlw   .40		;"B"  small
        retlw   .113
        retlw   .50 
        retlw   .55		;"C"   word
        retlw   .105
        retlw   .50        
                     
        retlw   0FFh
        
M1   call	_250mS
       call	_250mS
		
Main  incf       jump,1  ;increment pointer 
         movf      jump,w		
         call	     table1
         movwf   loops	;first value from table	
         movlw   0ffh
         xorwf    loops,w	     ;see if value is "0ffh"
         btfsc     status,z
         goto	    SetUp			
         incf	    jump,1
         movf     jump,w
         call      table1
         movwf   temp1	     ;temp for note for HIGH/LOW
		
		
eee     movlw	10
          movwf	extend		
ttt       movf	temp1,w
          movwf	note		
          bsf		gpio,2
          bcf		gpio,4
          goto	$+1
          goto	$+1
          goto	$+1
          decfsz	note,1
          goto	$-4		
          movf	temp1,w
          movwf	note		
          bcf		gpio,2
          bsf		gpio,4
          goto	$+1
          goto	$+1
          goto	$+1
          decfsz	note,1
          goto	$-4
          decfsz	extend,1
          goto	ttt
          decfsz	loops,f
          goto	eee
          incf	j               ump,1       ;look for gap value
          movf	jump,w			
          call	                table1
          movwf	gap
          bcf		gpio,2	;to produce silence
          bcf		gpio,4	;to produce silence
          call	                gap_1	;mS gap
          goto	Main
				
		
      END	 |