|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:40 am
|
Страница 1 от 1
|
[ 14 мнения ] |
|
| Автор |
Съобщение |
|
hvelikov
Ранг: Минаващ
Регистриран на: Пет Юни 08, 2012 10:09 am Мнения: 5
|
 Помощ за MPLAB SIM
В момента се уча да програмирам PIC16F877A.Правя си елементарни програмки и пробвам като ги зареждам в PIC-а с JDM.Експериментирам с прекъсвания,но нещо не се получава. По-точно пробвам прекъсване с TMR0.Като стартирам програмката в MPLAB SIM, изпълнява си се кода,стига до края на програмата( на асемблер) и преди END симулатора стои и прави празни цикли.Завърта един немалък брой празни цикли и след това започва отначалото програмата.Но когато прави тези празни цикли се случва прекъсването и хардуерния стек се записва някаква стойност която е извън програмната област.Като приключи прекъсването, програмата не се връща от където е прекъснала.Струвами се че същото се случва и в чипа при стартиране.Как се решава този проблем, има ли някакви хелпове или уроци в нета от където мога да прочета нещо по въпроса?Аз намерих нещо, но това бяха общи положения и команди, които са ми ясни. 
|
| Пет Юни 08, 2012 10:23 am |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
И MPLAB SIM и процесора правят каквото им "казваш". Въпросът е дали това, което им казваш е това, което искаш да се случва. Дай го тоя примерен код да видиме къде е проблема!
|
| Пет Юни 08, 2012 10:29 am |
|
 |
|
hvelikov
Ранг: Минаващ
Регистриран на: Пет Юни 08, 2012 10:09 am Мнения: 5
|
 Re: Помощ за MPLAB SIM
Според мен проблема е в някаква настройка.Преди командата END симулатора ли,или логиката на самия чип изрежда всички клетки от паметта след програмата,които са празни и като стигне до последния адрес започва от начало програмата
|
| Пет Юни 08, 2012 11:15 am |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
Предполагам очакваш някой да ти каже "отиди в подменю Х, натисни средния бутон и сложи отметка най-долу" и след вълшебната процедура проблема ти е в историята. Такъв съвет и такова решение може да получиш във форум на екстрасенси и гадатели. Ако си мислиш, че ще се юрнат всички да изреждат възможни проблеми а ти да казваш "и това не е дай нататък" също си се объркал.
Дай си кода да се види какво го караш да прави тоя процесор, защото той сам решения не може да взима! Просто изпълнява командите на задклавиатурното устройство.
|
| Пет Юни 08, 2012 1:46 pm |
|
 |
|
hvelikov
Ранг: Минаващ
Регистриран на: Пет Юни 08, 2012 10:09 am Мнения: 5
|
 Re: Помощ за MPLAB SIM
Примерна програма е следната.Една част от нея са излишни неща,тя беше по-голяма,но я съкратих и я направих нещо много просто.Основния проблем е защо преди END симулатора спира и върти определен брой празни цикли.С включен Trace виждам че обхожда областта от паметта извън обхвата на програмата, след END.Не ми е ясно кое не е наред.Смятам че и процесора се случва същото
PROCESSOR 16F877A #include p16f877A.inc __config 0x3f39
TMP1 EQU H'20' TMP2 EQU H'21' BROIACH1 EQU H'22' TIME1 EQU H'23' TIME2 EQU H'24' TIME3 EQU H'25' TIME4 EQU H'26' TMP3 EQU H'27' EEPROMADR EQU H'28' EEPROMDATA EQU H'29' BITZAPIS EQU H'2A' TIMER1 EQU H'2B' SEKUNDI EQU H'2C' MINUTI EQU H'2D' CHASOVE EQU H'2E' EEPROMDATA1 EQU H'30' EEPROMADR1 EQU H'31' STAT EQU H'32' WORK EQU H'33' INTCON1 EQU H'34' BITSTATUS EQU H'35' INDIKACIA1 EQU H'36' INDIKACIA2 EQU H'37' INDIKACIA3 EQU H'38' INDIKACIA4 EQU H'39' TMP4 EQU H'3A' INDIKACIA5 EQU H'3B' INDIKACIA6 EQU H'3C' TMP5 EQU H'3D' TMP6 EQU H'3E' PORTA1 EQU H'40' PORTB1 EQU H'41' TMP7 EQU H'42' PCO EQU H'43' PIE EQU H'44' RISA EQU H'45' RISB EQU H'46' MCON EQU H'47' TCON EQU H'48' PIR EQU H'49' OPT EQU H'50' TIME10 EQU H'51' ORG H'00' GOTO MAIN
TIME8 MOVLW H'02' MOVWF TIME4 MOVLW B'00000100' XORWF PORTB TIME7 MOVLW H'02' MOVWF TIME3 MOVLW B'00010000' XORWF PORTB TIME6 MOVLW H'08' MOVWF TIME2 MOVLW B'00000010' XORWF PORTB TIME5 MOVLW H'0F' MOVWF TIME1 MOVLW B'00000100' XORWF PORTB LOOP BCF STATUS,2 DECF TIME1 BTFSS STATUS,2 GOTO LOOP NOP DECFSZ TIME2 GOTO TIME5 DECFSZ TIME3 GOTO TIME6 DECFSZ TIME4 GOTO TIME7 RETURN
MAIN BSF STATUS,5 BCF STATUS,6 BTFSC PCON,1 GOTO LOOP1
BSF PCON,1 BCF STATUS,5 MOVLW B'00000111' MOVWF CMCON BSF STATUS,5 MOVLW B'00000111' MOVWF ADCON1 BSF STATUS,5 BCF STATUS,6 MOVLW B'11111100' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB MOVLW B'00000101' MOVWF OPTION_REG MOVLW B'00100000' MOVWF INTCON BCF STATUS,5
LOOP1 CALL TIME8 BCF STATUS,5 END
|
| Пет Юни 08, 2012 2:01 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Re: Помощ за MPLAB SIM
Както имаш така трябва и да имаш Директивата ORG казва на компилатора къде да се запише дадена инструкция. В случая с ORG 0x04 това е четвърти адрес, където отива контролера при възникване на разрешено прекъсване. Освен това в края на програмата това END не е достатъчно. То е за компилатора. Контролера ще стигне до последната инструкция (където и да се намира тя) и ако няма указано място на където да отиде, просто ще продължи напред (което значи, че програмния брояч ще се увеличава с 1 докато не се препълни). Иначе казано трябва да кажеш на контролера какво да прави като стигне до края на програмата. Най-простото (за експеримент) може да го накараш да "цикли" на последните две инструкции:
_________________ Хайде де!
Последна промяна dan на Пет Юни 08, 2012 2:49 pm, променена общо 1 път
|
| Пет Юни 08, 2012 2:48 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
Програмата ти стига до END и затова тръгва отначало. Преди END сложи GOTO $ да цикли там ако не искаш да прави друго. Нямаш подпрограма за обслужване на прекъсването. На адреса за прекъсване имаш XORWF PORTB. При прекъсване програмата отива там и започва да изпълнява кода надолу. И съответно никога не излиза от това прекъсване.
edit: засекли сме се с Дан...
Последна промяна CarBeta на Пет Юни 08, 2012 2:51 pm, променена общо 1 път
|
| Пет Юни 08, 2012 2:49 pm |
|
 |
|
dan
Ранг: Форумен бог
Регистриран на: Вто Май 29, 2007 2:23 pm Мнения: 3714 Местоположение: Високо в планината
|
 Re: Помощ за MPLAB SIM
carbeeta, егати синхронизацията имаме с теб  Между другото, hvelikov, тази работа без четене не става. малко е трудно в началото, но ... като се замисля и после не е много по-лесно 
_________________ Хайде де!
Последна промяна dan на Пет Юни 08, 2012 2:52 pm, променена общо 1 път
|
| Пет Юни 08, 2012 2:49 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
Точно това редактирах, че сме писали по едно и също време и в общи линии едно и също 
|
| Пет Юни 08, 2012 2:51 pm |
|
 |
|
hvelikov
Ранг: Минаващ
Регистриран на: Пет Юни 08, 2012 10:09 am Мнения: 5
|
 Re: Помощ за MPLAB SIM
Това за прекъсването е друг въпрос.Ставаше дума за края на програмата и как работи процесора след това.Аз не съм виждал програма да приключва по друг начин.Пробвал съм да укажа GOTO 1FFF,но нямаше по-различен резултат.Не съм виждал нещо по-различно по програмите ,а и в литературата.Не виждам смисъл да цикли в края,евентуално принудително ли да дам goto main за да прескочи този интервал от празната памет на процесора.
|
| Пет Юни 08, 2012 3:02 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
Това не е като да пишеш програми за PC. Става и GOTO main преди END. Но трябва да има безкраен цикъл без значение дали виждаш смисъл или не. Дали ще цикли на един адрес или ще изпълнява безкрайно дадена подпрограма е все едно.
|
| Пет Юни 08, 2012 3:11 pm |
|
 |
|
Zeus
Ранг: Почетен член
Регистриран на: Вто Окт 03, 2006 11:58 am Мнения: 924 Местоположение: Ботевград
|
 Re: Помощ за MPLAB SIM
Както казаха колегите, различно е от писането на програми за PC. Когато пишеш програма за компютъра, например да ти изведе съобщение на екрана, програмата приключва и ти виждаш съобщението си на екрана, благодарение на операционната система, която се грижи за всичко. При контролерите, свърши ли програмата, дърпа се шалтера на всичко. Ако се светнал един светодиод на някой порт, бог знае какво ще е състоянието на порта след края на програмата. Така че, като твоята програма си свърши работата, зацикляш процесора, за да гарантираш, че нещата дето си задал ще останат такива. Още повече, като имаш прекъсване, то ще се извиква в този безкраен цикъл.
|
| Пет Юни 08, 2012 3:46 pm |
|
 |
|
hvelikov
Ранг: Минаващ
Регистриран на: Пет Юни 08, 2012 10:09 am Мнения: 5
|
 Re: Помощ за MPLAB SIM
Аз имам и един друг въпрос.Те въпросите ми са много,ама ще съ въздържам да питам много засега.Правя си експерименти да записвам EEPROM, като я използвам за начална инициализация,а и като дебъгване - дали ми работи програмата или не,до къде е стигнала.Но като включа подпрограмка за запис в EEPROM и като запиша PIC-а,след това при четене ми показва някакви стойности,още докато е на програматора.Това го регистрирах сега с PIC16F877a и JDM програматор, а преди време с 16F628a и един програматор на Неомонтана.Този ефект от програматорите ли е,може ли да се избегне някак си?
|
| Пет Юни 08, 2012 4:15 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: Помощ за MPLAB SIM
Направи втори опит да зададеш тоя въпрос, че няколко пъти го четох това и не можах да го разбера!
|
| Пет Юни 08, 2012 6:12 pm |
|
|
|
Страница 1 от 1
|
[ 14 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|