Вот достался МЭЛТовский ЖК, написал по даташиту програмку, да вот чтото она не работает.
Пожалуйста подскажите что не так в программе.
#include <mega8535.h>
// частота кристалла [Гц]
#define xtal 16000000
// глобальные переменные
unsigned int F1;
//unsigned char RW;
init_LCD(); wait20m(); wait40(); writedata4(unsigned char data); writecode4(unsigned char code); wait1();
// основная программа
void main(void)
{
// локальные переменные
DDRB=0xff; //порт B как выход
PORTB=0X00;
DDRA=0xff; //порт A как выход тест
PORTA=0X00;//тест
#asm("sei"); // разрешение глобальных прерываний (установка бита 07 SREG)
PORTA.0=1; //тест
init_LCD(); // инициализация LCD
PORTA.5=1; //тест
writecode4(0x80+0x40);
PORTA.6=1; //тест
writedata4(0x32);
PORTA.7=1; //тест
while (1);
}
init_LCD(void)
{
PORTA.1=1; //тест
wait20m();
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.2=1; //тест
PORTB=0x03; // установить разрядность интерфейса
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x02; // установить4-х разрядн интерфейс
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.3=1; //тест
PORTB=0x02; // установить4-х разрядн интерфейс и выбор второй кодовой страницы (Windows-1251)
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x0A; // установить4-х разрядн интерфейс и выбор второй кодовой страницы (Windows-1251)
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x00; // установка параметров индикатора
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x08; // установка параметров индикатора
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTB=0x00; // очистка дисплея
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x01; // очистка дисплея
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
PORTA.4=1; //тест
//PORTB=0x00; // очистка дисплея
//PORTB.6=1; // установить Е=1 - строб импульс
//wait1();
//PORTB.6=0; // установить Е=0
//PORTB=0x01; // очистка дисплея
//PORTB.6=1; // установить Е=1 - строб импульс
wait1();
//PORTB.6=0; // установить Е=0
//wait40();
wait20m();
PORTB=0x00; // установка режима ввода данных
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
PORTB=0x06; // очистка дисплея
wait1();
PORTB.6=1; // установка режима ввода данных
wait1();
PORTB.6=0; // установить Е=0
wait40();
}
wait20m(void) //задержка на 20 мс
{
F1=0x49f0;
while (F1>0) {--F1;};
}
wait40(void)//задержка на 40 мс
{
F1=55;
while (F1>0) {--F1;};
}
writedata4(unsigned char data)
{
//data=(data>>4)|(data<<4);
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=data&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=data&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
/* Пример:
Правильное использование параметров
void change (int *x, int *y)
{ int k=*x;
*x=*y;
*y=k;
}
При вызове такой функции в качестве фактических параметров должны быть использованы не значения переменных, а их адреса
change (&a,&b);
*/
}
writecode4(unsigned char code)
{
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=code&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
#asm
LD R30,Y
SWAP R30
ST Y,R30
#endasm
PORTB=code&0xBF;//вывожу в порт данные, BF для того чтобы не трогать строб Е
PORTB.5=0; //устанавливаю R/W=0
PORTB.4=0;//устанавливаю A0=0
wait1();
PORTB.6=1; // установить Е=1 - строб импульс
wait1();
PORTB.6=0; // установить Е=0
wait40();
}
wait1(void) //задержка на переключ
{
F1=0x04;
while (F1>0) {--F1;};
}