Ввод дискретных сигналов
Прежде чем приступить к обработке входного дискретного сигнала, необходимо инициализировать используемый порт – настроить линию порта как вход. Так же в случаях, если требуемая линия порта может использоваться для каких, либо других периферийных функций, необходимо их отключить.
Непосредственно обработка сигнала от дискретного датчика подразумевает:
- либо определение уровня сигнала в текущий момент времени,
- либо ожидание появления сигнала требуемого уровня.
Конкретная программная реализация процедуры зависит от того, каким образом датчик подключен к микроконтроллеру.
Например, при подключении датчика к линии бита 2 порта RA программа определения уровня сигнала в текущий момент времени будет иметь вид:
#include <P33FJ32MC204.h>
_FOSC(OSCIOFNC_ON & POSCMD_NONE) // отключение дополнительной
// функции порта RA2 – выход
// тактирующего сигнала
// внутреннего генератора
int main()
{
TRISAbits.TRISA2 = 1; // настройка порта RA2 на вход
if (PORTAbits.RA2)
{
// часть программы, выполняемой при ВЫСОКОМ уровне
// сигнала на входе контроллера
}
if (!PORTAbits.RA2)
{
// часть программы, выполняемой при НИЗКОМ уровне
// сигнала на входе контроллера
}
}
Программа ожидания требуемого уровня сигнала на входе микроконтроллера при данном подключении будет иметь вид:
#include <P33FJ32MC204.h>
_FOSC(OSCIOFNC_ON & POSCMD_NONE) // отключение дополнительной
// функции порта RA2 – выход
// тактирующего сигнала
// внутреннего генератора
int main()
{
TRISAbits.TRISA2 = 1; // настройка порта RA2 на вход
while (PORTAbits.RA2); // ожидание НИЗКОГО уровня сигнала
…
while (!PORTAbits.RA2); // ожидание ВЫСОКОГО уровня сигнала
…
}