理解PIC18F46K22间接寻址:简单例程解析

需积分: 24 0 下载量 62 浏览量 更新于2024-08-05 收藏 2KB TXT 举报
"该资源提供了一个关于PIC18F46K22微控制器使用汇编语言进行间接寻址的简单示例程序。通过这个例程,初学者可以理解间接寻址的概念及其在嵌入式系统中的应用。" 在嵌入式系统编程中,特别是在使用汇编语言时,间接寻址是一种重要的内存访问方式。在这个例程中,它被用来读取和存储以0x201为起始地址的数据块。PIC18F46K22是一款由Microchip Technology公司生产的8位微控制器,具有多个寄存器和内置功能,适用于各种嵌入式应用。 程序首先包含了PIC18F46K22的头文件`<p18f46k22.inc>`,这样可以访问到MCU的所有寄存器定义和指令集。接着,定义了三个常量`Wreg1`、`Wreg2`和`Wreg3`,分别用于存储数据传输次数、初始地址和数据长度。 程序流程如下: 1. 调用`W_init`和`STATUS_init`两个子程序进行寄存器和状态寄存器的初始化。 2. 使用`lfsrFSR2,0x201`设置数据存放的首地址,这里使用了FSR(File Select Register)寄存器进行间接寻址。FSR寄存器通常与数据指针寄存器(如INDF)一起工作,用于指定内存访问的地址。 3. 初始化完成后,调用`get_data`子程序来读取并存储数据块。 4. `get_data`子程序内部先调用`get_addr`获取数据块的首地址,并将地址加载到TBLPTR(Table Pointer)寄存器中,用于表格查找操作。 5. 使用表格循环读取(TBLRD)指令读取数据,并根据进位情况更新TBLPTR寄存器,确保正确遍历整个数据块。 6. 数据读取后,使用POSTINC2指令将数据存放到FSR2指示的地址,并自动将FSR2的值加一,实现连续存储。 7. 使用`decfsz Wreg1`检查数据传输次数,直到所有数据传输完成,程序返回。 这个例程中还定义了一个名为`Hanzi`的数据块,包含一系列数字,作为间接寻址的测试数据。 通过理解和分析这个例程,初学者可以掌握PIC18F46K22的间接寻址操作,这对于理解和编写涉及内存访问的嵌入式程序至关重要。同时,这个例程也展示了如何使用汇编语言进行嵌入式系统的底层编程。