创建一个 ASM 文件,该文件将返回位于 8 个连续寄存器中的字符
我必须为 PIC18F452 创建一个 ASM 文件,该文件执行以下操作:
(a) 将标签 MapName
定义为 8 个连续寄存器中的第一个,其中包含不超过 7 个字符的以 null 结尾的字符串。 (b) 访问在 C 文件中声明的名为 MapIndex 的 8 位无符号整数变量。 (c) 定义一个 ASM 函数 getMapChar
,可以使用函数原型 char getMapChar(void)
从 C 调用该函数。当 MapIndex 的值 <= 7 时,该函数应返回适当的字符;如果 MapIndex 的值 > 7,则该函数应返回值 255。 7. (d) 使外部 C 文件可以访问标签 MapName
和 getMapChar
。
到目前为止,我的代码如下所示:
; Configuration word : WDT off, power-up timer on, code protect off, RC oscillator
list = p18f452
MapName equ 0x20
MapName1 equ 0x21
MapName2 equ 0x22
MapName3 equ 0x23
MapName4 equ 0x24
MapName5 equ 0x25
MapName6 equ 0x26
MapName7 equ 0x27
CurrentChar equ 0x28
extern MapIndex
org 0x00
goto getMapChar
getMapChar
movlw 0x00
movwf MapName7
GLOBAL getMapChar
GLOBAL MapName
END
我已经完成了 (a)、(b) 和 (d) 部分,但是在编写使用 的值自动移动通过每个连续寄存器的代码时遇到了一些问题地图索引
。有人可以帮我吗?我们将不胜感激。
I have to create an ASM file for the PIC18F452 that does the following:
(a) define the label MapName
as the first of 8 consecutive registers containing a null-terminated string of not more than 7 characters. (b) access an 8-bit unsigned integer variable called MapIndex
which was declared in a C file. (c) define an ASM function getMapChar
which can be called from C using the function prototype char getMapChar(void)
. The function should return the appropriate character when the value of MapIndex
is <= 7 or the value 255 if MapIndex
is > 7. (d) make the labels MapName
and getMapChar
accessible to an external C file.
My code so far is shown below:
; Configuration word : WDT off, power-up timer on, code protect off, RC oscillator
list = p18f452
MapName equ 0x20
MapName1 equ 0x21
MapName2 equ 0x22
MapName3 equ 0x23
MapName4 equ 0x24
MapName5 equ 0x25
MapName6 equ 0x26
MapName7 equ 0x27
CurrentChar equ 0x28
extern MapIndex
org 0x00
goto getMapChar
getMapChar
movlw 0x00
movwf MapName7
GLOBAL getMapChar
GLOBAL MapName
END
I have already done parts (a), (b) and (d) but I am having some problems with writing the code that moves through each of the consecutive registers automatically using the value of MapIndex
. Could anyone help me please? It would be much appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用FSR(文件选择寄存器)之一来寻址MapName文件寄存器:
如果变量MapName的所有文件寄存器不在8内位地址空间,然后将MapIndex添加到FSR0L后检查进位标志是否溢出。如果设置了进位,也会增加FSR0H文件寄存器。
You can use one of FSR (file select registers) to address MapName file registers:
If all file registers of variable MapName aren't inside 8 bit address space then after adding MapIndex to FSR0L check Carry flag for overflow. If Carry is set increase also the FSR0H file register.