Добавил:
Andrejjavd
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Примеры решения лабораторных работ / LABA1 / 1_8
.txt8. Составьте программу, которая вводит два двоичных четырехразрядных
числа, задаваемых битами 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;
}
}