Форум за електроника Форуми Форум за електроника

Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Service Manual Search :   Enhanced by: Jabse.com : българската търсачка
Помощ PIC и RS232
Иди на страница 1, 2  Следваща
 
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics
Предишната тема :: Следващата тема  
Автор Съобщение
XXXXXXXXXX
Гост





МнениеПуснато на: Вто Ное 08, 2005 18:22    Заглавие: Помощ PIC и RS232 Отговорете с цитат

Опитах се да напиша някакви прости програмки, ама нищо не става.
Идеята е че при натискане на бутонче се праща байт от единия пик на другия, като го приеме трябва да мигне св.диод и да върне байт на първия, като с това мигва св.диода на първия.
Трябва ми малко помощ, за да разбера къде е проблема. Sad
кодът на първия пик е:

#include <12F675.h>

#fuses NOWDT,XT, NOCPD, NOPROTECT, MCLR, PUT, BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A2,bits=7,float_high)
#use fast_io(A)

#bit led = 0x5.1
#int_EXT
EXT_isr()
{
IF(getc()==0x5B){led=1; delay_ms(1000);led=0;}
}



main(){

setup_comparator(NC_NC_NC_NC);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_1(T1_DISABLED);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

while(1){
If(input(pin_a0)==0){delay_ms(500); putc(0x4b); }
delay_ms(500);




}
}

а на втрия


#include <12F675.h>

#fuses NOWDT,XT, NOCPD, NOPROTECT, MCLR, PUT, BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A2,bits=9,float_high)
#use fast_io(A)
#bit led = 0x5.1
#int_EXT
EXT_isr()
{
IF(getc()== 0x4B){led=1; delay_ms(1000); putc(0x5B);}
}


main(){
setup_comparator(NC_NC_NC_NC);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_1(T1_DISABLED);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

LED = 0;

}
Върнете се в началото
AA
Опитен потребител
Опитен потребител


Регистриран на: 28 Юни 2004
Мнения: 727
Местожителство: ВеликоТърново

МнениеПуснато на: Вто Ное 08, 2005 21:32    Заглавие: Отговорете с цитат

питай в www.mcu-bg.com
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
ToНи
Гост





МнениеПуснато на: Вто Ное 08, 2005 22:41    Заглавие: Отговорете с цитат

Ами мисля че и другаде беше писал по тоя въпрос но ......
Нещо не ми е ясно защо ги слагаш тия if в хедър файла.
#include <12F675.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //Internal RC Osc
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPUT //No Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A1,rcv=PIN_A2,bits=9)

ето ти един хедър файл

#int_ext
ext_irs()
{
if(getc()==('a'))
{
output_high(pin_a0);
delay_ms(300);
output_low(pin_a0);
}
}

а това пък е обслужванет на приемането

а сега виждам какво си направил, дал си A2 и за recive и за transmit.
Това вече майняма да стане Smile
Ако искаш всичко да е по една жица няма да стане толкова просто, там вече ти трябва по сложен протокол, и то няма нужда да е RS232. Тогава едното устройство или трябва да е мастер, или да правиш протокол с детекция на колизии, което с м-у два процесора не си струва ама ако си навит. Каква е идеята, първо че двата не могат да предават едновременно, но това изобщо не го мисли със стандартните RS232 процедури. Та или единиа инициира другиа и цака отговор в рамкит на определено време, или всеки преди да поцне да предава провериава състоянието на линиата, изцаква време х такова це да не е възмозно да има трансмит от другиа бе зпромиана на нивто, и ако ниама промина започва редаване, ако е имало промяна обикновенно се изчаква случаен период от време и след това пак се пробва, но ако не е постоянна връзката м-у двата, или по скоро връзката не е равноправна по дбре го направи с master/slave, единиа енициира и другиа едва тогава може да предава.
Върнете се в началото
marinov
Опитен потребител
Опитен потребител


Регистриран на: 20 Апр 2004
Мнения: 130
Местожителство: Русе

МнениеПуснато на: Вто Ное 08, 2005 23:50    Заглавие: Отговорете с цитат

Простете невежеството ми ама какъв е тоя език и с къв софт работите?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
ToНи
Гост





МнениеПуснато на: Сря Ное 09, 2005 0:48    Заглавие: Отговорете с цитат

Езика е С, а компилатора CCS, но то няма особенна разлика, верно че в някои други няма output_low/high но това не е болка за умиране, това е еквивалентно на bit=1/0, и някои други неща от сорта на това специфичи на CCS но иначе си е анси С.
Върнете се в началото
Predator_MF
Опитен потребител
Опитен потребител


Регистриран на: 29 Юли 2004
Мнения: 272
Местожителство: Русе

МнениеПуснато на: Сря Ное 09, 2005 2:11    Заглавие: Отговорете с цитат

Да, определено няма да стане номера с едни и същи крака за TX/RX, поне не със стандартния RS232 на CCS. Може да пробваш да float-ваш ТX пина докато не изпращаш, погледни във хелпа на CCS (по точно при #use RS232) ще видиш синтаксиса. Ще стане, но трябва да си измислиш някакво арбитриране, ще трябва да има някой Master във случая Smile
_________________
Форум за микроконтролери - www.mcu-bg.com
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Yahoo Messenger MSN Messenger
ToНи
Гост





МнениеПуснато на: Сря Ное 09, 2005 10:19    Заглавие: Отговорете с цитат

Ами май няма да стане, гледах го ама не ще да се лъже, трябва ръчно да се напише, и естествено или единия да е мастер или да е с проверка за колизия което обаче .... не е съвсем като за начинаещ
Върнете се в началото
XXXXXXXXXX
Гост





МнениеПуснато на: Сря Ное 09, 2005 10:20    Заглавие: Отговорете с цитат

Цитат:
Може да пробваш да float-ваш ТX пина докато не изпращаш, погледни във хелпа на CCS (по точно при #use RS232) ще видиш синтаксиса. Ще стане, но трябва да си измислиш някакво арбитриране, ще трябва да има някой Master във случая


Са като се замисля прави сте......
Predator_MF
ако за миг ми погледнеш кода ще видиш, че е float-нат TX-а. Това го взех от manual-а на С, но там няма нищо за мастър и слейв.
Редът #use rs232(baud=9600,xmit=PIN_A2,rcv ... брън-брън т.н. е само даден( и картинка как да ги вържеш) и пише, че лесен начин за предаване по една жица.
Как да ги вкарам в кода тези Master и slave?
Върнете се в началото
Predator_MF
Опитен потребител
Опитен потребител


Регистриран на: 29 Юли 2004
Мнения: 272
Местожителство: Русе

МнениеПуснато на: Сря Ное 09, 2005 10:52    Заглавие: Отговорете с цитат

Ами ти си го измисли, в зависимост от това какво точно ще правиш. Казвам "master" образно, идеята е да измислиш начин двете устройства (или ако са повече) да се разбират, т.е. да избегнеш варианта да предават едновременно. Предполагам не ти казвам нищо ново Wink
_________________
Форум за микроконтролери - www.mcu-bg.com
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Yahoo Messenger MSN Messenger
XXXXXXXXXX
Гост





МнениеПуснато на: Сря Ное 09, 2005 11:15    Заглавие: Отговорете с цитат

МММММММДА,
проблемът, е че все още съм начинаещ и това предполага че съм скаран с "С". Confused
Върнете се в началото
Потърси "Помощ PIC и RS232" в магазин за електроника Pulsator.bg : БЕЗПЛАТНА ДОСТАВКА над 90 лв.

Покажи мнения от преди:   
Потърси "Помощ PIC и RS232" в Интернет



Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Обща електроника - General Electronics Часовете са според зоната GMT + 2 Часа
Иди на страница 1, 2  Следваща
Страница 1 от 2

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети