[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Уважаемые!
У меня к Вам несколько вопросов:
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