| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Програмиране на PIC16C73 http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=7772 |
Страница 1 от 1 |
| Автор: | mitky406 [ Нед Апр 25, 2010 1:55 pm ] |
| Заглавие: | Програмиране на 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? (масива съм го поизтрил малко, защото ме ядоса) |
|
| Автор: | ji4ka [ Пон Апр 26, 2010 2:15 am ] |
| Заглавие: | |
Четенето на масив става през 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 |
|
| Автор: | mitky406 [ Пон Апр 26, 2010 2:05 pm ] |
| Заглавие: | |
Много ти благодаря! Само едно малко върпосче това което си ми написал "skpc " и "skpnc" това да го разбирам, че е тест на бит при преход? При мен ще бъде btfsc нали? |
|
| Автор: | ji4ka [ Пон Апр 26, 2010 2:20 pm ] |
| Заглавие: | |
skpc = btfss status,C - пропусни ако е Ц (кери,пренос) skpnc = btfsc status,C (пропусни ако е неЦ или нулЦ) Това са съкратени изписвания ,валидни в микрочипския асемблер, но ти по-добре си ползвай пълния запис. Има и skpz, skpnz и разни други. |
|
| Автор: | mitky406 [ Пон Апр 26, 2010 4:44 pm ] |
| Заглавие: | |
Там при изваждането не трябва ли да бъде decfsz вместо incfsz . Все пак намаляваме или аз нещо съм в грешка? Още едно въпросче мога ли направо да напиша subwf 0x31 за числото 49 |
|
| Автор: | mitky406 [ Пон Апр 26, 2010 5:08 pm ] |
| Заглавие: | |
Отговора на последни въпрос е sublw 0x31 ако на някой му трябва все пак. (трябва да ги науча всички функции |
|
| Автор: | mitky406 [ Пон Апр 26, 2010 8:57 pm ] |
| Заглавие: | |
Всичко стана идеално. ГОЛЯМО БЛАГОДАРЯ! п.п: Имам и за 8086 задачка ама да се надяваме да не ви занимавам. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|