На камне STM8S105C6 данный код работает прекрасно, вывод всего что нужно на нем можно реализовать, но при заливке его же на STM8S003K3 получилось что DB4 никаких признаков жизни не проявляет, попробовал перенаправить на другую ногу тоже ноль эмоций. Потом опять перешил на 105 и там всё тоже самое, при переопределении ничего не показывает.
Прогать только начинаю и к сожалению примеров не нашёл практически на IAR под STM8
Буду благодарен за любую помощь.
Код: Выделить всё
#include "iostm8s105c6.h"
#define RS PD_ODR_bit.ODR7//0-запись команд, 1-запись данных сигнал RD
#define E PD_ODR_bit.ODR5//Ввод данных по спадающему фронту сигнал Е
#define DB4 PD_ODR_bit.ODR6//Определение линий 4-х битного интерфейса DB4
#define DB5 PD_ODR_bit.ODR4//Определение линий 4-х битного интерфейса DB5
#define DB6 PD_ODR_bit.ODR2//Определение линий 4-х битного интерфейса DB6
#define DB7 PD_ODR_bit.ODR0//Определение линий 4-х битного интерфейса DB7
//*****************************************************************************
char time=30;//Базовая задержка времени для LCD(зависит от тактовой частоты MCU)
//*****************************************************************************
void delay(int a)//Функция задержки
{int cnt;
for (cnt=a; cnt>0; cnt--);
}
//*****************************************************************************
void lcd(char d)//Функция записи команд/данных в LCD
{E=1;
DB7=(d&0x80)>>7;//Выводим старший ниббл
DB6=(d&0x40)>>6;
DB5=(d&0x20)>>5;
DB4=(d&0x10)>>4;
delay(time);//Задержка
E=0;//Запись
delay(time);//Задержка
E=1;//enable = 1
DB7=(d&0x08)>>3;//Выводим младший ниббл
DB6=(d&0x04)>>2;
DB5=(d&0x02)>>1;
DB4=(d&0x01);
delay(time);//Задержка
E=0;//Запись
delay(time);//Пауза для выполнения команды
}
//*****************************************************************************
void lcd_com(char c)//Фунция записи команд в LCD
{RS=0;//Режим записи "Команды"
lcd(c);//Запись
}
//*****************************************************************************
void lcd_putchar(char d)//Функция записи данных в LCD
{RS=1;//Режим записи "Данные"
lcd(d);//Запись
}
//*****************************************************************************
void lcd_clear(void)//Функция очистки LCD
{lcd_com(0x01); delay(time*100);//Очистка LCD
}
//*****************************************************************************
void lcd_init(void)//Функция инициализации LCD
{delay(time*10);//Предварительная задержка
lcd_com(0x33); delay(time*50);//Подготовка
lcd_com(0x32); lcd_com(0x28);//4 бита, 2 строки
lcd_com(0x08);//Выключение LCD
lcd_clear();//Очистка LCD
lcd_com(0x06);//Сдвиг курсора вправо
lcd_com(0x0C);//Включение без курсора
delay(time);//Пауза для выполнения команды
}
//*****************************************************************************
void lcd_putsf(char *_str)//Функция вывода строки на LCD
{char data;
while (*_str) {data=*_str++; lcd_putchar(data);}
}
//*****************************************************************************
void lcd_gotoxy(char x, char y)//Функция перехода в указанную позицию
{lcd_com((0x80+y*64)+x);//Рассчет позиции. Ячейка 0х80 - лев. верхн. угол
}
//*****************************************************************************
//*****************************************************************************
// Основная программа
int main( void )
{ //Настройка портов ввода/вывода
PD_DDR_bit.DDR7=1;//Настройка сигнала RS бит 7 порта D на вывод
PD_CR1_bit.C17=1;//Установка регистра CR1 бит 7 порта D как "двухтактный выход"(см. Datasheet)
PD_DDR_bit.DDR5=1;//Настройка сигнала Е бит 5 порта D на вывод
PD_CR1_bit.C15=1;//Установка регистра CR1 бит 5 порта D как "двухтактный выход"(см. Datasheet)
PD_DDR_bit.DDR6=1;//Настройка сигнала DB4 бит 6 порта D на вывод
PD_CR1_bit.C16=1;//Установка регистра CR1 бит 6 порта D как "двухтактный выход"(см. Datasheet)
PD_DDR_bit.DDR4=1;//Настройка сигнала DB5 бит 4 порта D на вывод
PD_CR1_bit.C14=1;//Установка регистра CR1 бит 4 порта D как "двухтактный выход"(см. Datasheet)
PD_DDR_bit.DDR2=1;//Настройка сигнала DB5 бит 2 порта D на вывод
PD_CR1_bit.C12=1;//Установка регистра CR1 бит 2 порта D как "двухтактный выход"(см. Datasheet)
PD_DDR_bit.DDR0=1;//Настройка сигнала DB6 бит 0 порта D на вывод
PD_CR1_bit.C10=1;//Установка регистра CR1 бит 0 порта D как "двухтактный выход"(см. Datasheet)
//*****************************************************************************
lcd_init();
lcd_gotoxy(2,0);//Переходим в позицию LCD x=2, y=0
lcd_putsf("QWERTY");//Вывод на дисплей текста
lcd_gotoxy(2,1);//Переходим в позицию LCD x=0, y=0
lcd_putsf("100.5");//Вывод на дисплей текста
lcd_gotoxy(8,1);//Переходим в позицию LCD x=0, y=0
lcd_putsf("50");//Вывод на дисплей текста
while(1)
{
}
}
