ASM de bank seçimi hatası

Başlatan alisumer, 25 Aralık 2018, 14:35:38

alisumer

programda yazdığım bank seçimleri doğru olsada yanlış bankta işlem yapmaya çalışan hex dosyasına dönüşüyor
örneğin 
        MOVWF   TXREG        BSF STATUS, RP0 ; BANKSEL TXSTASERIPORT_TX_KONTROL        BTFSS   TXSTA,TRMT        GOTO    SERIPORT_TX_KONTROL        BCF STATUS , RP0        RETURN

TXSTA ,1 bitini kontrol edeceğine  bank0 gibi işleyip sürekli  RCSTA daki 1..biti kontrol ediyor MPLAB IDE V8.92 kullanıyorum programı derlerkende yanlış bank seçimi ile ilgili uyarı veriyor ama bütün bank seçimleri doğru tekrar tekrar kontrol etmeme rağmen çözemedim acaba yanlış tanımlanmıştır diye inc dosyasına bile baktı tanımlamayı değilde drek adres numarası versemde olmuyor her seferinde diğer bankta işlem yapmaya deçalışıyor similator programında mı var sorun yoksa mplab da mı başına böle birşey gelen varmı
Hep meraktan

ete

ASM yi az çok bilirim ancak program pek yazmam. Bu nedenle yazdıklarım tecrübeye değil mantığa dayanacak.
Programda kusur yok gözüküyor. Ancak Bank 1 seçimi için direk adresleme de  STATUS 6-5 bitlerine %01 değerinin verilmesi gerekiyor. sen ise yalnızca 5 nolu biti set ediyorsun. Acaba 6cı bit bu esnada 1 midir?
Default olarak bu bit 0 olabilir ama yinede programa bir satır ilave ederek 6. biti sıfırlasan olurmu acaba diyorum.

Ete

alisumer

o da olmuyor hocam banksel komutunu da kullandığımda asm kodu olarak rp1 i sıfırlıyor kodda da görünüyor  sanırım programlarımın birinde hata var proteusu kurup birde orda test edicem 5 dakkaya dener yüklenir sonucu yazarım eğer oda hata verirse sorun derlemede gibi disasembler ediyorum kod gene yanlış bank görünüyor
Hep meraktan

alisumer

evet işin kötü tarafı isiste çalışıyor ama farklı farklı üçtane disasembler programında ve pic similator idede de bank seçimi yanlış ve program takılıp kalıyor mplab ide de Message[302] E:\BLUETOOTH.ASM 32 : Register in operand not in bank 0.  Ensure that bank bits are correct. uyarısı veriyor yanlış bank diye ama derliyor..merak ettiğim konu bu hali ile atsam pic çalışırmı bank hatası tamda kritik yerde " txsta trmt " verinin txreg dan gönderildiğini doğrulayan bit  diğer bankta rcsta var ynı konumda onunda aynı biti hata varmı diye bakıyor tabi program kilit çözemedim olayı daha önce karşılaşan çözen varsa yardımcı olsun lütfen
Hep meraktan

alisumer

Hep meraktan

alisumer

Bu yazılan kod:
        LIST p=16F628A        #INCLUDE <p16f628a.inc>        __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF        TR500MS1 equ 0x020TR500MS2 equ 0x021 TR500MS3 equ 0x022YOL equ 0x023              ORG     0x00        GOTO    BASLABASLA           ;Başlangıç noktası        CLRF    PORTA        CLRF    PORTB        BSF STATUS, RP0 ; BANKSEL TRISA        MOVLW   b'11111111'        MOVWF   TRISA        MOVLW   b'00000000'        MOVWF   TRISB        ;BANKSEL SPBRG        MOVLW   d'32'        MOVWF   SPBRG        MOVLW   b'00100100'        MOVWF   TXSTA        BCF STATUS ,RP0 ;BANKSEL RCSTA        BSF     RCSTA,SPEN        BANKSEL CMCON        MOVLW   0x07        MOVWF   CMCON        GOTO    GOREVLERGOREVLER             BTFSS   PORTA,0        GOTO    TR_ISE0        BSF     PORTB,2        MOVLW   'A'        CALL    SERIPORT_GONDER        MOVLW   'L'        CALL    SERIPORT_GONDER        MOVLW   'İ'        CALL    SERIPORT_GONDER        MOVLW   '_'        CALL    SERIPORT_GONDER        MOVLW   'S'        CALL    SERIPORT_GONDER        MOVLW   'U'        CALL    SERIPORT_GONDER        MOVLW   'M'        CALL    SERIPORT_GONDER        MOVLW   'M'        CALL    SERIPORT_GONDER        MOVLW   'E'        CALL    SERIPORT_GONDER        MOVLW   'R'        CALL    SERIPORT_GONDER             BSF     PORTB,2        MOVLW   d'13'        CALL    SERIPORT_GONDER        ;BSF     PORTB,2        ;MOVLW   d'10'        ;CALL    SERIPORT_GONDER        CALL    BEKLE500MSTR_ISE0        BTFSS   PORTA,1        GOTO    GOREVLER        BSF     PORTB,2        MOVLW   'M'        CALL    SERIPORT_GONDER        MOVLW   'e'        CALL    SERIPORT_GONDER        MOVLW   'r'        CALL    SERIPORT_GONDER        MOVLW   'h'        CALL    SERIPORT_GONDER        MOVLW   'a'        CALL    SERIPORT_GONDER        MOVLW   'b'        CALL    SERIPORT_GONDER        MOVLW   'a'        CALL    SERIPORT_GONDER        MOVLW   ' '        CALL    SERIPORT_GONDER        MOVLW   'T'        CALL    SERIPORT_GONDER        MOVLW   'u'        CALL    SERIPORT_GONDER        MOVLW   'r'        CALL    SERIPORT_GONDER        MOVLW   'k'        CALL    SERIPORT_GONDER        MOVLW   'i'        CALL    SERIPORT_GONDER      MOVLW   'y'        CALL    SERIPORT_GONDER        MOVLW   'e'        CALL    SERIPORT_GONDER         BSF     PORTB,2        MOVLW   d'13'        CALL    SERIPORT_GONDER        BSF     PORTB,2        MOVLW   d'10'        CALL    SERIPORT_GONDER        CALL    BEKLE500MSTR_ISE2        GOTO    GOREVLERSERIPORT_GONDER        MOVWF   TXREG        BSF STATUS, RP0 ; BANKSEL TXSTASERIPORT_TX_KONTROL        BTFSS   TXSTA,TRMT        GOTO    SERIPORT_TX_KONTROL        BCF STATUS , RP0        RETURNBEKLE500MS      ;500ms bekle        MOVLW   d'5'        MOVWF   TR500MS1BEKLE500MS1        MOVLW   d'199'        MOVWF   TR500MS2BEKLE500MS2        MOVLW   d'166'        MOVWF   TR500MS3BEKLE500MS3        DECFSZ  TR500MS3, F        GOTO    BEKLE500MS3        DECFSZ  TR500MS2, F        GOTO    BEKLE500MS2        DECFSZ  TR500MS1, F        GOTO    BEKLE500MS1        RETURN                END     ; Program sonu

Buda derlemeden sonra disasembler ile alınan kod:
-----------------------------------PIC DISASSEMBLER LISTINGAddress Opcode  Instruction-----------------------------------0000    2801    GOTO L10001    0185    L1: CLRF 0x050002    0186    CLRF 0x060003    1683    BSF STATUS,RP00004    30FF    MOVLW 0xFF0005    0085    MOVWF 0x05 ;bank birde olmasına rağmen ve movwf trisa şeklinde 0006    3000    MOVLW 0x00 ;yazılmasına rağmen ısrarla hala bank0 daki adresi gösteriyor 0007    0086    MOVWF 0x06 ;burada hatalı olmasına rağmen problem yapmıyor nedense 0008    3020    MOVLW 0x200009    0099    MOVWF 0x19000A    3024    MOVLW 0x24000B    0098    MOVWF 0x18000C    1283    BCF STATUS,RP0000D    1798    BSF 0x18,7000E    1283    BCF STATUS,RP0000F    1303    BCF STATUS,RP10010    3007    MOVLW 0x070011    009F    MOVWF 0x1F0012    2813    GOTO L20013    1C05    L2: BTFSS 0x05,00014    282E    GOTO L30015    1506    BSF 0x06,20016    3041    MOVLW 0x410017    2057    CALL L40018    304C    MOVLW 0x4C0019    2057    CALL L4001A    30DD    MOVLW 0xDD001B    2057    CALL L4001C    305F    MOVLW 0x5F001D    2057    CALL L4001E    3053    MOVLW 0x53001F    2057    CALL L40020    3055    MOVLW 0x550021    2057    CALL L40022    304D    MOVLW 0x4D0023    2057    CALL L40024    304D    MOVLW 0x4D0025    2057    CALL L40026    3045    MOVLW 0x450027    2057    CALL L40028    3052    MOVLW 0x520029    2057    CALL L4002A    1506    BSF 0x06,2002B    300D    MOVLW 0x0D002C    2057    CALL L4002D    205D    CALL L5002E    1C85    L3: BTFSS 0x05,1002F    2813    GOTO L20030    1506    BSF 0x06,20031    304D    MOVLW 0x4D0032    2057    CALL L40033    3065    MOVLW 0x650034    2057    CALL L40035    3072    MOVLW 0x720036    2057    CALL L40037    3068    MOVLW 0x680038    2057    CALL L40039    3061    MOVLW 0x61003A    2057    CALL L4003B    3062    MOVLW 0x62003C    2057    CALL L4003D    3061    MOVLW 0x61003E    2057    CALL L4003F    3020    MOVLW 0x200040    2057    CALL L40041    3054    MOVLW 0x540042    2057    CALL L40043    3075    MOVLW 0x750044    2057    CALL L40045    3072    MOVLW 0x720046    2057    CALL L40047    306B    MOVLW 0x6B0048    2057    CALL L40049    3069    MOVLW 0x69004A    2057    CALL L4004B    3079    MOVLW 0x79004C    2057    CALL L4004D    3065    MOVLW 0x65004E    2057    CALL L4004F    1506    BSF 0x06,20050    300D    MOVLW 0x0D0051    2057    CALL L40052    1506    BSF 0x06,20053    300A    MOVLW 0x0A0054    2057    CALL L40055    205D    CALL L50056    2813    GOTO L20057    0099    L4: MOVWF 0x190058    1683    BSF STATUS,RP00059    1C98    L6: BTFSS 0x18,1005A    2859    GOTO L6005B    1283    BCF STATUS,RP0005C    0008    RETURN005D    3005    L5: MOVLW 0x05005E    00A0    MOVWF 0x20005F    30C7    L9: MOVLW 0xC70060    00A1    MOVWF 0x210061    30A6    L8: MOVLW 0xA60062    00A2    MOVWF 0x220063    0BA2    L7: DECFSZ 0x22,F0064    2863    GOTO L70065    0BA1    DECFSZ 0x21,F0066    2861    GOTO L80067    0BA0    DECFSZ 0x20,F0068    285F    GOTO L90069    0008    RETURN
Hep meraktan

alisumer

Arkadaşlar bank1 e geçmiyor BSF STATUS ,rp0 diyorum bank 1 yerine bank 0 daki tam karşılığını kontrol ediyor çipe yükledim basit bi programı o bile çalışmıyor ben mi hata yapıyorum anlamadım gitti yardım edecek yokmu mplab sildim tekrar yükledim olmuyor
Hep meraktan

ete

Bana göre ortaya çıkan sonuç şu; Öncelik sıralamasına göre veriyorum. Ya derleyici RP0 bitinin hangi bit olduğunu bilmiyor yada yanlış biliyor, Ya o işlemcide dahili rom da bir kusur var bu komutları işleyemiyor, yada derleyici bu komutları o işlemciye yaptıramıyor. Komut doğru o halde çalışması gerekirdi. Ben olsam o komut da Rp0 değilde hangi bit ise direk bit numarasını yazardım. Birde öyle dene bakalım aynı şeyi yapacakmıdır.

Ete

alisumer

mplab ide için pic basic pro eklentisi diye bişey yükledim ucube bir siteden tüm sebep oymuş tüm kayıtları sildim tekrar yükledim düzeldi sorun. aynı eklenti resmi sitesinde de mevcutmuş zaten boşuna heyecan yaptık
Hep meraktan

Powered by EzPortal