Вывод дискретных сигналов
Аналогично, прежде чем приступить к управлению выходным дискретным сигналом, необходимо инициализировать используемый порт – настроить линию порта как выход. Так же в случаях, если требуемая линия порта может использоваться для каких, либо других периферийных функций, необходимо их отключить.
Для управления дискретным выводом микроконтроллера на соответствующей выходной линии порта необходимо сформировать логический сигнал 0 или 1, что реализуется командами вывода непосредственного операнда, содержащего в требуемом бите значение 0 или 1.
Таким образом, при подключении исполнительного устройства к линии бита 15 порта RB программа работы с дискретным выходом микроконтроллера будет иметь вид:
#include <P33FJ32MC204.h>
int main()
{
TRISBbits.TRISB15 = 0; // настройка порта RB15 на выход
LATBbits.LATB15 = 1; // установка ВЫСОКОГО уровня сигнала
…
LATBbits.LATB15 = 0; // установка НИЗКОГО уровня сигнала
…
}
ПРИЛОЖЕНИЕ А
Схема алгоритма для выполнения задания 1
Рисунок А.1 – Схема алгоритма к заданию 1
Листинг программы для выполнения задания 1:
#include <P33FJ32MC204.h>
_FOSC(OSCIOFNC_ON & POSCMD_NONE) //отключение дополнительной
//функции порта RA2 – выход
//тактирующего сигнала //внутреннего генератора
int main()
{
TRISBbits.TRISB15 = 0; // настройка порта RB15 на выход
TRISBbits.TRISB13 = 0; // настройка порта RB13 на выход
TRISAbits.TRISA2 = 1; // настройка порта RA2 на вход
TRISAbits.TRISA3 = 1; // настройка порта RA3 на вход
while (1)
{
LATBbits.LATB15 = PORTAbits.RA2;
// установка соответствующего уровня сигнала //на RB15
LATBbits.LATB13 = PORTAbits.RA3; // установка
//соответствующего уровня //сигнала на RB15
}
}
Приложение Б
Схема алгоритма для выполнения задания 2
Рисунок Б.1 – Схема алгоритма к заданию 2
Листинг программы для выполнения задания 2:
#include <P33FJ32MC204.h>
_FOSC(OSCIOFNC_ON & POSCMD_NONE)
int main()
{
TRISBbits.TRISB15 = 0; // настройка порта RB15 на выход
TRISBbits.TRISB13 = 0; // настройка порта RB13 на выход
TRISAbits.TRISA2 = 1; // настройка порта RA2 на вход
TRISAbits.TRISA3 = 1; // настройка порта RA3 на вход
while (1)
{
if (PORTAbits.RA2 == PORTAbits.RA3)
{
LATBbits.LATB15 = 0;
LATBbits.LATB13 = 1;
}
else if (PORTAbits.RA2 == 1)
{
LATBbits.LATB15 = 0;
LATBbits.LATB13 = 0;
}
else if (PORTAbits.RA3 == 1)
{
LATBbits.LATB15 = 1;
LATBbits.LATB13 = 1;
}
}
}