|
Виж темите без отговор | Виж активните теми
Дата и час: Пет Авг 21, 2026 10:34 am
|
Страница 1 от 1
|
[ 7 мнения ] |
|
| Автор |
Съобщение |
|
mitky406
Ранг: Минаващ
Регистриран на: Нед Апр 25, 2010 1:53 pm Мнения: 5
|
 Програмиране на PIC16C73
Насочиха ме към вас та по темата
Начинаещ съм в тази среда, за това моля за малко помощ.
Имам за задача на направя програма на асемблер,която:
1.Да се състави подпрограма, пресмятаща израза:
R=A.7+2.B-49
,където A и B са еднобайтови променливи в данновата памет
2. Подпрограмата да се извиква за елементите на 2 масива от по 32 байтови числа.
Измисленото от мен до момента:
---------------------------------------------------
#include "P16C73.inc"
REGA equ 0x20
RLA equ 0x21
RHA equ 0x22
REGB equ 0x23
RLB equ 0x24
RHB equ 0x25
RRR equ 0x26
MAS equ 0x30
org 0x0000
goto start
org 0x0010
FOR
movf REGA,0
movwf RLA
bcf STATUS,C
rlf RLA,1
rlf RHA
rlf RLA,1
rlf RHA
movf RLA,0
addwf REGA,0
btfsc STATUS,C
incf RHA,1
addwf REGA,0
btfsc STATUS,C
incf RHA,1
addwf REGA,0
btfsc STATUS,C
incf RHA,1
movwf RLA
movf REGB,0
movwf RLB
bcf STATUS,C
rlf RLB,1
rlf RHB
btfsc STATUS,C
incf RHB,1
movf RLA,0
addwf RLB,0
btfsc STATUS,C
incf RHB,1
movwf RLB
movf RHA,0
addwf RHB,0
movwf RHB
retlw 0
start
next
movlw MAS
movwf REGA
call FOR
goto next
NOP
END
----------------------------------------
Първия ми въпрос е как от двубайтово число да извадя числото 49
(не съм много сигурен дали двубайтовото ми събиране е правилно, за това моля някой да му хвърли едно око)
Другия ми въпрос е защо когато от масива зареждам символите в данновата памет вмето да отива стойността от клетката отива адреса на масива
Пример с началото. Ако задам началото на масива да е числото 4 в REGA не отива стойността 4, а отива 30?
(масива съм го поизтрил малко, защото ме ядоса)
|
| Нед Апр 25, 2010 1:55 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Четенето на масив става през INDF и FSR. Първо във FSR се зарежда адреса на клетката и след това стойността й се прочита от INDF. Може просто да инкрементираш FSR и четеш INDF-a.
;================================================
; Double Precision Addition/Subtraction 16bit 2's compl.
;================================================
;
Sub16s
movf BL,w
subwf AL,f
movf BH,w
skpc
incfsz BH,w
subwf AH,f
return
;
Add16s
movf BL,w
addwf AL,f ; add lsb.AN526
skpnc ; add in carry
incf AH,f
movf BH,w
addwf AH,f ; add msb
return
|
| Пон Апр 26, 2010 2:15 am |
|
 |
|
mitky406
Ранг: Минаващ
Регистриран на: Нед Апр 25, 2010 1:53 pm Мнения: 5
|
Много ти благодаря!
Само едно малко върпосче това което си ми написал "skpc " и "skpnc" това да го разбирам, че е тест на бит при преход? При мен ще бъде btfsc нали?
|
| Пон Апр 26, 2010 2:05 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
skpc = btfss status,C - пропусни ако е Ц (кери,пренос)
skpnc = btfsc status,C (пропусни ако е неЦ или нулЦ)
Това са съкратени изписвания ,валидни в микрочипския асемблер, но ти по-добре си ползвай пълния запис. Има и skpz, skpnz и разни други.
|
| Пон Апр 26, 2010 2:20 pm |
|
 |
|
mitky406
Ранг: Минаващ
Регистриран на: Нед Апр 25, 2010 1:53 pm Мнения: 5
|
Там при изваждането не трябва ли да бъде decfsz вместо incfsz . Все пак намаляваме или аз нещо съм в грешка?
Още едно въпросче мога ли направо да напиша subwf 0x31 за числото 49
|
| Пон Апр 26, 2010 4:44 pm |
|
 |
|
mitky406
Ранг: Минаващ
Регистриран на: Нед Апр 25, 2010 1:53 pm Мнения: 5
|
Отговора на последни въпрос е sublw 0x31 ако на някой му трябва все пак.
(трябва да ги науча всички функции  )
|
| Пон Апр 26, 2010 5:08 pm |
|
 |
|
mitky406
Ранг: Минаващ
Регистриран на: Нед Апр 25, 2010 1:53 pm Мнения: 5
|
Всичко стана идеално. ГОЛЯМО БЛАГОДАРЯ!
п.п: Имам и за 8086 задачка ама да се надяваме да не ви занимавам.
|
| Пон Апр 26, 2010 8:57 pm |
|
|
|
Страница 1 от 1
|
[ 7 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|