Форум за електроника Форуми Форум за електроника

Форум за електроника
Български форум за електроника, ремонти, схеми, документация
 
 Въпроси/ОтговориВъпроси/Отговори   ТърсенеТърсене   ГрупиГрупи   Регистрирайте сеРегистрирайте се 
 ПрофилПрофил   Влезте, за да видите съобщенията сиВлезте, за да видите съобщенията си   ВходВход 

Service Manual Search :   Enhanced by: Jabse.com : българската търсачка
Програмиране на Асемблер с MPLAB

 
Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Общи приказки - Just talking
Предишната тема :: Следващата тема  
Автор Съобщение
harleybg
Опитен потребител
Опитен потребител


Регистриран на: 23 Апр 2004
Мнения: 381
Местожителство: София

МнениеПуснато на: Нед Фев 26, 2006 22:25    Заглавие: Програмиране на Асемблер с MPLAB Отговорете с цитат

Код:

         list      p=16F84
         #include   <p16F84.inc>
         #include   <prekysvane.inc>
         __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;defenirane na konstanti
w         EQU         0
f         EQU         1
Broq4      EQU         H'0C'
;555555555555555555555555555555   
         ORG         H'0000'
         goto      start
         ORG         H'0004'
         goto      prekysvane

start       bsf         STATUS, RP0
         movlw      B'11000111'
         movwf      OPTION_REG
         bcf         STATUS, RP0
         CLRF      PORTB
         BSF         STATUS, RP0
         MOVLW      B'11111110'
         MOVWF      TRISB
         BCF         STATUS, RP0
         GOTO      generirane

interval    bcf         INTCON, T0IF
         CLRF      TMR0
         MOVLW      D'8'
         MOVWF      Broq4
EDNO      bcf         INTCON, T0IF ; NULIRA FLAGA ZA PREPYLWANE
DVE         btfss      INTCON, T0IF
         GOTO      DVE
         DECFSZ      Broq4, f
         GOTO      EDNO
         RETURN
         

generirane   bsf         PORTB, 0
         CALL      interval
         bcf         PORTB, 0
         call       interval
         goto      generirane   
         END


Когато възникне външно прекъсване има обръщане към подпрограмата prekysvane, която е записана във файла #include <prekysvane.inc> .
Ето съдържанието на prekysvane.inc
Код:

         #include <p16F84.inc>
prekysvane   

Когато напиша инструкция след етикета prekysvanе при компилирането дава грешка. Това става така защото инструкцията се записва в програмната памет на адреса на начално установяване Н'0000', който е зает. Проблема може да се реши ако задавам на всички инструкции от програмата в коя точно клетка от паметта да се записват. Но нямам представа как става това.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Desert Leo
Опитен потребител
Опитен потребител


Регистриран на: 02 Яну 2005
Мнения: 212

МнениеПуснато на: Пон Фев 27, 2006 14:26    Заглавие: Отговорете с цитат

Защо
#include <prekysvane.inc>
си го сложил в началото на програмата и защо изобщо си нарекъл така. *.inc разширението по приницип се използва за служебни подпрограми, които настройват определени параметри, като в случая дефиниране на използвания контролер. Не това ти пречи обаче.
Директивата include поставя текста на файла на мястото, където е директивата. Затова инструкцията ти се записва на първия адрес.

Сложи
#include <prekysvane> (prekysvane е обикновен асемблерски файл prekysvane.asm)
преди етикета start, goto prekysvane го махни и пробвай пак.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
HarleyBG_
Гост





МнениеПуснато на: Пон Фев 27, 2006 15:42    Заглавие: Отговорете с цитат

Да, стана.
А има ли начин да определям адреса на който да се записва инструкцията?
Върнете се в началото
Desert Leo
Опитен потребител
Опитен потребител


Регистриран на: 02 Яну 2005
Мнения: 212

МнениеПуснато на: Пон Фев 27, 2006 16:14    Заглавие: Отговорете с цитат

Не разбирам защо ти трябва.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
harleybg
Опитен потребител
Опитен потребител


Регистриран на: 23 Апр 2004
Мнения: 381
Местожителство: София

МнениеПуснато на: Пон Фев 27, 2006 17:34    Заглавие: Отговорете с цитат

Ами просто питам дали може.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Desert Leo
Опитен потребител
Опитен потребител


Регистриран на: 02 Яну 2005
Мнения: 212

МнениеПуснато на: Пон Фев 27, 2006 17:40    Заглавие: Отговорете с цитат

Никога не ми е трябвало и не съм се замислял.
Иначе, може и да може от спортна злоба - имаш програмен брояч.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
wire
Активен потребител
Активен потребител


Регистриран на: 20 Яну 2006
Мнения: 53
Местожителство: Пловдив

МнениеПуснато на: Пон Фев 27, 2006 21:27    Заглавие: Отговорете с цитат

има начин да определяш адреса и ти си го използвал, това е - ORG H'xxxx'
инструкцията след него ще е на адрес: xxxx
Вземи си прочети поне Help-а
Rolling Eyes
_________________
Не поправяй нещо което работи дори и когато няма причини да работи.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
harleybg
Опитен потребител
Опитен потребител


Регистриран на: 23 Апр 2004
Мнения: 381
Местожителство: София

МнениеПуснато на: Вто Фев 28, 2006 12:09    Заглавие: Отговорете с цитат

Един друг въпрос:
Могат ли да се обединят 2 клетки от РАМ паметта с някоя команда?
Да кажем, че имамаме едно 16 битово число. Понеже РАМ паметта е 8 битова то ще трябва да се запише в 2 отделни клетки. И проблема идва като трябва да се извършват аритметични операции с това число (събиране и изваждане).
Като решение може и да се използва алгоритъм, който да следи дали в най-старшия бит на първия байт има преход 1-->0 и това да се отрази в младшия бит на втория байт.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
Desert Leo
Опитен потребител
Опитен потребител


Регистриран на: 02 Яну 2005
Мнения: 212

МнениеПуснато на: Вто Фев 28, 2006 12:53    Заглавие: Отговорете с цитат

Съветвам те да прочетеш внимателно опиканието и директивите на асемблера. Това ще ти даде отговор на доста въпроси.
А, ако искаш да използваш по-сложна аритметика - минавай на С, защото на асемблер е мъка.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Потърси "Програмиране на Асемблер с MPLAB" в магазин за електроника Pulsator.bg : БЕЗПЛАТНА ДОСТАВКА над 90 лв.

Покажи мнения от преди:   
Потърси "Програмиране на Асемблер с MPLAB" в Интернет



Създайте нова тема   Напишете отговор    Форум за електроника Форуми -> Общи приказки - Just talking Часовете са според зоната GMT + 2 Часа
Страница 1 от 1

 
Към:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети