| Автор |
Съобщение |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
 Предаване и приемане по RS232 в CCS. Как?
while(1) {
putc(1);
c=getc();
Delay_ms(1000);
printf(lcd_putc,"\fres= %C", c);
}
Това е отрязък от програмката ми за комуникация. Идеята е да предам числото 1 и след това да го приема. Резулата визуализирам на ЛЦД. Да ама нещо не става. Немога да разбера защо. Не се смейте сега започвам да разучавам CCSa  , защото това MikroC ми скъса нервите. Резултата от предаването и приемането го наблюдавам с free port monitora и вместо единица, предава и приема 67.
|
| Пон Юни 05, 2006 11:25 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
putc(нещо) изпраща по TX
getc() слуша RX (окъсил ли си ги?)
printf изпаща също по TX
|
| Пон Юни 05, 2006 11:33 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
getc() би трябвало да се вика при настъпване на определено събитие - например прекъсване за приет байт по серийния канал. Неможеш да очакваш, че ей така като напишеш нещо си равно на тая функция и трябва да приемеш нещо. Ще приемеш само ако е изпратено и се генерира прекъсване за това и c=getc(); го напишеш вътре в прекъсването.
|
| Пон Юни 05, 2006 11:33 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
адаш getc() , чака да постъпи нещо и тогава връща резултат
така ,че не е нужно да е в тяло на прекъсване
|
| Пон Юни 05, 2006 11:37 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Аха - ми какъв му е проблема тогава - в жиците  . Тва е тъпо да стои и да чака  .
|
| Пон Юни 05, 2006 11:44 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
ей това не ми звучи никак ама хич:
printf(lcd_putc,"\fres= %C", c);
|
| Пон Юни 05, 2006 11:47 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Точно така, укъсил съм ги. На кома съм поставил "тапа" с която укъсявам TX с RX (2 и 3) и очаквам каквото предам да ми се върне, но незнам защо не става. Идеята е да изпратя цифрата 1 или 10 например и съответно да я прочета с getc(); и полученото число да го изобразя на ЛЦД. С визуализацията вече се справям, но този сериен канал нещо ми се опъва. Не знам къде сбърках  .
|
| Пон Юни 05, 2006 11:48 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Ами и на мен ми се видя странно, но има такива примети и работи. Незнам защо, ако lcd_putc е за визуализиране, а пък printf изпраща по серийният канал какво общо имат двете функций, но така е дадено в примерите и което е най-интересното, че работи. Просто копирам от примерите и виждам какво става в Proteus.
|
| Пон Юни 05, 2006 11:52 pm |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
на кома?
да разбирам ли ,че нещо след макс232
или директно rx и tx на пика?
|
| Пон Юни 05, 2006 11:53 pm |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Да на кома на ПК.
|
| Пон Юни 05, 2006 11:57 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Ама ти в протеус ли симулираш - незнам що, ама нещо не ми харесва на мен тая програмка. Пък и никъде невиждам на схемата да си окъсил предаването с приемането.
|
| Вто Юни 06, 2006 12:00 am |
|
 |
|
daniel_stefanov
Ранг: Ориентиран
Регистриран на: Нед Мар 27, 2005 12:40 am Мнения: 206 Местоположение: София
|
Ами в 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);
}
}
Идеята е да предам този символ * и след това ПИКа да го прочете пак и да го покаже на ЛЦДто. Но не става. Как да стане това.
|
| Вто Юни 06, 2006 12:06 am |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
ми прави ми впечатление ,че си обърнал rx и tx при буксата
със симулационни програми не работя ако искаш размени 7 и 8 крак на макса
и пак пробвай
|
| Вто Юни 06, 2006 12:10 am |
|
 |
|
Dimiter
Ранг: Популярен
Регистриран на: Пет Фев 04, 2005 3:18 pm Мнения: 309 Местоположение: Sofia
|
а и пробвай вместо тази сложнотия :
printf(lcd_putc,"\fres= %C", c);
lcd_putc("fres=");lcd_putc(c);
|
| Вто Юни 06, 2006 12:15 am |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
Пробваи да махнеш тоя max232 или ако искаш да го ползваш даи INVER на тх и rx ....
#use rs232(baud=10400, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12 .. това нещо не ми се нрави сигурен ли си че тая функция ползва хардуерния UART ... щото ако е не 
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
Последна промяна BrainStorm на Вто Юни 06, 2006 12:20 am, променена общо 1 път
|
| Вто Юни 06, 2006 12:19 am |
|
|