Я создал проект с использованием 16-битного микроконтроллера Thunderbird12, аналогичного семейству 9s12 / Freescale 68HC12. Он делает несколько вещей, но в основном включает внешний водяной насос. Все работает нормально, кроме того, что мне нужно реализовать прерывание. Я хочу иметь возможность остановить двигатель с помощью прерывания через кнопку.
Я установил кнопку, которая устанавливает высокий уровень на выводе 0 порта P при нажатии. Используя C, я инициализировал оборудование и написал код, но флаг не вызывается. Пожалуйста, смотрите код ниже.
// Interrupt function
int interruptFlag;
void interrupt 56 WaterPumpRoutine() {
if ((PIFP & 0x01) == 0x01) { // check if pin 0 of port p is high (when button is pressed)
interruptFlag = 1; // set the flag to 1
}
// Main
void main() {
DDRP = 0x00; // set port P as input
PIEP = PIEP | 0x01; // enable interrupts on port P, pin 0
PERP = PERP | 0x01; // enable pull-up/down on port P, pin 0
if ( interruptFlag == 1)
PORTB = (PORTB & 0x00) // Here I'm turning off all the pins in Port B, which includes the pump.
}
Если я добавлю этот код PORTB = (PORTB & 0x00)
в функцию WaterPumpRoutine()
, он будет работать нормально, но мне нужно иметь возможность вызывать флаг где угодно. Я не уверен, что мне не хватает. Любая помощь будет оценена!