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 TXSTA
SERIPORT_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 0x020
TR500MS2 equ 0x021
TR500MS3 equ 0x022
YOL equ 0x023
     

        ORG     0x00
        GOTO    BASLA

BASLA           ;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    GOREVLER

GOREVLER     
        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    BEKLE500MS
TR_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    BEKLE500MS

TR_ISE2
        GOTO    GOREVLER

SERIPORT_GONDER
        MOVWF   TXREG
        BSF STATUS, RP0 ; BANKSEL TXSTA
SERIPORT_TX_KONTROL
        BTFSS   TXSTA,TRMT
        GOTO    SERIPORT_TX_KONTROL
        BCF STATUS , RP0
        RETURN

BEKLE500MS      ;500ms bekle
        MOVLW   d'5'
        MOVWF   TR500MS1
BEKLE500MS1
        MOVLW   d'199'
        MOVWF   TR500MS2
BEKLE500MS2
        MOVLW   d'166'
        MOVWF   TR500MS3
BEKLE500MS3
        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 LISTING
Address Opcode  Instruction
-----------------------------------
0000    2801    GOTO L1
0001    0185    L1: CLRF 0x05
0002    0186    CLRF 0x06
0003    1683    BSF STATUS,RP0
0004    30FF    MOVLW 0xFF
0005    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 0x20
0009    0099    MOVWF 0x19
000A    3024    MOVLW 0x24
000B    0098    MOVWF 0x18
000C    1283    BCF STATUS,RP0
000D    1798    BSF 0x18,7
000E    1283    BCF STATUS,RP0
000F    1303    BCF STATUS,RP1
0010    3007    MOVLW 0x07
0011    009F    MOVWF 0x1F
0012    2813    GOTO L2
0013    1C05    L2: BTFSS 0x05,0
0014    282E    GOTO L3
0015    1506    BSF 0x06,2
0016    3041    MOVLW 0x41
0017    2057    CALL L4
0018    304C    MOVLW 0x4C
0019    2057    CALL L4
001A    30DD    MOVLW 0xDD
001B    2057    CALL L4
001C    305F    MOVLW 0x5F
001D    2057    CALL L4
001E    3053    MOVLW 0x53
001F    2057    CALL L4
0020    3055    MOVLW 0x55
0021    2057    CALL L4
0022    304D    MOVLW 0x4D
0023    2057    CALL L4
0024    304D    MOVLW 0x4D
0025    2057    CALL L4
0026    3045    MOVLW 0x45
0027    2057    CALL L4
0028    3052    MOVLW 0x52
0029    2057    CALL L4
002A    1506    BSF 0x06,2
002B    300D    MOVLW 0x0D
002C    2057    CALL L4
002D    205D    CALL L5
002E    1C85    L3: BTFSS 0x05,1
002F    2813    GOTO L2
0030    1506    BSF 0x06,2
0031    304D    MOVLW 0x4D
0032    2057    CALL L4
0033    3065    MOVLW 0x65
0034    2057    CALL L4
0035    3072    MOVLW 0x72
0036    2057    CALL L4
0037    3068    MOVLW 0x68
0038    2057    CALL L4
0039    3061    MOVLW 0x61
003A    2057    CALL L4
003B    3062    MOVLW 0x62
003C    2057    CALL L4
003D    3061    MOVLW 0x61
003E    2057    CALL L4
003F    3020    MOVLW 0x20
0040    2057    CALL L4
0041    3054    MOVLW 0x54
0042    2057    CALL L4
0043    3075    MOVLW 0x75
0044    2057    CALL L4
0045    3072    MOVLW 0x72
0046    2057    CALL L4
0047    306B    MOVLW 0x6B
0048    2057    CALL L4
0049    3069    MOVLW 0x69
004A    2057    CALL L4
004B    3079    MOVLW 0x79
004C    2057    CALL L4
004D    3065    MOVLW 0x65
004E    2057    CALL L4
004F    1506    BSF 0x06,2
0050    300D    MOVLW 0x0D
0051    2057    CALL L4
0052    1506    BSF 0x06,2
0053    300A    MOVLW 0x0A
0054    2057    CALL L4
0055    205D    CALL L5
0056    2813    GOTO L2
0057    0099    L4: MOVWF 0x19
0058    1683    BSF STATUS,RP0
0059    1C98    L6: BTFSS 0x18,1
005A    2859    GOTO L6
005B    1283    BCF STATUS,RP0
005C    0008    RETURN
005D    3005    L5: MOVLW 0x05
005E    00A0    MOVWF 0x20
005F    30C7    L9: MOVLW 0xC7
0060    00A1    MOVWF 0x21
0061    30A6    L8: MOVLW 0xA6
0062    00A2    MOVWF 0x22
0063    0BA2    L7: DECFSZ 0x22,F
0064    2863    GOTO L7
0065    0BA1    DECFSZ 0x21,F
0066    2861    GOTO L8
0067    0BA0    DECFSZ 0x20,F
0068    285F    GOTO L9
0069    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