2017-04-05 10 views
0

저는 AtmelStudio 7을 사용하는 AVR ATmega16 마이크로 컨트롤러 용 어셈블리에이 코드를 작성하고 있습니다. 프로그램 메모리에서 데이터를 읽고 사용하려고합니다. 나는 프로그램 메모리를 가리 키기 위해 Z 레지스터를 사용해야하고 미리 저장된 데이터는 어셈블러에 의해 "BCDTo7_Seg"레이블로 인식되어야한다는 것을 알고있다. 그것은 그 테이블에있는 첫 번째 숫자를 읽습니다. (디버거를 사용하여이 절차를 볼 수 있습니다.)하지만, Z 레지스터를 올리면 주소가 증가하지만 읽기 값은 여전히 ​​동일합니다! 누군가 나를 도울 수 있기를 바랍니다. 다음은 코드의 일부입니다.프로그램 메모리에서 일련의 데이터 읽기 - AVR ATmega16

/* Simply start reading from program memory */ 
    /* The reading from program memory must be done with the starting address: BCDTo7_Seg LABEL */ 

    /* INITIALIZE Z POINTER */ 
    ldi ZH,high(BCDTo7_Seg << 1) 
    ldi ZL,low(BCDTo7_Seg << 1) 
    clr R23 
    /* R23 contains the data must be written to the 7 segment */ 
    /* Post Increment Z after reading each number */ 
    lpm R23,Z+ 
    /* decrement R16 */ 
    dec R16 
    /* Check the loop end point */ 
    brne R_W 
    rjmp start 

답변

1

실행될 때마다 포인터가 처음에 설정됩니다.

ldi ZH,high(BCDTo7_Seg << 1) 
ldi ZL,low(BCDTo7_Seg << 1)