@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 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Едрить, английским по белому написано в чем проблема :) Запись в область памяти по адресу ... вне выделенной области. Область или мала или указатель неверно выставлен.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час
21 нояб. 2024, в 21:42
100000 руб./за проект