прерывание от RTC для P89lpc93x

Страницы: 1
RSS
прерывание от RTC для P89lpc93x
 
Помогите пожалуйста, уже 2е суток бьюсь над RTC...

Задача - через 3с с использованием прерывания от RTC моргать ножкой порта.

Программа
зацикливается на While и я так понял не входит в обработчик
прерывания.. Потому что в отладчике Keil флаг RTCF всегда остается = 1.
#include <stdio.h>
#include <REG931.H>
sbit LED_BLINK = P1^0;
unsigned int counter = 300;
void RTCsr(void) interrupt 10 using 0 {
//RTCCON &= 0xFE;
//RTCCON = 0x70;
EA = 0;
RTCCON &= 0x7F;     // отключение прерывания
counter = counter - 1;
if (counter == 0)       // моргание каждые 3с
{
LED_BLINK = ~LED_BLINK;
counter = 300;
}
RTCH = 0x90; //      0.01 секунда
RTCL = 0x01; //
//RTCCON |= 0x10;
//RTCCON = 0x73;
EA = 1;
}
void main(void)
{
RTCCON = 0x70;      //
RTCH = 0x90;     //
RTCL = 0x01;      // 0.01 секунда
P1 = 0x0FE;

//RTCCON |= 0x01;
//RTCCON |= 0x60;
//RTCCON |= 0x10; //включение прерывания RTC
RTCCON = 0x73;         //включение прерывания RTC
EA = 1;
while (1);
}

 Почему не работает?


 
С прерыванием от RTC так и не разобрался, так что тема все еще актуальна, пока пошел другим путем - перестроил вочдог на режим таймера - прерывание №10 заработало.

#include <stdio.h>
#include <REG931.H>
sbit LED_BLINK = P1^0;
unsigned int counter = 10;
void RTCsr(void) interrupt 10 {
WDCON &= 0xfd;
EA = 0;
counter = counter - 1;
if (counter == 0)     
{
LED_BLINK = ~LED_BLINK;
counter = 10;
}
WDL = 0xff;
EA = 1;
}
 void main(void)         
 {
EWDRT = 1;
WDL = 0xff;
P1 = 0x0FE;
EA = 1;
WDCON |= 0x02;
 while (1);
      }

 
С прерыванием от RTC так и не разобрался, так что тема все еще
актуальна, пока пошел другим путем - перестроил вочдог на режим таймера -
прерывание №10 заработало.

Страницы: 1