Sound.c
//=====================================================================//
// Sound Test Program for PIC using T.T.L.S.
// Copyright 2002 Makio Suzuki. All rights reserved.
//
// CPU = PIC16C84
// X'tal = 10MHz
//
// Circuit diagram for port
//
// RA4----(small)SPEAKER----VDD
//
//=====================================================================//
//This file was generated by the C2G Code Generator 1.1
//If necessary insert your global variables declaration here
#pragma CLOCK_FREQ 10000000
#define ON 1
#define OFF 0
#define C2 3
#define D2 5
#define E2 7
#define F2 8
#define G2 10
#define A3 12 //440[Hz]
#define B3 14
#define C3 15
#define D3 17
#define E3 19
#define F3 20
#define G3 22
#define A4 24 //880[Hz]
#define B4 26
#define C4 27
#define D4 29
#define E4 31
#define F4 32
#define G4 34
#define A5 36 //1760[Hz]
#define B5 38
#define C5 39
#define N0 0
#define N2 1
#define N4 2
#define N8 3
#define N16 4
unsigned char SpeakerOnOff;
unsigned char Ps,Tmr,SoundOnOff;
//TMR0 Overflow handler
void tmrHandler( void )
{
TMR0 = Tmr;
set_bit( STATUS, RP0 ); //Select the Register bank 1
OPTION_REG = ( OPTION_REG&0xf8 )|Ps;
clear_bit( STATUS, RP0 ); //Select the Register bank 0
if( SoundOnOff==ON ){
if( SpeakerOnOff==OFF ){
SpeakerOnOff = ON;
output_high_port_a( 4 );
}else{
SpeakerOnOff = OFF;
output_low_port_a( 4 );
}
}
}
//This is the interrupt handler
void interrupt( void )
{
//Insert your code which should run
//before any interrupt processing here
//Interrupt processing
//TMR0 Overflow processing
if( INTCON & 4 )
{
clear_bit( INTCON, 2 );
tmrHandler();
}
//Insert your code which should run
//after any interrupt processing here
}
void SoundSet( unsigned char SoundNumber,unsigned char Note )
{
switch( SoundNumber ){
case C4: Ps = 5; Tmr = 107; SoundOnOff = ON; break;
case D4: Ps = 5; Tmr = 123; SoundOnOff = ON; break;
case E4: Ps = 4; Tmr = 19; SoundOnOff = ON; break;
case F4: Ps = 4; Tmr = 33; SoundOnOff = ON; break;
case G4: Ps = 4; Tmr = 57; SoundOnOff = ON; break;
case A3: Ps = 4; Tmr = 79; SoundOnOff = ON; break;
case B3: Ps = 4; Tmr = 98; SoundOnOff = ON; break;
case C3: Ps = 4; Tmr = 107; SoundOnOff = ON; break;
case D3: Ps = 4; Tmr = 123; SoundOnOff = ON; break;
case E3: Ps = 3; Tmr = 19; SoundOnOff = ON; break;
case F3: Ps = 3; Tmr = 33; SoundOnOff = ON; break;
case G3: Ps = 3; Tmr = 57; SoundOnOff = ON; break;
case A4: Ps = 3; Tmr = 79; SoundOnOff = ON; break;
case B4: Ps = 3; Tmr = 98; SoundOnOff = ON; break;
case C4: Ps = 3; Tmr = 107; SoundOnOff = ON; break;
case D4: Ps = 3; Tmr = 123; SoundOnOff = ON; break;
case E4: Ps = 2; Tmr = 19; SoundOnOff = ON; break;
case F4: Ps = 2; Tmr = 33; SoundOnOff = ON; break;
case G4: Ps = 2; Tmr = 57; SoundOnOff = ON; break;
case A5: Ps = 2; Tmr = 79; SoundOnOff = ON; break;
case B5: Ps = 2; Tmr = 98; SoundOnOff = ON; break;
case C5: Ps = 2; Tmr = 107; SoundOnOff = ON; break;
default: Ps = 3; Tmr = 100; SoundOnOff = OFF;
}
switch( Note ){
case N0 : delay_ms( 250 );delay_ms( 250 );
case N2 : delay_ms( 250 );
case N4 : delay_ms( 250 ); break;
case N8 : delay_ms( 125 ); break;
case N16: delay_ms( 63 ); break;
default : delay_ms( 250 );
}
SoundOnOff = OFF;
switch( Note ){
case N0 : delay_ms( 250 );delay_ms( 250 );
case N2 : delay_ms( 250 );
case N4 : delay_ms( 250 ); break;
case N8 : delay_ms( 125 ); break;
case N16: delay_ms( 63 ); break;
default : delay_ms( 250 );
}
}
//This is the main function which is called
//after processor power-up or reset
void main( void )
{
//Hardware Initialization
output_port_a( 0 );
output_port_b( 0 );
set_bit( STATUS, RP0 ); //Select the Register bank 1
set_tris_a( 0 ); //Configure the Port A
set_tris_b( 0 ); //Configure the Port B
OPTION_REG = 0xc0; //[1100 0000]Configure the OPTION register
clear_bit( STATUS, RP0 ); //Select the Register bank 0
SoundSet( 0,N0 );
SpeakerOnOff = OFF;
INTCON = 0xa0; //[1010 0000]Configure the INTCON register
//Don't forget to insert your code here!!!
//(As there is no "return" from the main code
//an endless loop may be a good idea)
while( 1 ){
SoundSet( C3,N4 );SoundSet( C3,N4 );SoundSet( G3,N4 );SoundSet( G3,N4 );
SoundSet( A4,N4 );SoundSet( A4,N4 );SoundSet( G3,N2 );
SoundSet( F3,N4 );SoundSet( F3,N4 );SoundSet( E3,N4 );SoundSet( E3,N4 );
SoundSet( D3,N4 );SoundSet( D3,N4 );SoundSet( C3,N2 );
SoundSet( G3,N4 );SoundSet( G3,N4 );SoundSet( F3,N4 );SoundSet( F3,N4 );
SoundSet( E3,N4 );SoundSet( E3,N4 );SoundSet( D3,N2 );
SoundSet( G3,N4 );SoundSet( G3,N4 );SoundSet( F3,N4 );SoundSet( F3,N4 );
SoundSet( E3,N4 );SoundSet( E3,N4 );SoundSet( D3,N2 );
SoundSet( C3,N4 );SoundSet( C3,N4 );SoundSet( G3,N4 );SoundSet( G3,N4 );
SoundSet( A4,N4 );SoundSet( A4,N4 );SoundSet( G3,N2 );
SoundSet( F3,N4 );SoundSet( F3,N4 );SoundSet( E3,N4 );SoundSet( E3,N4 );
SoundSet( D3,N4 );SoundSet( D3,N4 );SoundSet( C3,N2 );
SoundSet( 0,N0 );
}
}
//=====================================================================//