2013-06-07 2 views
1

그림 10f322에 대해 mpasm을 사용하여 어셈블리 프로그램을 만들었고이 프로그램에서 내 테이블의 모든 문자를 읽을 수있게하려고합니다.이 값을 내 WREG에 다시 배치합니다. 내 코드가 실행되면 FSR 레지스터에 저장된 값을 읽어 내고 지정된 주소에 저장된 값을 가져 오는 것으로 가정합니다. 이 FSR 값은 다음 문자를 얻기 위해 증가합니다. 그러나 프로그램을 실행할 때 포인터가 올바르게 증가하지만 메모리에 저장된 값이없는 것 같아 코드에서 정크 값을 가져옵니다. 내 지시문이 작동하지 않는 이유는 무엇입니까?PIC 10F322 db 테이블에서 읽음

  org  0x0000 
      FSR  Equ  0x04 
      INDF Equ  0x00 
    START 
      movlw TABLE 
      movwf FSR  ; move w value int address FSR 
    Loop: movf INDF, 0 ; move character pointed in table back to w reg 
      incf FSR  ; increment incfg 
      goto Loop 
    TABLE: 
      db "HELLO" 
      db "Man" 

    END 

나는 데이터가 프로그램 메모리에 저장하지 않습니다. 대신 데이터 메모리에 데이터를 넣고 싶습니다. DB와 마찬가지로 쉽게이 작업을 수행 할 수있는 어셈블리 지시문이 있습니까? 내 어셈블러는 MPASM입니다.

답변

2

당신은 FSRINDF 레지스터를 통해 코드 메모리에 액세스 할 수 없습니다,이 두 레지스터는 데이터 메모리에 액세스하기위한 것입니다. 조회 테이블을 대신 사용하십시오 :

 movlw 1    ;Read second byte in Table 
     movwf TableIndex  ;Store index 
     call ReadLookupTable ;Perform table read 
     ... 


ReadLookupTable 
     movlw high Table 
     movwf PCLATH 
     movlw low Table 
     addwf TableIndex, w  ;Add index to table pointer   
     movwf PCL     ;Perform computed jmp 
Table 
     retlw 10 
     retlw 11 
     ... 
+0

데이터를 저장하기 위해 프로그램 메모리가 아닌 액세스 데이터 메모리를 사용하고 싶습니다. DB와 같은 어셈블러 지시문을 통해이 작업을 수행하는 방법을 알려주시겠습니까? –

+1

@ Mr.Student : DB는 코드 바이트 선언에 사용되며 데이터 RAM에는 사용되지 않습니다. 데이터 RAM의 내용을 읽으려면 먼저 내용을 설정해야합니다. –

+0

그게 내가 묻고있는거야, 어떻게 데이터 RAM의 내용을 설정할 수 있습니까? –