Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
uint8_t systick;
#define SYSDIV 100 /* 50мс при 2кГц преріваниях */
uint8_t tick_50ms;
uint8_t beepmask;
#define BEEP_TICKS 0x01 /* один бит в beepmask - 100ms звука при 50мс тике */...
/* в прерывании таймера */
if(beepmask & 0x80) {
/* Инвертировать ножку спикера. Иногда в зависимости от флага
* частоті - или в каждом прерівании, или в зависимости от младшего
* бита systick (скажем, 1кГц или 500Гц при 2кГц прерівании)
*/
}
if(--systick) {
systick = SYSDIV;
++tick_50ms;
if( (tick_50ms & BEEP_TICKS) == BEEP_TICKS && beepmask ) {
if( (beepmask <<= 1) == 0) {
/* ножку спикера в "ток не течёт", мало ли в какой фазе оказалось */
}
}
}...
/* где-то, где захотелось попищать */
beepmask = 0xC8; /* би-би-би */
...
beepmask = 0xF4; /* биии-бип */