| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Предаване и приемане по RS232 в CCS. Как? http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2466 |
Страница 1 от 3 |
| Автор: | daniel_stefanov [ Пон Юни 05, 2006 11:25 pm ] |
| Заглавие: | Предаване и приемане по RS232 в CCS. Как? |
while(1) { putc(1); c=getc(); Delay_ms(1000); printf(lcd_putc,"\fres= %C", c); } Това е отрязък от програмката ми за комуникация. Идеята е да предам числото 1 и след това да го приема. Резулата визуализирам на ЛЦД. Да ама нещо не става. Немога да разбера защо. Не се смейте сега започвам да разучавам CCSa |
|
| Автор: | Dimiter [ Пон Юни 05, 2006 11:33 pm ] |
| Заглавие: | |
putc(нещо) изпраща по TX getc() слуша RX (окъсил ли си ги?) printf изпаща също по TX |
|
| Автор: | Dimitar [ Пон Юни 05, 2006 11:33 pm ] |
| Заглавие: | |
getc() би трябвало да се вика при настъпване на определено събитие - например прекъсване за приет байт по серийния канал. Неможеш да очакваш, че ей така като напишеш нещо си равно на тая функция и трябва да приемеш нещо. Ще приемеш само ако е изпратено и се генерира прекъсване за това и c=getc(); го напишеш вътре в прекъсването. |
|
| Автор: | Dimiter [ Пон Юни 05, 2006 11:37 pm ] |
| Заглавие: | |
адаш getc() , чака да постъпи нещо и тогава връща резултат така ,че не е нужно да е в тяло на прекъсване |
|
| Автор: | Dimitar [ Пон Юни 05, 2006 11:44 pm ] |
| Заглавие: | |
Аха - ми какъв му е проблема тогава - в жиците |
|
| Автор: | Dimiter [ Пон Юни 05, 2006 11:47 pm ] |
| Заглавие: | |
ей това не ми звучи никак ама хич: printf(lcd_putc,"\fres= %C", c); |
|
| Автор: | daniel_stefanov [ Пон Юни 05, 2006 11:48 pm ] | |||||||||
| Заглавие: | ||||||||||
Точно така, укъсил съм ги. На кома съм поставил "тапа" с която укъсявам TX с RX (2 и 3) и очаквам каквото предам да ми се върне, но незнам защо не става. Идеята е да изпратя цифрата 1 или 10 например и съответно да я прочета с getc(); и полученото число да го изобразя на ЛЦД. С визуализацията вече се справям, но този сериен канал нещо ми се опъва. Не знам къде сбърках |
||||||||||
| Автор: | daniel_stefanov [ Пон Юни 05, 2006 11:52 pm ] | |||||||||
| Заглавие: | ||||||||||
Ами и на мен ми се видя странно, но има такива примети и работи. Незнам защо, ако lcd_putc е за визуализиране, а пък printf изпраща по серийният канал какво общо имат двете функций, но така е дадено в примерите и което е най-интересното, че работи. Просто копирам от примерите и виждам какво става в Proteus. |
||||||||||
| Автор: | Dimiter [ Пон Юни 05, 2006 11:53 pm ] |
| Заглавие: | |
на кома? да разбирам ли ,че нещо след макс232 или директно rx и tx на пика? |
|
| Автор: | daniel_stefanov [ Пон Юни 05, 2006 11:57 pm ] | ||
| Заглавие: | |||
Да на кома на ПК.
|
|||
| Автор: | Dimitar [ Вто Юни 06, 2006 12:00 am ] |
| Заглавие: | |
Ама ти в протеус ли симулираш - незнам що, ама нещо не ми харесва на мен тая програмка. Пък и никъде невиждам на схемата да си окъсил предаването с приемането. |
|
| Автор: | daniel_stefanov [ Вто Юни 06, 2006 12:06 am ] |
| Заглавие: | |
Ами в Proteus няма да го видиш - окъсяването. Правя го хардуерно на самия ком порт на ПСто. Тапата представлява един DB9/F на който 2 и 3то краче са на късо и 1 и 4 също. Ето я цялата програма: #if defined(__PCM__) #include <16F877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use fixed_io(c_outputs=pin_C6) //speeds up port use #use delay(clock=20000000) #use rs232(baud=10400, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 #include <lcd.c> char c; void main() { lcd_init(); while(1) { putc('*'); Delay_ms(100); c=getc(); Delay_ms(1000); printf(lcd_putc,"\fres= %C", c); } } Идеята е да предам този символ * и след това ПИКа да го прочете пак и да го покаже на ЛЦДто. Но не става. Как да стане това. |
|
| Автор: | Dimiter [ Вто Юни 06, 2006 12:10 am ] |
| Заглавие: | |
ми прави ми впечатление ,че си обърнал rx и tx при буксата със симулационни програми не работя ако искаш размени 7 и 8 крак на макса и пак пробвай |
|
| Автор: | Dimiter [ Вто Юни 06, 2006 12:15 am ] |
| Заглавие: | |
а и пробвай вместо тази сложнотия : printf(lcd_putc,"\fres= %C", c); lcd_putc("fres=");lcd_putc(c); |
|
| Автор: | BrainStorm [ Вто Юни 06, 2006 12:19 am ] |
| Заглавие: | |
Пробваи да махнеш тоя max232 или ако искаш да го ползваш даи INVER на тх и rx .... #use rs232(baud=10400, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 .. това нещо не ми се нрави сигурен ли си че тая функция ползва хардуерния UART ... щото ако е не |
|
| Страница 1 от 3 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|