我正在尝试在LCD屏幕上打印cseg中定义的字符串:
msg1_p: .db "This is the first message displayed on the first line of the lcd", 0
然后我试图模拟LCD左侧文本的移动。到目前为止,我能够打印LCD的字符串,现在我相信我需要遍历此字符串,返回内存中的地址,以便将其传递给我的显示功能。显示子程序在存储器中采用2字节地址,以便从该地址开始打印。这是它的样子:
ldi r16, high(msg1)
push r16
ldi r16, low(msg1)
push r16
call lcd_puts ;this function is used for writing to the board
pop r16
pop r16
以下是关于如何迭代指针的想法。
首先,我使用了一个名为msg1ptr的定义指针,并调用了
ldi XL, low(msg1ptr) ;pointers to pointer
ldi XH, high(msg1ptr)
然后我将msg1的地址存储在数据存储器中,我将字符串写入之前。
ldi r17, low(msg1)
ldi r16, high(msg1)
现在我将高字节和低字节加载到X指针中。
st X+, r17 ;load low msg1ptr
st X, r16
我现在有msg1ptr指向字符串的开头吗?
现在我不确定如何递增指针以便移动到内存中的下一个空格。基本上我如何加载msg1 + 1的值。
我的想法是有另一个指向X的指针,然后使用adiw命令或其他东西。说实话,我很失落,任何帮助都会非常感激。