Отчёт по лабораторной работе по «Микроконтроллеры и МП в СУ»
Автор: Дмитрий Васильевич Назимов • Январь 18, 2019 • Лабораторная работа • 1,086 Слов (5 Страниц) • 497 Просмотры
Министерство науки и высшего образования Российской Федерации
Федеральное государственное автономное образовательное учреждение
высшего образования
«Южно-Уральский государственный университет
(Национальный исследовательский университет)»
Отчёт
по лабораторной работе №1
по дисциплине: «Микроконтроллеры и МП в СУ»
Выполнили: Студенты группы МиЭт-598 ______________Демина А.А. ___________Сальников А.С. _____________Суворин А.В. «___»________2019 г. Проверил: ___________ Вставская Е.В. «___»________2019 г. |
Челябинск 2019
ЗНАКОМСТВО С ПОРТАМИ ВВОДА-ВЫВОДА
Цель работы:
Составить программы цифрового ввода-вывода на языке Си и проверить их работу на лабораторном стенде.
Задание 1. Наберите программу «Пример 1» и выполните все этапы составления
программы. Проверьте правильность исполнения программы на контроллере.
Листинг:
#include
#include
void port_init(void) //определение функции инициализации портов ввода/вывода
{
PORTA = 0xFF;
DDRA = 0x00; // порт А работает на вход (DDRA=0000 0000)
PORTD = 0x00; // запись в порт D нулевого значения
DDRD = 0xFF; // порт D работает на выход (DDRD=1111 1111)
}
void init_devices(void) // инициализация периферийных устройств
{
__disable_interrupt(); // запрет действия прерываний
port_init(); // вызов функции инициализации портов
MCUCR = 0x00;
TIMSK = 0x00; // нет прерываний от таймера
__enable_interrupt(); // разрешение действия прерываний
}
void main(void) // определение главной функции
{
init_devices(); // вызов функции
while(1) // создание бесконечного цикла работы
{
if((PINA&4)!=0) // если 2 бит на входе порта А отличен от нуля (PINA=0000 0100)
PORTD=0xF0; // то на выходе PORTD=llll 0000
else // иначе
PORTD=0x0F; // PORTD=0000 1111
}
}
Схема:
[pic 1]
Задание 2. Измените эту программу следующим образом: входной сигнал – PB0,
выходной порт – порт C. В исходном состоянии при PB0 = 0 на выходе порта C
включены два младших светодиода, при включении бита PB0 = 1 включаются два
старших разряда.
Листинг:
void port_init(void) {
PORTB = 0xFF;
DDRB = 0x00;
PORTC = 0x03;
DDRC = 0xFF;
}
void init_devices(void) {
__disable_interrupt();
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
__enable_interrupt();
}
int main(){
init_devices();
while(1){
if((PINB&1) != 0) {
PORTC = 0xC0;
}
else {
PORTC = 0x03;
}
}
}
Схема:
[pic 2]
Задание 3. В программе «Пример 2» уменьшите в 2 раза время задержки между
переключениями битов.
Листинг:
#include
#include
void port_init(void) {
PORTB = 0xFF;
DDRB = 0x00;
PORTC = 0x03;
DDRC = 0xFF;
}
void init_devices(void) {
__disable_interrupt();
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
__enable_interrupt();
}
int main(){
init_devices();
while(1){
if((PINB&1) != 0) {
PORTC = 0xC0;
}
else {
PORTC = 0x03;
}
}
}
Схема:
[pic 3]
Задание 4. Реализуйте «бегущий огонь с накоплением», а именно: вначале загорается бит PD0, затем к нему добавляется PD1 и т.д. до тех пор, пока не загорятся все светодиоды порта D, далее цикл повторяется.
Листинг:
#include
#include
void port_init(void)
{
PORTD = 0x01;
DDRD = 0xFF;
...