[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Сергей Тюнькин 05 сентября 2001 г. 14:40
В ответ на: ADuC 812 отправлено Vyacheslav 04 сентября 2001 г. 19:55

1.Судя по программе, частота меняться и не будет.
Если период выполнения цикла FOR() больше чем период прерывания таймера, то синусоида будет почти без разрывов, а ее период определяется лишь временем выполнения цикла FOR(), в противном случае , будет выводится 1-н период с паузой.
А п/п может выглядеть примерно так:
void handler(void) interrupt 3
{
TH1 = Divide_H;
TL1 = Divide_L;
DAC1L = sine[Count_Buf];
DAC0L = cosine[Count_Buf];
Count_Buf = (Count_Buf+1) % 360;
}

Теперь, для того чтобы вырабатавать 400 Гц при длинне буфера 360, необходимо вырабатывать прерывания с частотой 400 * 360 = 14400 Гц.
Исходя из этого и частоты кварца
Divide_HL = 2^N - T * F_Quartz/K;

где
T - период прерывания (сек) (1/14400)
F_Quartz - частота кварца (Гц)
K - коэффициент деления тактовой для таймера
N - разрядность таймера

Не совсем ясно, Вы пишите "Как расчитать для 13-битного таймера значения в TH1, TL1 ". Для 13 бит max - 0x3FF.

Сделать задержку можно различными способами, самый простой:

void Delay(long count)
{
for(;count--!=0;)
}

3. Какой эквивалент комманды JB ACC.7,$-2 на С? Что такое $ ?

$ - текущее значение счетчика команд

DJNZ ACC,$
иначе
Wait: DJNZ ACC,Wait

JB ACC.7,$-2

иначе
Wait: nop
nop
JB ACC.7,Wait

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru