ДОДАТОК В. Лістінг програми
# include
# include
# include
# include
# define SIGNAL_LENGTH 5000 / / кількість дискретних значень сигналу у гармоніці
# define MIN_AREA_SIZE 0;// Мінімальна площа сигналу
# define MAX_AREA_SIZE 100;// Максимальна площа int ADC_CHANNEL=0;// Канал, по якому здійснюємо сигнал в АЦПgSignal [1000];// Масив де зберігаємо діскретні Значення сігналуgCount=0;// Кількість значень у масіві_SECTION gCS;// Критична секція для запису значень у масівLED1=0x0B4;// Регистр віхідного значення для pwm1 LED2=0x0C3;// Регистр віхідного значення для pwm2init (); delay (int); TIC_int () interrupt 10; TimerTics (); int OK=0;// Вікорістовується як константа, что сігналізує, что Попереду немає перешкодint BARRIER=1;// Вікорістовується як константа, что сігналізує, что Попереду Перешкоди
/ / переривані - віклікається при генерації АЦП Чергова дискретного значенняadc_int () interrupt 6 {data=ADCDATAH;// Старша частина (4 біті - номер каналу; 4 біті - значення сигналу)=(data << 8) | ADCDATAL;// Молодша частина (8 біт значення сигналів) (& gCS);// Вхід у критичність секцію [gCount + +]=data;// Додаємо отриманий значення до буферу (SIGNAL_LENGTH_LENG areaSize) / / перевіряємо чи вона у допустимих межах
| | (MAX_AREA_SIZE
} {(signalState.OK);// Попереду все ок
} :: fill_n (gSignal, gCount, 0);// Очіщаємо буфер=0;
} (& gCS);// Віходімо з критичної секції
} sendSignal (int aState) {/ / визначення чі є Попереду Перешкоди (aState) {ignalState.OK: / / Перешкоди є, програті сигнал ();; ignalState.BARRIER: / / Перешкоди немає, пріпініті програвання сигналу. ();;:
/ / error occure / / Відбулася якась помилка / / цею рядок можна ВИДАЛИТИ
}
} playSound () {= 1;// Встановлюємо значення на віході в 1 - програті сигнал
} stopSound () {= 0;// Встановлюємо значення на віході в 0 - Зупинити програвання
} initializeChip () {/ / ініціалізація мікроконтролераCON=0x083;// Дозволи переривані, та Інші параметріFD=0x02D;=0x052;=1; =1; =1;
} initializeADC () / / ініц АЦП
{= 0x0AC;// Встановлення частоти=CHAN;// Вибір каналу
} initPWM () {/ / ІНІТ pwm1 та 2
/ / Configure the baud rate 9600=0x52;
/ / Configure Time Interval Counter=0x13;// Configure the Time Interval Counter to count a single period in miliseconds / / вибір інтервалу=0x1;// 1 second / / встановлення значення для інтервалу
/ / Configure External Interrupt=0xA4;// Enabl...