Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Прекъсване от USART
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=76
Страница 1 от 3

Автор:  Predator_MF [ Чет Окт 28, 2004 11:09 am ]
Заглавие:  Прекъсване от USART

Абе нещо не мога да си вкарам PIC16F877A в прекъсване с источник USART...
Правя го със следните стъпки:
    1. bsf INTCON, PEIE
    2. bsf PIE1, RCIE
    3. bsf INTCON,GIE


След това пикчето го затварям в някакъв цикъл, пращам му нещо по RS232 ама то не отговаря... Дали не съм изтървал някаква важна особеност?

Автор:  bateAz [ Чет Окт 28, 2004 11:18 am ]
Заглавие: 

Ami като ти дойде ти какво правиш? Става дума, като ти дойде прекъсването. Щото там имаше някави битове, които трябва програмно да се нулират - маските за прекъсване в някакъв статус регистър. Не го ли нулираш "ръчно" постоянно ще си влизаш в прекъсването. За съжаление не ми е тук пищова за ПИЦ16, а не ми се тегли. Погледни го при тебе, и ако не стане пак се обади. Ша го изтегля, де ша ода.

Автор:  bateAz [ Чет Окт 28, 2004 11:24 am ]
Заглавие: 

А може и въобще да не получаваш прекъсване. Заплюй си някой пин за индикатор, нулирай го и като влезаш в прекъсване го сетни. Повече не го пипай, за да знаеш дали изобщо те прекъсва. Виж с каква скорост работиш. Провери с мултицета дали пинчето RxD се смъква като му пращаш символи ( нормално трябва да е High при мълчание ) Ако пак не стане, значи днес не му е ден. :?

Автор:  Predator_MF [ Чет Окт 28, 2004 11:39 am ]
Заглавие: 

В INT секцията (0х0004) съм си сложил нормалните "context save" и "context restore" процедури + BEEP процедурка (за писукане на пиезозумер) и нулиране на флага RCIF (той всъщност се нулира при четене на RCREG). Досега прекъсвал PIC от всякакви источници, ама не и от USART. Типа на комуникация ми е RS-485, 115200, тествах го без прекъсване - работи. Имам и два светодиода за TX и RX, очевадно е че PIC-а приема нещо, ама не получавам BEEP. Пробвах прекъсване с TMR0, да разбера дали нещо не съм оплескал по INTCON, ама всичко е OK (писука си когато трябва).

Автор:  Predator_MF [ Чет Окт 28, 2004 11:40 am ]
Заглавие: 

За какъв пищов става дума?

Автор:  Mozfet [ Чет Окт 28, 2004 11:47 am ]
Заглавие: 

Аз съм правил точно такова прекъсване. Целта ми беше да препрограмирам някои параметри на ПИЦ-а чрез Хипертерминала. Бях задал и ключова дума. Ако съвпадне се изпълнява цялото прекъсване, аке не - не.
Но както казва батето, трябва да имаш: bcf PIE1, RCIE.
Даже нулирам и приемния регистър.

Автор:  bateAz [ Чет Окт 28, 2004 11:54 am ]
Заглавие: 

Ти на изпити не си ли ходил, та ме питаш за какъв пищов става дума - откъдето се преписва :wink:
Става дума за .PDF-а.
А сега сериозно - да не би beep() да ти е доста дълго, т.е пускаш го да пищи и чакаш да мине време. През това време може да ти дойдат една манифестация от символи при тази скорост. Какъв дебъгер ползваш? Сложи точка на прекъсване в процедурата на прекъсването и гледай какво става.

Автор:  Predator_MF [ Чет Окт 28, 2004 12:23 pm ]
Заглавие: 

Аз помислих, че ще ме застреляш заради тъпите въпроси дето ги задавам... :lol:

BEEP() ми е дългичко около 100ms, ама аз през това време нищо не пращам по USART, ей ся ще погледна какво ми става в интеръпта...Дебъгера ми е MPLAB-SIM

Автор:  Predator_MF [ Чет Окт 28, 2004 12:54 pm ]
Заглавие: 

Абе нещо не ми е вред...В момента в който сетна PIE1,<RCIE> (разрешавам прекъсване от USART reciever-а) PIC-a ми влиза в прекъсване, и дори да нулирам флага за прекъсване, продължава да си стои там :shock:

Автор:  Цецо [ Чет Окт 28, 2004 2:06 pm ]
Заглавие: 

Не помня точно, ама май симулатора не поддържа UART

Автор:  bateAz [ Чет Окт 28, 2004 2:08 pm ]
Заглавие: 

Пич, може да е малко дърводелско, ама защо не постнеш текста на прекъсването?

Автор:  Predator_MF [ Чет Окт 28, 2004 2:30 pm ]
Заглавие: 

Baudrate-а ми е абсолютно точен (PIC@20MHz; BRG=1; SPBRG=10 - това ми е за 115200bps, тествах го без прекъсвания). Работя върху желязото :D . За постване на кода: той е вкъщи, аз съм на работа, тука го написах подобен::




    ORG 0x0004
    INT
    push
    ..
    BEEP
    bcf PIR1,RCIF
    pop
    retfie


    INIT_USART
    ..
    bsf PIE1,RCIE ; ей тука разрешавам прекъсвания от USART
    ..
    ..
    main
    дрън_дрън
    goto main



Автор:  Цецо [ Чет Окт 28, 2004 3:40 pm ]
Заглавие: 

ами изглежда като структура вярно. Ама що не ползвате хардуерни дебъгери бе хора? Щеше отдавна да си рабрал какъв е проблема. Сега така единственото което предложи батето - набеждаваш един пин за индикатор и го блъскаш насам, натам из кода да видиш докъде си стигнал. Ама така е ебати сляпата история. Един ICD1 се прави за 20 лева сумарно, що се мъчите.

Автор:  Predator_MF [ Чет Окт 28, 2004 3:53 pm ]
Заглавие: 

Ами просто не съм опирал до чак такива проблеми, че да ми трябва ICD... А за ICD2 колко пари да си приготвя?

Автор:  bateAz [ Чет Окт 28, 2004 4:46 pm ]
Заглавие: 

По-подробно, момче, по-подробно. Интересувам се кои регистри запазваш, как, в какъв ред, кои ползваш в тялото на процедурата, кои в бипкането, с кои банки работиш и т.н. То е ясно, че като идея е вярно, но фактът, че гърми, показва, че нещо си пропуснал. Айде като се прибереш, copy + paste

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