MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: Wud ()
Дата:   04/03/2004 20:07

1.
 movlw b'10000000'
 movwf TRISC

надо ли RX при конфигурации выставлять как вход,
или он сам выставится при настройке USART (bsf RCSTA,SPEN)
2. я тут задумался и не нашел ответа в доках, чем эти переносы отличаются?
 movlw 32
 movlw .32  (это что ли 0.32? так по значению не получается)
 movlw d'32'

3. по доке сказано, что TXEN(включение передатчика) можно делать как до movwf
TXREG, так и после.
а какая разница?
4. как пакет данных отправить (вроде байтики по отдельности кидаю, а вот как разом
много байт не понял).
5. разница между низкоскоростным и высокоскоростным режимами асинхронного USART?
6. вот если убрать задержку, то передатчик видимо даже не успевает включаться, а
10мсек слишком жирно будет.
чтоб в живую не играться, сколько по опыту/теории надо?
TX
 Bank1
 bsf     TXSTA,TXEN
 Bank0
 movlw   0x0C
 movwf   TXREG
; Call    Delay_10mS
 Bank1
 bcf     TXSTA,TXEN
 Bank0
return




Отправка отредактированного (04/03/2004 20:09)


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: Раздел 18. Модуль USART ()
Дата:   04/03/2004 20:30

Извени за прямоту ссылки:
http://www.microchip.ru/files/d-sheets-rus/pic16_17.pdf
Найдеш ответы по всем пунктам.


 
 А причем тут раздел17-MSSP ???
Автор: Wud ()
Дата:   04/03/2004 20:56

а раздел 18 USART у меня есть, я по нему и писал прошивку.
-
Но внем если подробнее читать новичку, нет ответов на мои вопросы...
Почему и задаю.
А есть вопросы и не по USART. Про них я тоже ничего не нашел в официальных рус
доках.
-
плз, кто-нить помогите с разрешением вопросов.




 
 По-моему так
Автор: Bill ()
Дата:   04/03/2004 21:19

2. операнд у команды molw один и тот же, просто записан по-разному. Ассемблер допускает несколько
форм записи констант;
4. передача пакета данных не должна представлять проблем. Обычно имеется некоторый буфер данных и
имеется счетчик количества передаваемых данных. После передачи очередного байта данных, указатель
буфера устанавливается на следующий байт в буфере, счетчик уменьшается на 1. Обыкновенный цикл. Его
правда можно организовать либо по прерываниям, либо чисто программно, когда процессор опрашивает
флаг готовности UART к передаче следующего байта. Особое внимание следцет обратить на передачу
послденего байта. В AVR это сделано очень удобно, в MSP этого удобства нет. Как сделано в PIC - не
знаю, никогда с апааратным UART в PIC не работал;
6. не понял для чего нужна задержка.


 
 вопросы остались
Автор: Wud ()
Дата:   04/03/2004 21:28

2. а почему тогда компилятор mplab хавает 32 и .32 по разному и d'32' вроде тоже
иначе(еще не понял).
4. боюсть, что хотел бы послушать людей пишущих под пик, потому как вопросы остались
если есть буфер, то каких объемов или наверно надо сначала через TXREG не включая
TXEN запихать в некий буфер байты один за другим(если так, то сколько), а потом
только включить TXEN. или как-то иначе. х.з.
6. без задержек ничего не происходит, как будто ничего и не пытались отправлять.
10мсек работает, но меня совсем не устраивает такая скорость. далее(меньше) не
пробовал, хотел бы сначала послушать людей, "съевших собаку" на данном вопросе.
-
ну и др.вопросы, плз, кто-нить




 
 Re: вопросы остались
Автор: Bill ()
Дата:   04/03/2004 21:49

Я давно с PIC не работал, и директивы ассемблера без документации не помню, могу ошибиться.
Константы d'32' и .32 это две формы записи числа в 10=й системе счисления. 32 - это число,
записанное в системе счисления, установленной по умолчанию. Должн быть такая директива, насколько я
помню. Если установлено основание системы счисления 10, то 32 будет десятичнвм числом. Впрочем,
можно посмотреть коды команд, которые сгенерировал ассемблер и сравнить.
Насчет буфера. Обычно процесс заполнения буфера и процесс передачи данных из него выполняют разные
части программы, которые часто делают относительно независимвми друг от друга, эт позволяет
упростить отладку программ, сделать более стройными, что-ли. Ну и это действительно так: как только
буфер будет заполнен данными управление передается подпрограмме передачи данных по UART. Но при
таком подходе появляется потеря производительности процессора. Чтобы этого не было, часто организуют
обмен данными по прерываниям. Обычно внутри UART имеется буферный регистр. Когда данные передаются
из буферного регистра в регистр сдвига UART, генерируется сигнал прерывания и процедура обработки
прерывания должна проделать все манипуляции с буфером данных и передать очередной байт в буфер UART.
Подробнее об этом можно прочитать в DS.


 
 Примерно то ясно, но вот на деле бы с USART...
Автор: Wud ()
Дата:   04/03/2004 22:09

!




 
 Re: Примерно то ясно, но вот на деле бы с USART...
Автор: Bill ()
Дата:   04/03/2004 22:14

Так вперед! К винным погребам!:)


 
 Ребята, помогите с разрешением вопросов
Автор: Wud ()
Дата:   04/03/2004 22:42

на те, что ответили, слишком прозрачно и те, которые упустили.




 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: bogdik ()
Дата:   05/03/2004 00:42

1. для настройки УСАРТа следует установить биты TRISC,6 и 7.(настроить как входы) и бит SPEN.
2. movlw 32 - hex
movlw .32 - dec
movlw d'32' - dec
3. если до,то передача не начнётся пока не загрузишь новое значение в ТXREG
4. следи за флагом TXIF ,когда он поднимется пиши новые данные врегистр ТXREG.
тогда будет непрерывная передача.
5. к примеру регистр SPBRG ИМЕЕТ ЗНАЧЕНИЕ 32 при низкоскор. режиме скорость 9600 б/с по формуле
FOSC/(64(X+1)),а при высоком 38400 б/с FOSC/16(X+1)). 64 и 16 -эсть разница?
6. TX
Bank1
bsf TXSTA,TXEN
Bank0
movlw 0x0C
movwf TXREG
; Call Delay_10mS
Bank1
bcf TXSTA,TXEN ********* здесь ты запрещаешь передачу,а без задержки она прекращается
Bank0 ********* не успев начатся. убери задержку и следи за флагом
return ********* можно через прерывание


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: Wud ()
Дата:   05/03/2004 02:00

2. movlw 32 == movlw 0x32 ??? то есть они равны
5. а если будет выставленна одинаковая скорость, снаружи будет все равно низкий это
режим или высокий?
-
за остальное спасибочки, уважили...:))))))))



Отправка отредактированного (05/03/2004 02:00)


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: bolt ()
Дата:   05/03/2004 09:16

Набери в поиске USART за последние 90 дней и найдешь ответы на свои вопросы.
Если нету, тогда ищи за 120 дней :)


 
 Re: По-моему так
Автор: Greg ()
Дата:   05/03/2004 09:22

Bill писал(а):

> Особое внимание следцет обратить на передачу
> послденего байта. В AVR это сделано очень удобно, в MSP этого
> удобства нет.

а что за удобство такое?


 
 Re: По-моему так
Автор: Bill ()
Дата:   05/03/2004 09:44

У AVR есть два флажка: один выставляется кода байт выбирается из буфера UART (Buffer Empty), второй
- когда закнчивется передача байта на выход UART (Transmission Complete). По обоим флагам имеются
прерывания.
Совершенно ясно, что пока идет выборка байтов из программного буфера удобно пользоваться первым
флажком. И это относится и к последнему байту. Но как определить момент окончания передачи
последнего байта, когда, например, надо переключить драйвер RS-485 с передачи на прием? Так вот
второй флажок для этого в самый раз!


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: Ecole ()
Дата:   05/03/2004 10:29

2. movlw 32 == movlw 0x32 ??? то есть они равны

Не совсем. У ассемблера есть директива, устанавливающая систему исчисления по
умолчанию. Если по умолчанию установлена шестнадцатеричная система, то число 32
будет шестнадцатеричное. Если десятичная, то это число будет десятичное. Посмотри
описания директив ассемблера - там все написано.

5. а если будет выставленна одинаковая скорость, снаружи будет все равно низкий это
режим или высокий?

Да, снаружи все равно. Прочитай еще раз документацию по USART - там об этом
написано. Два режима (высокоскоростной и низкоскоростной) сделаны только для того,
чтоб можно было подобрать такой коэффициент, при котором отклонение реальной
скорости USART от требуемой было минимальным. Посмотри документацию - там даже
таблица выбора коэффициентов для разных скоростей и режимов есть.


 
 мда,
Автор: Greg ()
Дата:   05/03/2004 10:37

есть такое.
правильнее было бы сказать "проблема последнего бита".


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: evr ()
Дата:   05/03/2004 12:55

Правильно подсказали,не надо ни каких задержек, следи за битом TRMT.
Вот простецкий пример вывода ABCD.Проще куда?

ORG 0x00
BCF STATUS,RP0
BCF STATUS,RP1
BSF TRISB,0x01
BSF TRISB,0x02
BSF STATUS,RP0
BSF TXSTA,BRGH
MOVLW 0x16
MOVWF SPBRG
BCF TXSTA,SYNC
BCF STATUS,RP0
BSF RCSTA,SPEN

BSF STATUS,RP0
BSF TXSTA,TXEN
BCF STATUS,RP0
MOVLW 0x41
MOVWF TXREG
BSF STATUS,RP0
LA BTFSS TXSTA,TRMT
GOTO LA
BCF STATUS,RP0
MOVLW 0x42
MOVWF TXREG
BSF STATUS,RP0
LB BTFSS TXSTA,TRMT
GOTO LB
BCF STATUS,RP0
MOVLW 0x43
MOVWF TXREG
BSF STATUS,RP0
LC BTFSS TXSTA,TRMT
GOTO LC
BCF STATUS,RP0
MOVLW 0x44
MOVWF TXREG


L2 NOP
GOTO L2


 
 Забыл, Fosc=3.58мгц, скорость обмена=9,6К
Автор: evr ()
Дата:   05/03/2004 13:06

1


 
 Re: Поигрался тут с USART(впервые изучил), есть вопросы... и не только по нему
Автор: patton ()
Дата:   05/03/2004 13:09

  for( mi = 0; mi < COUNT; mi++ )
  {
    while(!RCIF)
      continue;
    Buf[ mi ] = RCREG;
  }

Перед этим запрос с компа -> реакция в обработчике прерывания -> обратно в основной цикл, где
по анализу флага выставленного в обработчике передаётся управление этому фрагменту
Делаю так и вообще ни о чём не думаю, конечно если предположить вариант ошибок то нужно
анализировать другие флаги и использовать таймер
PS Зачем выдумывать что-то, что никогда не понадобится


 
 Re: мда,
Автор: Bill ()
Дата:   05/03/2004 18:37

И как такая проблемв решается? Ждать, или ввести фиктивный байт в цикл?


 
 Re: мда,
Автор: Greg ()
Дата:   05/03/2004 20:05

Bill писал(а):

> И как такая проблемв решается? Ждать, или ввести фиктивный байт
> в цикл?

если в msp, так есть бит TXEPT,

"It is recommended that the transmitter be disabled (UTXEx = 0) only after any
active transmission is complete. This is indicated by a set transmitter empty
bit (TXEPT = 1)... "

прерывания вот он не вызывает...


 
 Простите а это тогда о чём( эт я Greg-у )
Автор: patton ()
Дата:   05/03/2004 20:12

TRMT: Transmit Shift Register Status bit
это вроде до стопа выставляется
TXIF уже после стопа


 
 Это уже кое-что:)
Автор: Bill ()
Дата:   05/03/2004 20:24

=


 
 или я уже в празднике
Автор: patton ()
Дата:   05/03/2004 20:38

Greg же сказал да есть такое в пике. Так ведь?


 
 Re: Простите а это тогда о чём( эт я Greg-у )
Автор: Greg ()
Дата:   05/03/2004 21:30

patton писал(а):

> TRMT: Transmit Shift Register Status bit
> это вроде до стопа выставляется.

да, это то, что надо Bill-у, прерывания тоже не вызывает

> TXIF уже после стопа
если запихнуть один байт, он опять встает еще ДО своего старта. Говорит, что TXREG освободился.
А вот ежели их запихнуть два подряд, то встанет перед стопом первого.

там красивая картинка fig.10-3 (DS39582B-page 116, это даташит на 16f87XA, да в любом есть)



Отправка отредактированного (06/03/2004 08:36)