реклама на сайте
подробности

 
 
> Оператор "printf" и функция "putchar" для работы с символьным LCD
Буратино
сообщение Mar 19 2010, 11:47
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



не понимаю, что за беда с выводом.
Прописал "putchar" в виде:
Код
void putchar( char c ) {
    if ( !c )
    return( 0 );
    Transmit_Byte( c );  /*функция отправки сообщения в последовательный порт*/
}


LCD оснащен контроллером, который принимает данные по последовательному порту и выводит на экран дисплея 16*02
Не могу разобраться почему:

printf("%a", 30.0) выводит "???"
printf("%.2A", 30.0) выводит "???"
printf("%c", 'a') ничего выводит
printf("<%3c|%-3c>", 'a', 'b') выводит "< крокозябра >"
и т.д. совсем другими словами не то что я ожидаю.

printf("Hello World!") выводит "Hello World!", но если использовать длинную строку или несколько операторов "printf" со строками, то выводятся куски строк в хаотичном порядке.
размер Data Stack в компиляторе IAR установил в 0x300.

Мне нужно выводить на экран простые конструкции состоящие из текста и числовых данных, что делать? smile.gif

Сообщение отредактировал Буратино - Mar 19 2010, 12:46


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Mar 20 2010, 12:57
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Кстати, можно вопрос по поводу UARTов микроконтроллеров?

Мне пока доводилось поработать с двумя реализациями их передатчиков:
1. как только сдвиговый регистр передатчика становится пуст - устанавливается соответствующее прерывание.
Сбросить его невозможно до тех пор, пока передатчик пуст.

Тут получается весьма простой обработчик - надо передавать данные - разрешаем прерывания и в обработчике происходит загрузка.
Данные закончились - запрещаем прерывание.

2. в LPC1768 другая система (так называемый 550-ый?) - триггер прерывания "передатчик пуст" устанавливается только после завершения передачи данных (а не присутствует постоянно).
То есть изначально его нет (хотя передачтик пуст!), и после вызова обработчика он сбрасывается.

Здесь уже погеморройнее - загрузку FIFO приходится делать как в обработчике прерывания, так и снаружи (для инициирования передачи).
Причём дополнительно есть какой-то механизм откладывания прерывания:

The UARTn THRE interrupt (UnIIR[3:1] = 001) is a third level interrupt and is activated
when the UARTn THR FIFO is empty provided certain initialization conditions have been
met. These initialization conditions are intended to give the UARTn THR FIFO a chance to
fill up with data to eliminate many THRE interrupts from occurring at system start-up. The
initialization conditions implement a one character delay minus the stop bit whenever
THRE = 1 and there have not been at least two characters in the UnTHR at one time
since the last THRE = 1 event. This delay is provided to give the CPU time to write data to
UnTHR without a THRE interrupt to decode and service. A THRE interrupt is set
immediately if the UARTn THR FIFO has held two or more characters at one time and
currently, the UnTHR is empty. The THRE interrupt is reset when a UnTHR write occurs or
a read of the UnIIR occurs and the THRE is the highest interrupt (UnIIR[3:1] = 001).


Здесь я до конца не понял конкретику, лишь то, что флаг THRE может устанавливаться не сразу по опустошению передатчика, а спустя какое-то время.

То есть проанализировав в регистре статуса бит Transmitter Empty (TEMT), в случае, если он установлен, нельзя однозначно понять, был ли уже вызов прерывания, или только ещё будет - из-за one character delay?

В общем, некоторый гиморрой получается sad.gif

Может, кто нибудь более популярно разъяснит механику работы LPCшного UART?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Буратино   Оператор "printf" и функция "putchar" для работы с символьным LCD   Mar 19 2010, 11:47
- - barabek   Цитата(Буратино @ Mar 19 2010, 21:47) pri...   Mar 19 2010, 12:09
- - Буратино   printf("%f", 30.0); выводит "0.0000...   Mar 19 2010, 12:12
- - zltigo   Цитата(Буратино @ Mar 19 2010, 14:47) Про...   Mar 19 2010, 12:34
- - Буратино   А почему эта функция не putchar()? --- Буратино ...   Mar 19 2010, 12:43
|- - zltigo   Цитата(Буратино @ Mar 19 2010, 15:43) А п...   Mar 19 2010, 12:46
|- - Буратино   Цитата(zltigo @ Mar 19 2010, 15:46) А вот...   Mar 19 2010, 12:51
- - Буратино   Пересмотрел форум, и понял ,что функция printf() ...   Mar 19 2010, 15:36
|- - zltigo   Цитата(Буратино @ Mar 19 2010, 18:36) Я у...   Mar 19 2010, 15:49
- - one_eight_seven   А в контроллер уже зашиты ASCII коды? Может, я не...   Mar 19 2010, 15:49
- - Буратино   zltigo ,почему Вы такой злой? Ну нет желания помоч...   Mar 19 2010, 15:59
|- - zltigo   Цитата(Буратино @ Mar 19 2010, 18:59) zlt...   Mar 19 2010, 16:34
- - Буратино   Все, разобрался (хотя и остались некоторые непонят...   Mar 19 2010, 18:20
|- - zltigo   Цитата(Буратино @ Mar 19 2010, 21:20) Все...   Mar 19 2010, 18:37
|- - Буратино   Цитата(zltigo @ Mar 19 2010, 21:37) Некош...   Mar 19 2010, 18:45
||- - zltigo   Цитата(Буратино @ Mar 19 2010, 21:45) Что...   Mar 19 2010, 18:52
|- - Сергей Борщ   Цитата(zltigo @ Mar 19 2010, 20:37) Некош...   Mar 19 2010, 21:20
|- - zltigo   Цитата(Сергей Борщ @ Mar 20 2010, 00:20) ...   Mar 19 2010, 21:53
|- - Сергей Борщ   Цитата(zltigo @ Mar 19 2010, 23:53) Свобо...   Mar 20 2010, 09:54
||- - zltigo   Цитата(Сергей Борщ @ Mar 20 2010, 12:54) ...   Mar 20 2010, 10:34
||- - Сергей Борщ   Цитата(zltigo @ Mar 20 2010, 12:34) Очень...   Mar 20 2010, 11:11
||- - zltigo   Цитата(Сергей Борщ @ Mar 20 2010, 14:08) ...   Mar 20 2010, 11:14
|||- - Сергей Борщ   Цитата(zltigo @ Mar 20 2010, 13:14) При н...   Mar 20 2010, 15:08
|||- - zltigo   Цитата(Сергей Борщ @ Mar 20 2010, 18:08) ...   Mar 20 2010, 15:35
||- - ReAl   Цитата(Сергей Борщ @ Mar 20 2010, 13:11) ...   Mar 20 2010, 18:38
||- - zltigo   Цитата(Сергей Борщ @ Mar 20 2010, 14:11) ...   Mar 20 2010, 18:51
|- - Сергей Борщ   Цитата(zltigo @ Mar 20 2010, 01:08) Абсол...   Apr 20 2010, 21:59
|- - zltigo   Цитата(Сергей Борщ @ Apr 21 2010, 00:00) ...   Apr 20 2010, 22:13
||- - Сергей Борщ   Цитата(zltigo @ Apr 21 2010, 01:28) Это п...   Apr 21 2010, 07:31
||- - ReAl   Цитата(zltigo @ Apr 21 2010, 01:28) Это п...   Apr 24 2010, 21:28
|- - zltigo   Цитата(Сергей Борщ @ Apr 21 2010, 00:14) ...   Apr 24 2010, 22:39
|- - zltigo   Цитата(sonycman @ Mar 20 2010, 15:57) В о...   Mar 20 2010, 13:10
|- - sonycman   Цитата(zltigo @ Mar 20 2010, 17:10) Пальц...   Mar 20 2010, 14:00
|- - zltigo   Цитата(sonycman @ Mar 20 2010, 17:00) У В...   Mar 20 2010, 14:41
- - Буратино   RE: Оператор "printf" и функция "putchar" для работы с символьным LCD   Mar 20 2010, 16:49
- - zltigo   Цитата(Буратино @ Mar 20 2010, 19:49) А ...   Mar 20 2010, 17:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016