Всем приветик! Занимаюсь написанием лазертака на асемблере, возникла такая проблема, необходимо написать код на единице управления, сделал кодик но в схеме протеуса начинает сама по себе работать в произвольном режиме, хотя должна работать при нажатии на кнопку, у меня кнопка выполняет функцию как фотодиод.
Ломаю голову не понимаю как правильно сделать в коде, при 0 управления все хорошо, когда ставлю единицу управления работает в произвольном режиме, кто знает как исправить данную проблему если не трудно то помогите, сам код и что в протеусе прикреплю ниже. Заранее спасибо огромное!!) рёв в три ручья Замешательство
#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>
// Глобальная переменная для хранения текущего индекса массива
int a = 0;
// Массив значений для вывода на PORTB
int dd[10] = {
0b00000000, 0b00000001, 0b00010010, 0b00010011, 0b00100100,
0b00100101, 0b00110110, 0b00110111, 0b01001000, 0b01001001,
};
int main(void) {
// Настройка PORTC как вход (0x00)
DDRC = 0x00;
// Настройка PORTB как выход (0xff)
DDRB = 0xff;
// Настройка PORTD как выход (0xff) для управления единицей асамбер
DDRD = 0xff;
// Включение подтягивающего резистора на PINC0
PORTC = 0b00000001;
while (1) {
// Вывод значения из массива dd на PORTB
PORTB = dd[a];
// Проверка нажатия кнопки на PINC0
if (0!= (PINC & (1 << 0))) {
// Увеличение индекса массива
a++;
// Задержка для избежания дребезга контактов
_delay_ms(1000);
// Сброс индекса, если он выходит за границы массива
if (a > 9) a = 0;
}
// Управление выводами PORTC в зависимости от значения a
if (a < 5) {
PORTC &= ~(1 << 2); // Выключение PC2
PORTC |= (1 << 3); // Включение PC3
PORTD |= (1 << 0); // Включение PD0 (управление единицей асамбер)
}
if (a > 4 && a <= 8) {
PORTC &= ~(1 << 3); // Выключение PC3
PORTC |= (1 << 1); // Включение PC1
PORTD &= ~(1 << 0); // Выключение PD0
}
if (a > 8) {
PORTC |= (1 << 2); // Включение PC2
PORTC &= ~(1 << 1); // Выключение PC1
PORTD |= (1 << 1); // Включение PD1 (возможно, другое управление асамбером)
}
}