[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
примерно так
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