Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVR studio проблемма с задержкой, вылетает на любой _delay_ms(10)... 
V
    Опции темы
СерегаГоляков
  Дата 11.12.2010, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Здравствуйте, написал прогу. Неработает, портится после выхода из любого  _delay_ms(10); Написал для Atmel8515
А в отладке, стрелочка пропадаает, после ДЕЛЕЯ через несколько шагов, вновь где-нибудь появляется оО
При этом вылетает:
AVR Simulator: Unsupported instruction 'call' at address 0x00071d
AVR Simulator: Unsupported instruction 'jmp' at address 0x00073a
AVR Simulator: Unsupported instruction 'call' at address 0x00015e
AVR Simulator: Unsupported instruction 'jmp' at address 0x000558


Программа выводит алфавит, а при нажатии комбинации 10111111 выводит анимации алфавита побуквенную.
 smile 
Это 2я моя прога, первая выводила кол-во нажатий, в той ниче подобного не было.

Сделал аналог на С++(может это и СИ получился), в Микрософт Вижуал Студии -> другие языки->Visual C++ ->консольное приложение.
Всё робит, выводит в консоль.

Вот прога:

Код

#include <avr/io.h>;
#include <avr/delay.h>;
 
void switch1(unsigned char inII){
            y=inII;    
            void clear1(){    //очистка матрицы
                    _delay_ms(p);
                    PORTD=0xFF;    
                    PORTB=0;
                    }
            switch(y){
                case  0x80:// А                            
                    PORTB=0b10000000;
                    PORTD=0b11100011;
                    _delay_ms(p);
                    PORTD=0x0;
                    PORTB=0xFF;
                    PORTB=0x0;
                    PORTB=0b00001000;
                    PORTD=0b11100111;
                    _delay_ms(p);
                    PORTD=0x0;
                    PORTB=0xFF;
                    PORTB=0x0;
                  PORTB=0b01111111;
                    PORTD=0b11011011;
                    _delay_ms(p);
                    PORTD=0x0;
                    PORTB=0xFF;
                    PORTB=0x0;
                    break;
                case 0x81:// Б
                    PORTB=0b10000000;
                    PORTD=0b11000011;
                    clear1();
                    PORTB=0b01100000;
                    PORTD=0b11011111;
                    clear1();
                    PORTB=0b00010001;
                    PORTD=0b11000111;
                    clear1();
                    PORTB=0b00001110;
                    PORTD=0b11011011;
                    clear1();
                    break;
                case 0x0082:// В
                    PORTB=0b10010001;
                    PORTD=0b11000111;
                    clear1();
                    PORTB=0b01101110;
                    PORTD=0b11011011;
                                 break;
                                case 0x83:// Г
                    PORTB=0b10000000;
                    PORTD=0b11000011;
                        clear1();
                    PORTB=0b01111111;
                    PORTD=0b11011111;
                    clear1();
                    break;
                default:
                    PORTB=0b10000001;
                    PORTD=0b00000000;            
                    clear1();
                    PORTB=0b01000010;
                    PORTD=0b10111101;            
                    clear1();
                    PORTB=0b00100100;
                    PORTD=0b11011011;            
                    clear1();
                    PORTB=0b00011000;
                    PORTD=0b11100111;
                    clear1();
                    PORTB=0b01111110;
                    PORTD=0b01111110;
                    clear1();
                    break;
                    }
}
unsigned char in;
unsigned char MMM=10111111;
unsigned char ASCII[42]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
 0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,
 0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,
 0x9E,0x9F, 
 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
int j=0; //итератор
unsigned char inII; 
unsigned char y;
int p=10;

void main () {     /*Буквы 32, без "ё": */

    DDRB = 0xFF; // port b - output
    PORTB = 0x00;
    PORTA=0xFF; //pull up resistors ON
    DDRD = 0xFF; // port d - output
    in=PINA;//входная комбинация
    
//    in=0b10111111;//для отладки заменим на это, чтобы в цикл FOR войти
    in=0b10000000;
    
//    in=~in;
    
    if((in/*~in*/) == (MMM)){//if((~in)&(0b10111111))==0){
        for(j=0;j<20;j ++){
            inII=ASCII[j];
            switch1(inII);
            _delay_ms(500);
            }
    }else{    
        inII=in;
        switch1(inII);//передадим и выведем одну букву.
    }    
}




Это сообщение отредактировал(а) СерегаГоляков - 11.12.2010, 13:15
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
Mazzi
Дата 12.12.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



У тебя в функции main нет бесконечного цикла. Попробуй добавить.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
СерегаГоляков
Дата 12.12.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



да это для фора ваще пофиг)
мож у мя с ОС рамс

Это сообщение отредактировал(а) СерегаГоляков - 12.12.2010, 12:45
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
UniBomb
Дата 13.12.2010, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



У меня предложенная программа даже не компилируется. Ошибок много:

1. Слишком лихо объявлять функции внутри других функций. Это касается функции clear1;
2. Функция switch1 не знает переменную y;
3. Функция clear1 и switch1 не знают переменную p;
4. Не рекомендуется использовать переменные в качестве параметра _delay_ms, ибо код от этого возрастает на порядок, что может влиять на другие участки кода;
5. После директивы #include точка с запятой не ставится;


Пока представленная программа не будет компилироваться дальше разговаривать не о чем  smile 


--------------------
PM MAIL ICQ Skype   Вверх
СерегаГоляков
  Дата 13.12.2010, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Цитата(UniBomb @ 13.12.2010,  10:49)
У меня предложенная программа даже не компилируется. Ошибок много:

1. Слишком лихо объявлять функции внутри других функций. Это касается функции clear1;
2. Функция switch1 не знает переменную y;
3. Функция clear1 и switch1 не знают переменную p;
4. Не рекомендуется использовать переменные в качестве параметра _delay_ms, ибо код от этого возрастает на порядок, что может влиять на другие участки кода;
5. После директивы #include точка с запятой не ставится;


Пока представленная программа не будет компилироваться дальше разговаривать не о чем  smile

странно у меня стоит 4.17 АВР, все компилируется, вот изменил текст, как вы и предложили, но она все равно скочит по КЕЙСАМ((
Добавил ту же частоту что и в ИСИС
 
Код

#define F_CPU 1000000L //


Код

#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 1000000L // êâàðö 1 MHz
 unsigned char ASCII[42]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
 0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,
 0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,
 0x9E,0x9F, //ÖÈÔÐÛ: 
  0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39};
int j=0; //èòåðàòîð
unsigned char inII; 
unsigned char y;
void clear1(){    //î÷èñòêà ìàòðèöû
                    _delay_ms(10);
                    PORTD=0xFF;    
                    PORTB=0;
                    }
void switch1(unsigned char inII){
            y=inII;
            switch(y){
                case  0x80:// À                            
                    PORTB=0b10000000;
                    PORTD=0b11100011;
                    clear1();
                    //delay_ms(10);
                    //PORTD=0xFF;    
                    //PORTB=0;
                    PORTB=0b00001000;
                    PORTD=0b11100111;
                    clear1();
                    PORTB=0b01111111;
                    PORTD=0b11011011;
                    clear1();
                    
                    goto end;
                case 0x81:// Á  
                    PORTB=0b10000000;
                    PORTD=0b11000011;
                    clear1();
                    PORTB=0b01100000;
                    PORTD=0b11011111;
                    clear1();
                    PORTB=0b00010001;
                    PORTD=0b11000111;
                    clear1();
                    PORTB=0b00001110;
                    PORTD=0b11011011;
                    clear1();
                    goto end;
                case 0x82:// Â
                    PORTB=0b10010001;
                    PORTD=0b11000111;
                    clear1();
                    PORTB=0b01101110;
                    PORTD=0b11011011;
                 goto end;
                case 0x83:// Ã
                    PORTB=0b10000000;
                    PORTD=0b11000011;
                    clear1();
                    PORTB=0b01111111;
                    PORTD=0b11011111;
                    clear1();
                    goto end;
                case 0x84:// Ä
                    PORTB=0b10000000;
                    PORTD=0b11110011;
                    clear1();
                    PORTB=0b01111100;
                    PORTD=0b11101011;
                    clear1();                                
                    PORTB=0b00000010;
                    PORTD=0b11000001;
                    clear1();                                
                    PORTB=0b00000001;
                    PORTD=0b11011101;
                    clear1();
                    goto end;
                
            /*    default:
                _delay_ms(1000);
                    PORTB=0b10000001;
                    PORTD=0b00000000;            
                    clear1();
                    PORTB=0b01000010;
                    PORTD=0b10111101;            
                    clear1();
                    PORTB=0b00100100;
                    PORTD=0b11011011;            
                    clear1();
                    PORTB=0b00011000;
                    PORTD=0b11100111;
                    clear1();
                    PORTB=0b01111110;
                    PORTD=0b01111110;
                    clear1();
                    goto end;*/
                    }
                    end:;
}
unsigned char in;
unsigned char MMM=0b10111111;
void main () {     /*Áóêâû 32, áåç "¸": */
    DDRB = 0xFF; // port b - output
    DDRC=0xFF;
    PORTB = 0x00;
    PORTA=0xFF; //pull up resistors ON
    DDRD = 0xFF; // port d - output
    while(1){
        in=PINA;//âõîäíàÿ êîìáèíàöèÿ
    //    in=0b10111111;//äëÿ îòëàäêè çàìåíèì íà ýòî 
    //    in=in^0xFF;
    //    in=0b10000001;
    //if((in/*~in*/) == ((int)MMM)){
    if(in==0b10111111){
//    if ((in & 0b0100000)==0) {
        //    for(j=0;j<42;j ++){
        
        while(j<42){
                inII=ASCII[j];
                j++;
            //    PORTC=PORTD;
            switch1(inII);
                _delay_ms(500);
                }
        j=0;
    }else{    
            inII=in;
            switch1(inII);//ïåðåäàäèì è âûâåäåì îäíó áóêâó.
        }    
    }
}







комментарии в коде те же)
Приложил файлик с проектом в ИСИС

Это сообщение отредактировал(а) СерегаГоляков - 13.12.2010, 17:12

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  ISIS.rar 13,43 Kb
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
Mazzi
Дата 13.12.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Правильный
**


Профиль
Группа: Комодератор
Сообщений: 825
Регистрация: 3.4.2003

Репутация: 9
Всего: 21



Из swich выход по goto это бред. Ставьте в конце каждого case оператор break.  И будет вам счастье.


--------------------
Мне нужны помощники.
PM MAIL WWW   Вверх
СерегаГоляков
Дата 13.12.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Цитата(Mazzi @ 13.12.2010,  19:05)
Из swich выход по goto это бред. Ставьте в конце каждого case оператор break.  И будет вам счастье.

я думал мож ГОТО поможет, но нет, знаю что бреаке надо. Истина то не в этом, прыгает то не из за этого по любым кейсам
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
UniBomb
Дата 14.12.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Подправил немного форматирование и исправил пару мелких недочётов. СерегаГоляков, старайтесь придерживаться какого-нибудь стиля форматирования, ибо такие программы читать сложно, да и неохота 

Код

#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 1000000L
//---------------------------------------------------------------------------
unsigned char ASCII[42]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
                          0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93,
                          0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,
                          0x9E,0x9F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
                          0x38,0x39 };
//---------------------------------------------------------------------------
void clear1()
{
    _delay_ms(10);
    PORTD=0xFF;    
    PORTB=0;
}
//---------------------------------------------------------------------------
void switch1(unsigned char inII)
{
    switch(inII)
    {
        case  0x80:// A                            
            PORTB=0b10000000;
            PORTD=0b11100011;
            clear1();
            //delay_ms(10);
            //PORTD=0xFF;    
            //PORTB=0;
            PORTB=0b00001000;
            PORTD=0b11100111;
            clear1();
            PORTB=0b01111111;
            PORTD=0b11011011;
            clear1();
        break;
        case 0x81:// A  
            PORTB=0b10000000;
            PORTD=0b11000011;
            clear1();
            PORTB=0b01100000;
            PORTD=0b11011111;
            clear1();
            PORTB=0b00010001;
            PORTD=0b11000111;
            clear1();
            PORTB=0b00001110;
            PORTD=0b11011011;
            clear1();
        break;
        case 0x82:// A
            PORTB=0b10010001;
            PORTD=0b11000111;
            clear1();
            PORTB=0b01101110;
            PORTD=0b11011011;
        break;
        case 0x83:// A
            PORTB=0b10000000;
            PORTD=0b11000011;
            clear1();
            PORTB=0b01111111;
            PORTD=0b11011111;
            clear1();
        break;
        case 0x84:// A
            PORTB=0b10000000;
            PORTD=0b11110011;
            clear1();
            PORTB=0b01111100;
            PORTD=0b11101011;
            clear1();                                
            PORTB=0b00000010;
            PORTD=0b11000001;
            clear1();                                
            PORTB=0b00000001;
            PORTD=0b11011101;
            clear1();
        break;
        /*default:
            _delay_ms(1000);
            PORTB=0b10000001;
            PORTD=0b00000000;            
            clear1();
            PORTB=0b01000010;
            PORTD=0b10111101;            
            clear1();
            PORTB=0b00100100;
            PORTD=0b11011011;            
            clear1();
            PORTB=0b00011000;
            PORTD=0b11100111;
            clear1();
            PORTB=0b01111110;
            PORTD=0b01111110;
            clear1();
        break;*/
    }
}
//---------------------------------------------------------------------------
void main ()
{
    uint8_t j;
    uint8_t in;
    DDRB = 0xFF; // port b - output
    DDRC=0xFF;
    PORTB = 0x00;
    PORTA=0xFF; //pull up resistors ON
    DDRD = 0xFF; // port d - output
    while(1)
    {
        in=PINA;
        if(in==0b10111111)
        {
            for(j = 0; j < 42; ++j)
            {
                switch1(ASCII[j]);
                _delay_ms(500);
            }
        }
        else
        {    
            switch1(in);
        }    
    }
}




Побегал я в дебагере и ничего в общем то странного не обнаружил. Программа выполняет то, что в ней написано, все ветки switch-case выполняются, ничто никуда не прыгает. Так в чём проблема то?

Это сообщение отредактировал(а) UniBomb - 14.12.2010, 09:33


--------------------
PM MAIL ICQ Skype   Вверх
СерегаГоляков
Дата 16.12.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Добрый вечер, заметил, что перескакивает она в те строки, где указаны те же значения для портов, например из строки PORTD=0b0000000, можежет перескакнуть ТОЛЬКО в строку если в ней написано именно тоже, т.е. скакнет в строку PORTD=0b0000000 но уже из другого кейса  
Кстати и в анимации скачет тоже, но почему-то выводит на матрицу.
Если в ИСИС 7 пошагово выполнять отладку, и выводить только букву А(где PINA=0b10000000) без анимации всего алфавита, то она даже не начинает рисовать ту часть буквы, которую могла бы нарисовать перед перескоком.
--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1149 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.