Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
26.01.2023
Размер:
1.65 Кб
Скачать
8.	 Составьте программу, которая вводит два двоичных четырехразрядных
числа, задаваемых битами PA0-PA3 и PB0-PB3, и выводит результат в порт D:
а) арифметическую сумму чисел;
б) произведение чисел;
в) поразрядное логическое сложение;
г) поразрядное логическое умножение;
 */

#include <stdint.h>
#include <macros.h>
#include <iom8535v.h>

//Выбраная операция задается значением на порту С
#define SUM 0x01
#define MULTI 0x02
#define ORB 0x04
#define ANDB 0x08

uint8_t A, B, C, D;

void port_init(void)
{

PORTA = 0xff; //Вкл подтягивающие резисторы на порту А
DDRA = 0x00; //Порт А на вход

PORTB = 0xff; //Вкл подтягивающие резисторы на порту B
DDRB = 0x00; //Порт B на вход

//Порт С задающий выбраную операцию
PORTC = 0xff; //Вкл подтягивающие резисторы на порту C
DDRC = 0x00; //Порт C на вход

PORTD = 0x00;
DDRD = 0xff; // Порт Д на выход

}

void init_devices(void)
{
CLI();
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
SEI();

}

void get_data(void)
{
    // Получаем данные с портов, и выделяем биты 0-3
    A = PINA&0x0f;
    B = PINB&0x0f;
    C = PINC&0x0f;
}

void sum(void)
{
    D = A + B;
}

void milti(void)
{
    D = A * B;
}

void orb(void)
{
    D = A | B;
}

void andb(void)
{
    D = A & B;
}

void main(void)
{

init_devices();

while (1)
    {

    get_data();
    switch (C)
    {
    case SUM:
        sum();
        break;
    case MULTI:
        milti();
        break;
    case ORB:
        orb();
        break;
    case ANDB:
        andb();
        break;
    default:
        break;
    }
    PORTD = D;
    }
}
Соседние файлы в папке LABA1