با سلام

کد زیر مربوط به برنامه تولید صدا هست که از تایمر1 مد مقایسه ایش استفاده می کنه ولی دقیقا نمی دونم چطوری؟ممکنه یه نفر توضیح بده؟(منظورم اینه که چه عاملی (متغیری) در تایمر باعث ایجاد صدا میشه با توجه به کد)

با تشکر
  /* This header file declares the internal
register addresses for Atmega 8535 */
#include "io8535.h"

#define OCIE1A TIMSK_Bit4
#define I SREG_Bit7
#define DDD5 DDRD_Bit5
#define PD5 PORTD_Bit5

// Declare variables
unsigned char COUNT;
// Timer1 Compare Match Handler
#pragma vector = TIMER1_COMPA_vect
__interrupt void COMP_A(void)
{
COUNT--; // COUNT-1
}
// Main
void main(void)
{
unsigned char i;
DDD5 = 1; // Set PD5 output
PD5 = 1; // speaker off
// TCNT1H = TCNT1L = 0
TCNT1H = 0;
TCNT1L = 0;
TCCR1A = 0x40;; // Toggle OC1A on Compare match
OCIE1A = 1; // Enable Timer 1 Compare match A
I = 1; // Set global interrupt interrupt
do{
for (i=0; i < 20 ; i++){
// 480[Hz]/2
OCR1AH = 15360 >> 8;
OCR1AL = 15360 & 0x00ff;
TCCR1B = 0x09;
COUNT = 24; // 480[Hz]
while(COUNT != 0); // Wait for interrupt
// 320[Hz]/2
OCR1AH = 23040 >> 8;
OCR1AL = 23040 & 0x00ff;
COUNT = 16; // 320[Hz]
while(COUNT != 0); // Wait for interrupt
}
// Wait 2 seconds
OCR1AH = 0xff;
OCR1AL = 0xff;
TCCR1A = 0;
COUNT = 113;
while(COUNT != 0); // Wait for interrupt
TCCR1A = 0x40; // Toggle OC1A on Compare match
}while(1);
}