Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratorny_praktikum_chast_4_A5_dorabotanny.docx
Скачиваний:
122
Добавлен:
13.02.2016
Размер:
4.75 Mб
Скачать

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

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

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

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

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

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

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

1. 5 Листинг программы для создания проекта 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;

}

}

1.6 Листинг программы для создания проекта 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;

}

}

}

1.7 Листинг программы для создания проекта 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;

}

}

}