Страница 1 из 1

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

Добавлено: Вс дек 01, 2013 20:24:52
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;
           } 
      }
}




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

Добавлено: Вс дек 01, 2013 20:30:59
vem566
Протеус врет при эмуляции. Сам два дня кувыркался. Собрал в железе - работает ка нужно, а в протеусе нет. Для отладки попробуй увеличить время задержки хотя бы до 200. 20мс уж очень не много.

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

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

Смотрю в протеусе пошагово .cof все идет по строчкам как нужно.

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

Добавлено: Вс дек 01, 2013 20:59:16
vem566
Ну так пошагово в протеусе и проверь. После включения порта 4 остановись на задержке и посмотри состояние портов.

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

Добавлено: Вс дек 01, 2013 22:07:55
ororoshka
vem566 писал(а):Ну так пошагово в протеусе и проверь. После включения порта 4 остановись на задержке и посмотри состояние портов.
одну ошибку уже нашел в своем коде, сейчас станет ясно, кто глючил в моей ситуации)