Микроконтролери и електроника
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 :) , защото това MikroC ми скъса нервите. Резултата от предаването и приемането го наблюдавам с free port monitora и вместо единица, предава и приема 67.

Автор:  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 ]
Заглавие: 

Аха - ми какъв му е проблема тогава - в жиците 8) . Тва е тъпо да стои и да чака :? .

Автор:  Dimiter [ Пон Юни 05, 2006 11:47 pm ]
Заглавие: 

ей това не ми звучи никак ама хич:
printf(lcd_putc,"\fres= %C", c);

Автор:  daniel_stefanov [ Пон Юни 05, 2006 11:48 pm ]
Заглавие: 

Цитат:
putc(нещо) изпраща по TX
getc() слуша RX (окъсил ли си ги?)
printf изпаща също по TX


Точно така, укъсил съм ги. На кома съм поставил "тапа" с която укъсявам TX с RX (2 и 3) и очаквам каквото предам да ми се върне, но незнам защо не става. Идеята е да изпратя цифрата 1 или 10 например и съответно да я прочета с getc(); и полученото число да го изобразя на ЛЦД. С визуализацията вече се справям, но този сериен канал нещо ми се опъва. Не знам къде сбърках :D .

Автор:  daniel_stefanov [ Пон Юни 05, 2006 11:52 pm ]
Заглавие: 

Цитат:
ей това не ми звучи никак ама хич:
printf(lcd_putc,"\fres= %C", c);


Ами и на мен ми се видя странно, но има такива примети и работи. Незнам защо, ако lcd_putc е за визуализиране, а пък printf изпраща по серийният канал какво общо имат двете функций, но така е дадено в примерите и което е най-интересното, че работи. Просто копирам от примерите и виждам какво става в Proteus.

Автор:  Dimiter [ Пон Юни 05, 2006 11:53 pm ]
Заглавие: 

на кома?
да разбирам ли ,че нещо след макс232
или директно rx и tx на пика?

Автор:  daniel_stefanov [ Пон Юни 05, 2006 11:57 pm ]
Заглавие: 

Да на кома на ПК.

Прикачени файлове:
rs232.JPG
rs232.JPG [ 250.73 KiB | Прегледано 2510 пъти ]

Автор:  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 ... щото ако е не :lol:

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/