mMMdhhdjd
Новенький
Offline
|
 |
« : 28-02-2025 19:45 »  |
|
Всем приветик! Занимаюсь написанием лазертака на асемблере, возникла такая проблема, необходимо написать код на единице управления, сделал кодик но в схеме протеуса начинает сама по себе работать в произвольном режиме, хотя должна работать при нажатии на кнопку, у меня кнопка выполняет функцию как фотодиод. Ломаю голову не понимаю как правильно сделать в коде, при 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 (возможно, другое управление асамбером) } }
|