Сразу по сути. Имеется ножка P1.0, сконфигурированная как вход и включен внутренний резистор pullup на ней. На эту ногу поступает сигнал с другого девайса, который выдает при включении лог.0. Необходимо произвести прерывание при перепаде на P1.0 из лог.1 в лог.0, при выполнении которого (для примера) выставляет на ноге P2.0 лог.1, при этом P2.0 сконфигурирован как выход со значением лог.0 при включении. Проблема в том, что при включении P2.0 выдаёт лог.1. Видимо сразу при включении срабатывает прерывание от порта P1. Как этого избежать? Может я что-то не так конфигурирую? Код ниже:
Код
void main(void){
WDTCTL = WDTPW+WDTHOLD; //отключение watchdog
P1DIR = 0xFE;
P1OUT = 0x00;
P1REN = 0x01;
P2DIR = 0x03;
P2OUT = 0x02;
P2REN = 0x20;
IE1 |= OFIE + WDTIE; // разрешить прерывание от детектора ошибки резонатора
IFG1 |= OFIFG;
uart_init();
P1IES = 0x01;
P1IE = 0x01;
P1IFG = 0;
__bis_SR_register(GIE);
while(1){
.................
}
}
#pragma vector=PORT1_VECTOR
__interrupt void DISCONNECTED(void)
{
P1IFG=0;
P2OUT|=BIT0;
}
WDTCTL = WDTPW+WDTHOLD; //отключение watchdog
P1DIR = 0xFE;
P1OUT = 0x00;
P1REN = 0x01;
P2DIR = 0x03;
P2OUT = 0x02;
P2REN = 0x20;
IE1 |= OFIE + WDTIE; // разрешить прерывание от детектора ошибки резонатора
IFG1 |= OFIFG;
uart_init();
P1IES = 0x01;
P1IE = 0x01;
P1IFG = 0;
__bis_SR_register(GIE);
while(1){
.................
}
}
#pragma vector=PORT1_VECTOR
__interrupt void DISCONNECTED(void)
{
P1IFG=0;
P2OUT|=BIT0;
}