@icenoon

В чем проблема в коде?

#include <mega8.h>
#include <delay.h>

int z=0;

void main(void)
{
    DDRB = 0b0000000;
    PORTB = 0b0000001;
    
    DDRD = 0b0000111;
    PORTD = 0b0000000;
    
    
    while (1)
    {   
        if (PINB==0b0000000)
        {   
            
            TCCR0 = 0b00000101; 
            TCNT0 = 0
            
            while (z < 21) 
            {   
                if (TCNT0 == 255) 
                {
                    z++;    
                };
    
            };
            
            TCNT0 = 0;
            TCCR0 = 0b00000000;
            PORTD=0b00000111;
            _delay_ms(1000)
        };
        
        if (PINB==0b0000001)
        {
            PORTD=0b00000000;  
        };
    };
};


5ee02a9128b1b889855504.png

Короче порт b0 на ввод с подтягивалкой , порты d 3 штука на выход , обяьвляю это , потом в беск цикл , обьявил частоту нулевого таймера платки , обнулил его ячейку памяти , и пока z не сделаетется в 1024/1000000*255*20 секунд ждем , потом обнуляем таймер на всякий , вдруг потом юзать будем ниже по коду , зажигаем 3 светоидиота и усе по сути

Русским языком говоря , нажал кнопку подождал примерно 5.2 с загорелись лампочки на 1000 мс проверили что ты уже отпустил кнопку и потухли )

Код не работает в протеусе и сыплет ошибками , искал ошибку в инете и ничего зазорного в коде не нашел
5ee02cccbabc2857932180.png
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
пока z не сделаетется в 1024/1000000*255*20 секунд ждем
while (z < 21) 
{   
    if (TCNT0 == 255) 
    {
        z++;    
    };
};

Русским языком говоря , нажал кнопку подождал примерно 5.2 с

Не, ты тут подождал какое-то другое время. Потому что если в таймер заходит clkio/1024, то TCNT будет равен 255 далеко не один цикл.

Код не работает в протеусе и сыплет ошибками

Ну так он же пишет тебе адрес, PC=0x005e, посмотри что по этому адресу происходит.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Едрить, английским по белому написано в чем проблема :) Запись в область памяти по адресу ... вне выделенной области. Область или мала или указатель неверно выставлен.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы