 |
Форум за електроника Български форум за електроника, ремонти, схеми, документация
|
| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
XXXXXXXXXX Гост
|
Пуснато на: Вто Ное 08, 2005 18:22 Заглавие: Помощ PIC и RS232 |
|
|
Опитах се да напиша някакви прости програмки, ама нищо не става.
Идеята е че при натискане на бутонче се праща байт от единия пик на другия, като го приеме трябва да мигне св.диод и да върне байт на първия, като с това мигва св.диода на първия.
Трябва ми малко помощ, за да разбера къде е проблема.
кодът на първия пик е:
#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 Мнения: 730 Местожителство: ВеликоТърново
|
|
| Върнете се в началото |
|
 |
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.
Това вече майняма да стане
Ако искаш всичко да е по една жица няма да стане толкова просто, там вече ти трябва по сложен протокол, и то няма нужда да е 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 във случая  _________________ Форум за микроконтролери - www.mcu-bg.com |
|
| Върнете се в началото |
|
 |
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" образно, идеята е да измислиш начин двете устройства (или ако са повече) да се разбират, т.е. да избегнеш варианта да предават едновременно. Предполагам не ти казвам нищо ново  _________________ Форум за микроконтролери - www.mcu-bg.com |
|
| Върнете се в началото |
|
 |
XXXXXXXXXX Гост
|
Пуснато на: Сря Ное 09, 2005 11:15 Заглавие: |
|
|
МММММММДА,
проблемът, е че все още съм начинаещ и това предполага че съм скаран с "С".  |
|
| Върнете се в началото |
|
 |
|
|
Не Можете да пускате нови теми Не Можете да отговаряте на темите Не Можете да променяте съобщенията си Не Можете да изтривате съобщенията си Не Можете да гласувате в анкети
|
|