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

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

Добавлено: Вс фев 08, 2009 14:33:13
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();
}
}

Добавлено: Вс фев 08, 2009 19:24:07
chief
а откуда программа берет LCD_STATUS? Как она объявлена? Какой компилятор?

Добавлено: Вс фев 08, 2009 19:48:37
РадиоЛоматель
Цикл WHILE выполняется до тех пор, пока выражение в скобках истинно, а не наоборот.

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

Ляпсус однако...

Добавлено: Вс фев 08, 2009 19:50:49
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();
}

Добавлено: Вс фев 08, 2009 20:04:12
Strelok
mikroC PRO AVR

Добавлено: Вс фев 08, 2009 20:58:27
chief
может вместо

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

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

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

while(i!=0x03) i=LCD_STATUS; 

Добавлено: Вс фев 08, 2009 21:06:59
Strelok
Возможно.
Попробую сообщу БОЛЬШОЕ СПАСИБО ЗА ПОДСКАЗКУ

Добавлено: Вс фев 08, 2009 22:27:10
РадиоЛоматель
Напишите так:

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

Это точно будет работать.
Объяснить это можно малой глубиной стека подпрогрпамм. Поэтому я нелюблю самовызов...