| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с ks0066u 2х16 и CCS компилатор? http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1903 |
Страница 1 от 1 |
| Автор: | PIC [ Вто Фев 28, 2006 11:32 am ] |
| Заглавие: | Проблем с 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"); } |
|
| Автор: | evc [ Вто Фев 28, 2006 12:15 pm ] |
| Заглавие: | |
Тоя макрос дето си го сложил VCD_STROBE, въобще не ми харесва! Като гледам колко често се използва, по-добре си го дефинирай като функция. Освен това продължителността на инейбъла ще ти зависи от тактовата на процесора така че може да ти дойде къс. И въобще - огледай си внимателно времената. Това им е голяма мъка на LCD-тата. А защо не използваш готовата библиотечна функция на mikroE? |
|
| Автор: | PIC [ Вто Фев 28, 2006 12:29 pm ] |
| Заглавие: | |
С готови библиотечни функции не става , защото всички са за HD44780 и за това се налага да пиша собствени за ks0066u. Относно времето на инейбъла мисля , че е добре /при 4MHz е 1uS/ , а и на асемблер върви точно така. По принцип времената съм завишил почти двойно спрямо дадените за всяка команда |
|
| Автор: | Bezmozachen [ Вто Фев 28, 2006 12:32 pm ] | |||||||||
| Заглавие: | ||||||||||
офф:Извинявай за въпроса, но немога да разбера следните редове:
* небеше ли за умножение? Или това е нещо специфично за CCS. Позабравил съм Ц-то. Иначе един съвет за инициализацията. Аз винаги отначало подавам 3 команди за конфигуриране в 8 битов интерфейс и след това 1 за установяване в 4 битов. Това се прави с цел, ако примерно ти се е ресетнал професора, а ЛЦД-то не е. При такъв случай в началото го заварваш конфигуриран за 4 битов интерфейс и инициализацията няма да протече както трябва. С 3-те първи комнди ще си сигурен че вече е в 8-битов и ще изпълни правилно последната за преминаване към 4-битов интерфейс. |
||||||||||
| Автор: | ¶ [ Вто Фев 28, 2006 12:43 pm ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
правилното е така да го кодираш:
'*' не е еквивалетно на '&', оттук ти идват проблемите. Примерно с
на PORTB записваш нула, вместо 0x20, както очакваш. Прегледай и листинга на асемблер и ще си откриеш сам всички грешки. |
||||||||||||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|