[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]

Отправлено nkam 09 января 2002 г. 15:13
В ответ на: Ответ: отправлено Elektronik 08 января 2002 г. 18:10

примерно так

static void timer3_irq (void) interrupt 35 {
P3_3 ^= 0x8; //переключаем Р3.3
}

void Setup_Timer (udword freq) {
udword reload;
reload = 4000000/freq/2; //устанавливаем частоту в два раза больше заданной
DP3_3 = 1;

T3CON = 0x880;
T2CON = 0x27;
T2 = reload;
T3 = reload;
T3IC = 0x44;
T3R = 1;
IEN = 1;
}

#define Np 100

void main (void){
int i;
Setup_Timer(125000);

for(i = 0; i < Np; i++){
while (!P3_7); // вот здесь все и останавливается.
//если без таймера, а "ручками" выставлять запрос - работает
//можно, конечно, так и сделать, а по таймеру обнулять флаг - который //ждать в теле - но как то криво, да и точность потенциально теряется
Get_Next_Point();
}

for(;;);
}


Кроме таймера никаких прерываний не используется (те они, конечно, есть, но не работает даже в ^^ примере).
При этом в отладчике видно, что таймер работает. А сигнал на ноге не меняется. Если убираем опрос готовности - тогда нога тактуется.

Вот такая вот ....

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

Ответы



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

E-mail: info@telesys.ru