Отговори на тема  [ 14 мнения ] 
Помощ за MPLAB SIM 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

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


Пет Юни 08, 2012 10:23 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Помощ за MPLAB SIM
И MPLAB SIM и процесора правят каквото им "казваш". Въпросът е дали това, което им казваш е това, което искаш да се случва. Дай го тоя примерен код да видиме къде е проблема!


Пет Юни 08, 2012 10:29 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Юни 08, 2012 10:09 am
Мнения: 5
Мнение Re: Помощ за MPLAB SIM
Според мен проблема е в някаква настройка.Преди командата END симулатора ли,или логиката на самия чип изрежда всички клетки от паметта след програмата,които са празни и като стигне до последния адрес започва от начало програмата


Пет Юни 08, 2012 11:15 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Помощ за MPLAB SIM
Предполагам очакваш някой да ти каже "отиди в подменю Х, натисни средния бутон и сложи отметка най-долу" и след вълшебната процедура проблема ти е в историята. Такъв съвет и такова решение може да получиш във форум на екстрасенси и гадатели. Ако си мислиш, че ще се юрнат всички да изреждат възможни проблеми а ти да казваш "и това не е дай нататък" също си се объркал.

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


Пет Юни 08, 2012 1:46 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Юни 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Re: Помощ за MPLAB SIM
Както имаш
Код:
ORG 0x00 goto MAIN

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


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

Код:
tuk nop
     goto tuk

_________________
Хайде де!


Последна промяна dan на Пет Юни 08, 2012 2:49 pm, променена общо 1 път



Пет Юни 08, 2012 2:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 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
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Re: Помощ за MPLAB SIM
carbeeta, егати синхронизацията имаме с теб :)

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

_________________
Хайде де!


Последна промяна dan на Пет Юни 08, 2012 2:52 pm, променена общо 1 път



Пет Юни 08, 2012 2:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Помощ за MPLAB SIM
Точно това редактирах, че сме писали по едно и също време и в общи линии едно и също :D


Пет Юни 08, 2012 2:51 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Юни 08, 2012 10:09 am
Мнения: 5
Мнение Re: Помощ за MPLAB SIM
Това за прекъсването е друг въпрос.Ставаше дума за края на програмата и как работи процесора след това.Аз не съм виждал програма да приключва по друг начин.Пробвал съм да укажа GOTO 1FFF,но нямаше по-различен резултат.Не съм виждал нещо по-различно по програмите ,а и в литературата.Не виждам смисъл да цикли в края,евентуално принудително ли да дам goto main за да прескочи този интервал от празната памет на процесора.


Пет Юни 08, 2012 3:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: Помощ за MPLAB SIM
Това не е като да пишеш програми за PC. Става и GOTO main преди END. Но трябва да има безкраен цикъл без значение дали виждаш смисъл или не. Дали ще цикли на един адрес или ще изпълнява безкрайно дадена подпрограма е все едно.


Пет Юни 08, 2012 3:11 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Вто Окт 03, 2006 11:58 am
Мнения: 924
Местоположение: Ботевград
Мнение Re: Помощ за MPLAB SIM
hvelikov написа:
Това за прекъсването е друг въпрос.Ставаше дума за края на програмата и как работи процесора след това.Аз не съм виждал програма да приключва по друг начин.Пробвал съм да укажа GOTO 1FFF,но нямаше по-различен резултат.Не съм виждал нещо по-различно по програмите ,а и в литературата.Не виждам смисъл да цикли в края,евентуално принудително ли да дам goto main за да прескочи този интервал от празната памет на процесора.


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


Пет Юни 08, 2012 3:46 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Юни 08, 2012 10:09 am
Мнения: 5
Мнение Re: Помощ за MPLAB SIM
Аз имам и един друг въпрос.Те въпросите ми са много,ама ще съ въздържам да питам много засега.Правя си експерименти да записвам EEPROM, като я използвам за начална инициализация,а и като дебъгване - дали ми работи програмата или не,до къде е стигнала.Но като включа подпрограмка за запис в EEPROM и като запиша PIC-а,след това при четене ми показва някакви стойности,още докато е на програматора.Това го регистрирах сега с PIC16F877a и JDM програматор, а преди време с 16F628a и един програматор на Неомонтана.Този ефект от програматорите ли е,може ли да се избегне някак си?


Пет Юни 08, 2012 4:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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

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


Пет Юни 08, 2012 6:12 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 14 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни