Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР. |
01.01.2007, 21:26
|
#1
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
AVR IAR v4.20 проблема с отработкой условия
В программе определяю переменную - (пробовал и в области ОЗУ и в регистр - r15). При инициализации задаю ей значение и по приему байта, сбрасвыаю в 0. Как только в этой переменной 0 мне необходимо продолжить выполнение программы. Проблема состоит в следующем: если обнулять переменную в обработке прерывания, то из цикла выйти не получается, если обнулить эту переменную перед циклом, то проверка выполняется правильно и программа выполняется далее.
Странность поведения в том, что симуляция в AVRStudio отрабатывает номрально, отладка с JTAG тоже отрабатывает правильно, а в простом режиме работы МК, не выходит из цикла.
Вот часть программы:
Код:
|
char flags;
int main()
{
//инициализация портов и USART
flags=0xff;
while (flags!=0x00){}; // вот из этого
//цикла не могу выйти
while(1){};
}
//инициализация по прерыванию RXC
#pragma vector=USART_RXC_vect
static __interrupt void TX_compl(void)
{
char tUDR;
tUDR=UDR;
UDR=tUDR; //выдаю обратно в порт, чтобы контролировать
flags=0x00;
} |
|
|
|
|
01.01.2007, 22:00
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
попробуйте добавить модификатор
volatil перед flags
avr123.nm.ru/05a.htm
и while (flags!=0x00){};
можно проще написать:
while(flags);
и всё.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
02.01.2007, 14:29
|
#3
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
попробуйте добавить модификатор
volatil перед flags
|
к сожалению не помогло
Сообщение от avr123-nm-ru
|
и while (flags!=0x00){};
можно проще написать:
while(flags);
|
Спасибо, но тут это не важно. Т.к. в дальнейшем необходимо проверку по битам делать.
Если кому не трудно, выкладываю весь проект. Посмотрите пожалуйста. Несколько дней эксперементирую, просмотрел несколько готовых проектов, выкачанных из инета, не могу найти проблему.
Прикрепленный файл: 5626518.rar
|
|
|
|
02.01.2007, 19:28
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
у меня IAR нет. сделай .HEX пожалуйста. какой МК ?
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
02.01.2007, 19:59
|
#5
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
у меня IAR нет. сделай .HEX пожалуйста. какой МК ?
|
там под m16, под какой тебе скомпилить?
|
|
|
|
02.01.2007, 22:17
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
m16 давай.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
04.01.2007, 16:01
|
#7
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
m16 давай.
|
Вот hex, программа немного отличается от той, которая в предыдущих постах.
Код:
|
#include "ioavr.h"
#include "inavr.h"
//#define CPU 4000000
//#define BAUD 9600
//#define UBRR CPU/((16*BAUD)-1)
#define UBRR 12 //19200
//#define UBRR 25 //9600
////////////////
//__regvar __no_init char flags @ 15;
volatile char flags;
void UART_Start_Transmit(void);
//------------------------------------------------------------------------------
void UART_init(void)
{
UBRRL = UBRR;
//разрешение прерываний по приему и отправке
UCSRB = ((1‹‹RXCIE)|(1‹‹RXEN));
//UCSRB = ((1‹‹TXCIE)|(1‹‹RXCIE)|(1‹‹TXEN)|(1‹‹RXEN));
// передача и прием по 8 бит, 1 стоповый
UCSRC = ((1‹‹URSEL)|(1‹‹UCSZ1)|(1‹‹UCSZ0));
}
//------------------------------------------------------------------------------
// UART Transmit Compleate Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector=USART_TXC_vect
static __interrupt void TX_compl(void)
{
PORTA=0x30;
flags=0x00;
__delay_cycles(3000000);
PORTA=0x70;
__delay_cycles(3000000);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// UART Receive Compleate Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector=USART_RXC_vect
static __interrupt void RX_compl(void)
{
unsigned char tUDR;
tUDR = UDR;
PORTA = tUDR;
//UDR=tUDR;
flags=0x30;
PORTA=0x10;
__delay_cycles(1000000);
}
//------------------------------------------------------------------------------
int main()
{
DDRA=0xff;
PORTA=0x10;
__delay_cycles(2000000);
PORTA=0x20;
__delay_cycles(2000000);
PORTA=0x30;
__delay_cycles(2000000);
PORTA=0x40;
__delay_cycles(2000000);
PORTA=0x50;
UART_init();
__enable_interrupt();
UDR='R';
flags=0xf0;
PORTA=0x10;
while (flags)
{
PORTA=flags;
}
__delay_cycles(3000000);
PORTA=0xfC;
__delay_cycles(3000000);
while (1) //permanent cycle
{
DDRA=0xFF;
PORTA--;
}
} |
Прикрепленный файл: 5273460.rar
|
|
|
|
04.01.2007, 17:54
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
а как прога может попасть в
while (flags)
если она зациклена в
while (1)
... а ???
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
04.01.2007, 19:23
|
#9
|
Прописка
Регистрация: 11.01.2005
Сообщений: 196
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
а как прога может попасть в
while (flags)
если она зациклена в
while (1)
... а ???
|
В последовательности while (flags) раньше и на while (1) никак не попасть не выполнив while (flags). Или я где-то что-то не понимаю!?
|
|
|
|
04.01.2007, 19:53
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
подробно о прерываниях на - avr123.nm.ru/03.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
IAR for AVR
|
kassiopay |
Микроконтроллеры, АЦП, память и т.д |
5 |
27.03.2009 17:20 |
IAR AVR 5.11B Wanted
|
Kabron |
Микроконтроллеры, АЦП, память и т.д |
30 |
08.02.2009 01:43 |
IAR for AVR & Assembler
|
GLVlad |
Микроконтроллеры, АЦП, память и т.д |
3 |
04.06.2008 16:46 |
IAR for AVR
|
vasilij-kursikov |
Микроконтроллеры, АЦП, память и т.д |
29 |
28.09.2006 18:14 |
[Решено] Ошибка в IAR C for AVR
|
Lean |
Коллекция глюков |
0 |
15.05.2003 10:34 |
Часовой пояс GMT +4, время: 22:14.
|
|