Схема электрическая принципиальная к лабораторной работе

Для ввода дискретной информации в микроконтроллер широко применяются различные переключатели, кнопки и клавиатуры, либо иные дискретные датчики.

Дискретными выходами микроконтроллер управляет различными исполнительными устройствами, работающими по принципу включено/выключено.

На рисунке 20.17 приведена схема электрическая принципиальная к лабораторной работе.

Рисунок 20.17 – Схема электрическая принципиальная

В схеме два дискретных датчика оформлены в виде двух переключателей SA1 и SA2, подключенных к выводам RA2 и RA3 микроконтроллера.

Два дискретных выхода оформлены в виде двух светодиодов VD1 и VD2, подключенных к выводам RB15 и RB13 микроконтроллера соответственно.

Листинг программы для создания проекта LR20_1

#include <P33FJ32MC204.h>

#define FOSC 7370000

#define FCY (FOSC / 2) // Настройка частоты выполнения

// инструкций

_FOSCSEL(FNOSC_FRC) // Настройка работы микроконтроллера

// от внутреннего тактового генератора

void main()

{

TRISBbits.TRISB15 = 0; // Выход VD1 (RB15)

while (1)

{

__delay32(FCY); // Организация временной задержки

LATBbits.LATB15 = 1;

__delay32(FCY);

LATBbits.LATB15 = 0;

}

}

Листинг программы для создания проекта LR20_2

#include <P33FJ32MC204.h>

_FOSCSEL(FNOSC_FRC) // Настройка работы микроконтроллера

// от внутреннего тактового генератора

// Инициализация таймера T1

void Init_Timer1()

{

T1CON = 0; // Сброс таймера

IFS0bits.T1IF = 0; // Сброс флага прерывания таймера

IEC0bits.T1IE = 1; // Разрешение прерывания от таймера

TMR1 = 0x0000; // Обнуление текущего значения таймера

PR1 = 0x0E65; // Задание периода таймера

T1CONbits.TON = 1; // Разрешение работы таймера и его

// Запуск

}

int _ms = 0;

void __attribute__((interrupt, no_auto_psv)) _T1Interrupt()

// Прерывание таймера T1 по совпадению

{

_ms++;

IFS0bits.T1IF = 0; // Сброс флага прерывания таймера

TMR1 = 0; // Перезапуск таймера

}

void main()

{

Init_Timer1();

TRISBbits.TRISB15 = 0; // Выход VD1 (RB15)

while (1)

{

if (_ms < 1000)

{

LATBbits.LATB15 = 0;

}

else if (_ms < 2000)

{

LATBbits.LATB15 = 1;

}

else

{

_ms = 0;

}

}

}

Листинг программы для создания проекта LR20_3

#include <p33fj32mc204.h>

#define FOSC 7370000

#define FCY (FOSC/2)

_FOSC(OSCIOFNC_ON & POSCMD_NONE)//Отключение дополнительной

// функции порта RA2 – выход

// тактирующего сигнала

// внутреннего генератора

_FOSCSEL(FNOSC_FRC) // Настройка работы от

// внутреннего тактового

// генератора

void __delay32(unsigned long cycles);

int main()

{

TRISBbits.TRISB15 = 0; // Выход VD1

TRISBbits.TRISB13 = 0; // Выход VD2

TRISAbits.TRISA2 = 1; // Вход SA1

TRISAbits.TRISA3 = 1; // вход SA2

while (1)

{

if (PORTAbits.RA2 == 1 && PORTAbits.RA3 == 1)//Если тумблеры

//SA1 и SA2

//одновременно

//включены

{

__delay32(FCY);

LATBbits.LATB15 = 1;

LATBbits.LATB13 = 0;

__delay32(FCY);

LATBbits.LATB15 = 0;

LATBbits.LATB13 = 1;

}

else

{

LATBbits.LATB15 = 0;

LATBbits.LATB13 = 0;

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: