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

Отправлено Vyacheslav 04 сентября 2001 г. 19:55

Уважаемые!

У меня к Вам несколько вопросов:
1. Почему в нижеприведенном фрагменте частота синусоиды и косинусоиды не
меняется, а если я в том же обработчике вывожу меандр, то его частота
меняется при изменении TH1, TL1? Может просто процессор не успевает? При зацикливании в цикле while(1) кода обработчика частота до 400 Гц явно не дотягивает.
Как расчитать для 13-битного таймера значения в TH1, TL1 для выходного сигнала 400 Гц?

void handler(void) interrupt 3
{
TH1 = 0xC4;
TL1 = 0x00;
for (i = 0; i < 360; i++)
{DAC1L = sine[i];DAC0L = cosine[i];} // unsigned char xdata sine[361];
}
void main (void)
{
DACCON = 0xFF; // 0..Vdd, auto update mode, 8-bit mode, DAC1 is ON, DAC0 is ON ie 11111011
TMOD = 0x00; // 13-bit timer1 (mode 0), GATE off
TH1 = 0xC4;
TL1 = 0x00;
TR1 = 1;
ET1 = 1; // Enable timer1 interrupt
EA = 1; // Enable interrupts in general
while (1);
}

2. Возникла необходимость произвести калибровку АЦП. Обнаружил, что 812cal.asm и т.п.
при компилляции a51.exe (v. 5.28) выдает для этих программ по ~50 ошибок. Я попытался перевести
подпрограммы калибровки на Keil C.
Как этот фрагмент можно реализовать на С?

DELAY65ms: ; delay for 65ms

PUSH ACC
PUSH B

MOV B,#130 ; 130 * 500us = 65ms
DLY001: MOV A,#229 ; 229 * 2.17us = 500us
DJNZ ACC,$ ; sit here for 500us
DJNZ B,DLY001 ; repeat 130 times (65ms delay)

POP B
POP ACC
RET
3. Какой эквивалент комманды JB ACC.7,$-2 на С? Что такое $ ?
Не аналог регистра IP в x86?

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

Ответы



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

E-mail: info@telesys.ru