IT'S A SMALL WORLD


Home


PIC Programmer MkV

Instruction Set for PIC12F629
PIC12F629 data
(pdf)
BlankF629.asm

PIC12F629.inc


See more projects using micros:
Pic A PIC Project

Notepad2.zip     Notepad2.exe 
Library of Sub-routines "Cut and Paste
"
Library of routines:   A-E   E-P    P-Z 
 

 

Why spend $10.00 on a musical card when you can produce the tune yourself.
This project uses just 4 components and a small prototype PC board to produce a project that will teach you a lot about programming.
The circuit uses a piezo diaphragm connected to pins 3 and 5.
That's the only component.
All the work is done by the program.
The project is so easy, we don't need to provide any construction details.
You can also get the Happy Birthday tune and use the same circuit.


The PIC chip on a prototype PC board

Here are the files:
SmallWorld.asm
SmallWorld.hex

Here is the program.
You must use the .hex file to "burn" the chip or the .asm file as these are laid out so that the compiler and programmer can understand the data.
The following program is just for viewing.


;*******************************
;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	
 

GOING FURTHER
This project provides you with the tools to create your own tune or download one of the "old favourites" and annoy everyone in the household with its incessant playing.
 

16/5/2010