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

Помощ за MPLAB SIM
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10208
Страница 1 от 1

Автор:  hvelikov [ Пет Юни 08, 2012 10:23 am ]
Заглавие:  Помощ за MPLAB SIM

В момента се уча да програмирам PIC16F877A.Правя си елементарни програмки и пробвам като ги зареждам в PIC-а с JDM.Експериментирам с прекъсвания,но нещо не се получава. По-точно пробвам прекъсване с TMR0.Като стартирам програмката в MPLAB SIM, изпълнява си се кода,стига до края на програмата( на асемблер) и преди END симулатора стои и прави празни цикли.Завърта един немалък брой празни цикли и след това започва отначалото програмата.Но когато прави тези празни цикли се случва прекъсването и хардуерния стек се записва някаква стойност която е извън програмната област.Като приключи прекъсването, програмата не се връща от където е прекъснала.Струвами се че същото се случва и в чипа при стартиране.Как се решава този проблем, има ли някакви хелпове или уроци в нета от където мога да прочета нещо по въпроса?Аз намерих нещо, но това бяха общи положения и команди, които са ми ясни. :?:

Автор:  CarBeta [ Пет Юни 08, 2012 10:29 am ]
Заглавие:  Re: Помощ за MPLAB SIM

И MPLAB SIM и процесора правят каквото им "казваш". Въпросът е дали това, което им казваш е това, което искаш да се случва. Дай го тоя примерен код да видиме къде е проблема!

Автор:  hvelikov [ Пет Юни 08, 2012 11:15 am ]
Заглавие:  Re: Помощ за MPLAB SIM

Според мен проблема е в някаква настройка.Преди командата END симулатора ли,или логиката на самия чип изрежда всички клетки от паметта след програмата,които са празни и като стигне до последния адрес започва от начало програмата

Автор:  CarBeta [ Пет Юни 08, 2012 1:46 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

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

Дай си кода да се види какво го караш да прави тоя процесор, защото той сам решения не може да взима! Просто изпълнява командите на задклавиатурното устройство.

Автор:  hvelikov [ Пет Юни 08, 2012 2:01 pm ]
Заглавие:  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

Автор:  dan [ Пет Юни 08, 2012 2:48 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Както имаш
Код:
ORG 0x00 goto MAIN

така трябва и да имаш
Код:
ORG 0x04 goto programa_za_obrabotka_na_prekysvaneto


Директивата ORG казва на компилатора къде да се запише дадена инструкция. В случая с ORG 0x04 това е четвърти адрес, където отива контролера при възникване на разрешено прекъсване.
Освен това в края на програмата това END не е достатъчно. То е за компилатора. Контролера ще стигне до последната инструкция (където и да се намира тя) и ако няма указано място на където да отиде, просто ще продължи напред (което значи, че програмния брояч ще се увеличава с 1 докато не се препълни). Иначе казано трябва да кажеш на контролера какво да прави като стигне до края на програмата. Най-простото (за експеримент) може да го накараш да "цикли" на последните две инструкции:

Код:
tuk nop
     goto tuk

Автор:  CarBeta [ Пет Юни 08, 2012 2:49 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Програмата ти стига до END и затова тръгва отначало. Преди END сложи GOTO $ да цикли там ако не искаш да прави друго.
Нямаш подпрограма за обслужване на прекъсването. На адреса за прекъсване имаш XORWF PORTB. При прекъсване програмата отива там и започва да изпълнява кода надолу. И съответно никога не излиза от това прекъсване.

edit:
засекли сме се с Дан...

Автор:  dan [ Пет Юни 08, 2012 2:49 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

carbeeta, егати синхронизацията имаме с теб :)

Между другото, hvelikov, тази работа без четене не става. малко е трудно в началото, но ... като се замисля и после не е много по-лесно :)

Автор:  CarBeta [ Пет Юни 08, 2012 2:51 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Точно това редактирах, че сме писали по едно и също време и в общи линии едно и също :D

Автор:  hvelikov [ Пет Юни 08, 2012 3:02 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Това за прекъсването е друг въпрос.Ставаше дума за края на програмата и как работи процесора след това.Аз не съм виждал програма да приключва по друг начин.Пробвал съм да укажа GOTO 1FFF,но нямаше по-различен резултат.Не съм виждал нещо по-различно по програмите ,а и в литературата.Не виждам смисъл да цикли в края,евентуално принудително ли да дам goto main за да прескочи този интервал от празната памет на процесора.

Автор:  CarBeta [ Пет Юни 08, 2012 3:11 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Това не е като да пишеш програми за PC. Става и GOTO main преди END. Но трябва да има безкраен цикъл без значение дали виждаш смисъл или не. Дали ще цикли на един адрес или ще изпълнява безкрайно дадена подпрограма е все едно.

Автор:  Zeus [ Пет Юни 08, 2012 3:46 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

hvelikov написа:
Това за прекъсването е друг въпрос.Ставаше дума за края на програмата и как работи процесора след това.Аз не съм виждал програма да приключва по друг начин.Пробвал съм да укажа GOTO 1FFF,но нямаше по-различен резултат.Не съм виждал нещо по-различно по програмите ,а и в литературата.Не виждам смисъл да цикли в края,евентуално принудително ли да дам goto main за да прескочи този интервал от празната памет на процесора.


Както казаха колегите, различно е от писането на програми за PC. Когато пишеш програма за компютъра, например да ти изведе съобщение на екрана, програмата приключва и ти виждаш съобщението си на екрана, благодарение на операционната система, която се грижи за всичко.
При контролерите, свърши ли програмата, дърпа се шалтера на всичко. Ако се светнал един светодиод на някой порт, бог знае какво ще е състоянието на порта след края на програмата. Така че, като твоята програма си свърши работата, зацикляш процесора, за да гарантираш, че нещата дето си задал ще останат такива. Още повече, като имаш прекъсване, то ще се извиква в този безкраен цикъл.

Автор:  hvelikov [ Пет Юни 08, 2012 4:15 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

Аз имам и един друг въпрос.Те въпросите ми са много,ама ще съ въздържам да питам много засега.Правя си експерименти да записвам EEPROM, като я използвам за начална инициализация,а и като дебъгване - дали ми работи програмата или не,до къде е стигнала.Но като включа подпрограмка за запис в EEPROM и като запиша PIC-а,след това при четене ми показва някакви стойности,още докато е на програматора.Това го регистрирах сега с PIC16F877a и JDM програматор, а преди време с 16F628a и един програматор на Неомонтана.Този ефект от програматорите ли е,може ли да се избегне някак си?

Автор:  CarBeta [ Пет Юни 08, 2012 6:12 pm ]
Заглавие:  Re: Помощ за MPLAB SIM

hvelikov написа:
Аз имам и един друг въпрос.Те въпросите ми са много,ама ще съ въздържам да питам много засега.Правя си експерименти да записвам EEPROM, като я използвам за начална инициализация,а и като дебъгване - дали ми работи програмата или не,до къде е стигнала.Но като включа подпрограмка за запис в EEPROM и като запиша PIC-а,след това при четене ми показва някакви стойности,още докато е на програматора.Това го регистрирах сега с PIC16F877a и JDM програматор, а преди време с 16F628a и един програматор на Неомонтана.Този ефект от програматорите ли е,може ли да се избегне някак си?

Направи втори опит да зададеш тоя въпрос, че няколко пъти го четох това и не можах да го разбера!

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