Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: прерывание от RTC для P89lpc93x
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
TeddyIn
Помогите пожалуйста, уже 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);
}


почему не работает?
TeddyIn
С прерыванием от 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);
      }

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.