| Предишната тема :: Следващата тема |
| Автор |
Съобщение |
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-а
 _________________ Не поправяй нещо което работи дори и когато няма причини да работи. |
|
| Върнете се в началото |
|
 |
harleybg Опитен потребител


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

Регистриран на: 02 Яну 2005 Мнения: 212
|
Пуснато на: Вто Фев 28, 2006 12:53 Заглавие: |
|
|
Съветвам те да прочетеш внимателно опиканието и директивите на асемблера. Това ще ти даде отговор на доста въпроси.
А, ако искаш да използваш по-сложна аритметика - минавай на С, защото на асемблер е мъка. |
|
| Върнете се в началото |
|
 |
|