Необходима помощь в отладке простой программы.

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Пт май 24, 2013 17:04:07

Сообщение ororoshka »

Помогите найти проблему. Можно сказать, что это моя первая разработка устройства с микроконтроллером.

Моя задача:
При нажатии кнопки:
- зажечь порт PORTB.4,
- после 20 мс
- зажечь порт PORTB.3,
- подождать 20 мс
- выключить PORTB.4.

При последующем нажатии кнопки:
- зажечь порт PORTB.4,
- после 20 мс
- потушить порт PORTB.3,
- подождать 20 мс
- выключить PORTB.4.


Проблема: код работает, но порядок срабатывания портов в Proteus отличается. Вместо PORTB.4, первым зажигается PORTB.3, хотя по коду этого не должно происходить.

Изображение

Код: Выделить всё


#include <tiny13.h>
#include <delay.h>
bit val=0;
bit old_val=0;
bit state=0;
bit mute=0;

// Declare your global variables here

void main(void)
{

DDRB=0b00011110;
PORTB=0b00100001;


while (1) {
     val = PINB.0;
     delay_ms(10);
      
      if ((val == 0 && old_val == 0)) 
      {state = ~state;}
      old_val = ~val; 
           
           if (state == 1) {    
           PORTB.4 = 1; 
           delay_ms(20);
           PORTB.3 = 1; 
           delay_ms(20);
           
            if (mute == 1) {
            PORTB.4 = 0; 
            } 
            
            mute=0;
           } 
           
           
           else {
           PORTB.4 = 1; 
           delay_ms(20);
           PORTB.3 = 0; 
           delay_ms(20);
           
            if (mute == 0) {
            PORTB.4 = 0;  
            }  
            
            mute=1;
           } 
      }
}



Реклама
Друг Кота
Аватара пользователя
Сообщения: 4750
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Протеус врет при эмуляции. Сам два дня кувыркался. Собрал в железе - работает ка нужно, а в протеусе нет. Для отладки попробуй увеличить время задержки хотя бы до 200. 20мс уж очень не много.
Реклама
Родился
Сообщения: 17
Зарегистрирован: Пт май 24, 2013 17:04:07

Сообщение ororoshka »

vem566 писал(а):Протеус врет при эмуляции. Сам два дня кувыркался. Собрал в железе - работает ка нужно, а в протеусе нет. Для отладки попробуй увеличить время задержки хотя бы до 200. 20мс уж очень не много.
Ставил 200, уже даже пошла игра с задержками в различных местах по коду). Убираю задержки два фронта стартуют одновременно как нужно, ставлю задержки PORTB.3 всегда лезет вперед. Не могу понять или я код не верно написал или протеус врет.

Смотрю в протеусе пошагово .cof все идет по строчкам как нужно.
Друг Кота
Аватара пользователя
Сообщения: 4750
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Сообщение vem566 »

Ну так пошагово в протеусе и проверь. После включения порта 4 остановись на задержке и посмотри состояние портов.
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 17
Зарегистрирован: Пт май 24, 2013 17:04:07

Сообщение ororoshka »

vem566 писал(а):Ну так пошагово в протеусе и проверь. После включения порта 4 остановись на задержке и посмотри состояние портов.
одну ошибку уже нашел в своем коде, сейчас станет ясно, кто глючил в моей ситуации)
Реклама
Ответить

Вернуться в «AVR»