|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:11 am
|
Страница 1 от 1
|
[ 5 мнения ] |
|
Проблем с ks0066u 2х16 и CCS компилатор?
| Автор |
Съобщение |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
 Проблем с ks0066u 2х16 и CCS компилатор?
Странно нещо се случва с ЛСД-то. На асемблер имам десетки програми , които използват почти всичките функции на дисплея и всичко върви добре. Но при писане на инициализацията на дисплея на С компилатор едва го докарах да потегли на едноредов режим , двуредов въобще не ще:x и не мога да си обясня какво става? Ето и сорса:
Режима е 4-битов , RB7-RB4-Data, RB1=RS, RB3=E
#define LCD_STROBE ((PORTB.F3 = 1),(PORTB.F3 = 0))
/* write a byte to the LCD in 4 bit mode */
void LCD_write(unsigned char c)
{
PORTB = c*0xF0;
LCD_STROBE;
PORTB = c << 4;
PORTB = PORTB*0xF0;
LCD_STROBE;
Delay_us(50);
}
/* Go to the specified position */
void LCD_goto(unsigned char pos)
{
PORTB.F1 = 0; // RS control byte
LCD_write(0x80+pos);
}
/* write a string of chars to the LCD */
void LCD_send(const char * s) // write characters
{
PORTB.F1 = 1; // RS control byte
while(*s)
LCD_write(*s++);
}
/* initialise the LCD - put into 4 bit mode */
void Init_LCD(void)
{
PORTB.F1 = 0; // RS control byte
Delay_ms(35); /* Initialize LCD connected to PORTB*/
PORTB = 0x20*0xF0; /* Function Set*/
LCD_STROBE;
Delay_us(50);
LCD_write(0x2C); // B'11000010'
LCD_write(0x0F); // Display on/off control B'00001100'
PORTB = 0x00*0xF0; // Display clear B'00000001'
LCD_STROBE;
Delay_us(50);
PORTB = 0x10*0xF0;
LCD_STROBE;
Delay_ms(2);
LCD_write(0x06); // Entry mode set B'00000110'
} /* Initialization end*/
/*----------------------------------------------------*/
void main() {
TRISB = 0; /* set port_b to be outputs */
PORTB = 0; /* initialize All port_b outp/uts to be zero */
TRISA = 0;
PORTA = 0;
OPTION_REG = 0xC7; /*prescaler with TMR0, 1/256 mode*/
INTCON = 0x00;
Init_LCD();
LCD_send("LCD KS0066u");
LCD_goto(0x40);
LCD_send("microE");
}
|
| Вто Фев 28, 2006 11:32 am |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Тоя макрос дето си го сложил VCD_STROBE, въобще не ми харесва!
Като гледам колко често се използва, по-добре си го дефинирай като функция.
Освен това продължителността на инейбъла ще ти зависи от тактовата на процесора
така че може да ти дойде къс. И въобще - огледай си внимателно времената.
Това им е голяма мъка на LCD-тата.
А защо не използваш готовата библиотечна функция на mikroE?
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Фев 28, 2006 12:15 pm |
|
 |
|
PIC
Ранг: Новодошъл
Регистриран на: Чет Дек 09, 2004 3:15 pm Мнения: 123 Местоположение: Благоевград
|
С готови библиотечни функции не става , защото всички са за HD44780 и за това се налага да пиша собствени за ks0066u. Относно времето на инейбъла мисля , че е добре /при 4MHz е 1uS/ , а и на асемблер върви точно така. По принцип времената съм завишил почти двойно спрямо дадените за всяка команда  .
|
| Вто Фев 28, 2006 12:29 pm |
|
 |
|
Bezmozachen
Ранг: Популярен
Регистриран на: Сря Апр 27, 2005 2:47 pm Мнения: 349 Местоположение: Varna
|
офф:Извинявай за въпроса, но немога да разбера следните редове:
* небеше ли за умножение? Или това е нещо специфично за CCS. Позабравил съм Ц-то.
Иначе един съвет за инициализацията. Аз винаги отначало подавам 3 команди за конфигуриране в 8 битов интерфейс и след това 1 за установяване в 4 битов. Това се прави с цел, ако примерно ти се е ресетнал професора, а ЛЦД-то не е. При такъв случай в началото го заварваш конфигуриран за 4 битов интерфейс и инициализацията няма да протече както трябва. С 3-те първи комнди ще си сигурен че вече е в 8-битов и ще изпълни правилно последната за преминаване към 4-битов интерфейс.
|
| Вто Фев 28, 2006 12:32 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
правилното е така да го кодираш: '*' не е еквивалетно на '&', оттук ти идват проблемите. Примерно с
на PORTB записваш нула, вместо 0x20, както очакваш.
Прегледай и листинга на асемблер и ще си откриеш сам всички грешки.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Вто Фев 28, 2006 12:43 pm |
|
|
|
Страница 1 от 1
|
[ 5 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|