АТ90S2313 не слушается

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Вс сен 21, 2008 19:01:40
Откуда: Киев

Сообщение Strelok »

Привет котам!!!
Вот такой вопрос
имеется фрагмент программы для контроля состояния 8-бит шины
в программе отладки всё работает нормально а при загрузке в мк не работает ф-ция сравнения мк выполняет операцию несмотря на то что биты не совпадают а по идее выполнять не должен
если кто чего знает подскажите
void LcdStatus(void)
{
DATA_PORT=0x00;
WR=1 ;
CD=1 ;
RD=0 ;
CE=0 ;

i=LCD_STATUS;

while(1)
{
while(i==0x03) return; //Здесь он должен сравнить значения считанные с порта Б если = то возврат к основному циклу если нет то продолжаем считывать пока не будет =
LcdStatus();
}
}
Помоги ближнему своему если знаешь чем
Реклама
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

а откуда программа берет LCD_STATUS? Как она объявлена? Какой компилятор?
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)

Сообщение РадиоЛоматель »

Цикл WHILE выполняется до тех пор, пока выражение в скобках истинно, а не наоборот.

должно быть так:
while(i!=0x03)
{.....

Ляпсус однако...
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Вс сен 21, 2008 19:01:40
Откуда: Киев

Сообщение Strelok »

#define DATA_PORT DDRB
#define LCD_STATUS PINB
#define LCD_PORT PORTB
#define WR PORTD.B0
#define RD PORTD.B1
#define CE PORTD.B2
#define CD PORTD.B3
#define RS PORTD.B4
#define FS PORTD.B5


Int main(void)
{
DDRD=0xFF;

LcdStatus();
}
Помоги ближнему своему если знаешь чем
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Вс сен 21, 2008 19:01:40
Откуда: Киев

Сообщение Strelok »

mikroC PRO AVR
Помоги ближнему своему если знаешь чем
Реклама
Потрогал лапой паяльник
Сообщения: 397
Зарегистрирован: Ср сен 19, 2007 09:21:04

Сообщение chief »

может вместо

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

while(1) 
{ 
while(i==0x03) return; //Здесь он должен сравнить значения считанные с порта Б если = то возврат к основному циклу если нет то продолжаем считывать пока не будет = 
LcdStatus(); 
}
будет лучше так?

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

while(i!=0x03) i=LCD_STATUS; 
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 33
Зарегистрирован: Вс сен 21, 2008 19:01:40
Откуда: Киев

Сообщение Strelok »

Возможно.
Попробую сообщу БОЛЬШОЕ СПАСИБО ЗА ПОДСКАЗКУ
Помоги ближнему своему если знаешь чем
Мудрый кот
Аватара пользователя
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)

Сообщение РадиоЛоматель »

Напишите так:

void Lcd_Status()
{
while(1) //Ваш основной цикл
{
while(PORTB==0X03); //Ждем пока порт равен 3
}
}

Это точно будет работать.
Объяснить это можно малой глубиной стека подпрогрпамм. Поэтому я нелюблю самовызов...
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»