PIC系列单片机数据存储器的特点和功能(中)
发布时间:2008/5/27 0:00:00 访问次数:616
http://www.hificat.com
学习pic单片机数据存储器时,不仅要了解各寄存器单元的功能,而且还应在编制程序时会调用它们完成编程目的。下面笔者将以编程实例说明它们的用途。
2间接寻址寄存器indf和fsr 位于pic单片机数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器indf是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器fsr(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器indf和fsr时,记住下述的逻辑关系对编程是有帮助的:使用寄存器indf的任何指令,在逻辑上都是对寄存器fsr所指向的ram进行访问,即对indf(本身)进行间接寻址(访问),读出的应是fsr内容。以下的一个简单程序是用间接寻址方式清除ram地址20h~2fh单元寄存器内容的实例。
movlw 0x20 ;20h→w,对指向ram单元的指针
;初始化
movwf fsr ;20h→fsr,fsr指向ram
loop clrf indf ;清除indf,即清除fsr内容所指
;向的单元20h→2fh
incf fsr ;(指针)fsr内容加1
btfss fsr,4;判别(指令)fsr的d3位,若为零
;执行下条循环指令;若为1间跳
;执行。
goto loop;跳转到loop(循环)
continue… ;已完成功能,继续执行程序
由上述指令看出,因寄存器indf和fsr的配合工作,达到了对ram地址20h~2fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使pic单片机的指令集得以精简。
说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“btfss fsr,4”比较关键。该条指令是保证题设中要选择ram地址单元上限值2fh时,其对应的二进制数为00101111b,此时fsr的第4位恰为1。所以上述指令中用了一条判断指令;btfss fsr,4,判断fsr的d3位值是否为1,若不为1而为0,则执行下条循环指令goto loop,使fsr中的地址不断加1,直到寄存器fsr的d3位为1时,这时它的内容代表的ram地址恰为2fh。
由此可见,学习pic单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。
2间接寻址寄存器indf和fsr 位于pic单片机数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器indf是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器fsr(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器indf和fsr时,记住下述的逻辑关系对编程是有帮助的:使用寄存器indf的任何指令,在逻辑上都是对寄存器fsr所指向的ram进行访问,即对indf(本身)进行间接寻址(访问),读出的应是fsr内容。以下的一个简单程序是用间接寻址方式清除ram地址20h~2fh单元寄存器内容的实例。
movlw 0x20 ;20h→w,对指向ram单元的指针
;初始化
movwf fsr ;20h→fsr,fsr指向ram
loop clrf indf ;清除indf,即清除fsr内容所指
;向的单元20h→2fh
incf fsr ;(指针)fsr内容加1
btfss fsr,4;判别(指令)fsr的d3位,若为零
;执行下条循环指令;若为1间跳
;执行。
goto loop;跳转到loop(循环)
continue… ;已完成功能,继续执行程序
由上述指令看出,因寄存器indf和fsr的配合工作,达到了对ram地址20h~2fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使pic单片机的指令集得以精简。
说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“btfss fsr,4”比较关键。该条指令是保证题设中要选择ram地址单元上限值2fh时,其对应的二进制数为00101111b,此时fsr的第4位恰为1。所以上述指令中用了一条判断指令;btfss fsr,4,判断fsr的d3位值是否为1,若不为1而为0,则执行下条循环指令goto loop,使fsr中的地址不断加1,直到寄存器fsr的d3位为1时,这时它的内容代表的ram地址恰为2fh。
由此可见,学习pic单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。
http://www.hificat.com
学习pic单片机数据存储器时,不仅要了解各寄存器单元的功能,而且还应在编制程序时会调用它们完成编程目的。下面笔者将以编程实例说明它们的用途。
2间接寻址寄存器indf和fsr 位于pic单片机数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器indf是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器fsr(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器indf和fsr时,记住下述的逻辑关系对编程是有帮助的:使用寄存器indf的任何指令,在逻辑上都是对寄存器fsr所指向的ram进行访问,即对indf(本身)进行间接寻址(访问),读出的应是fsr内容。以下的一个简单程序是用间接寻址方式清除ram地址20h~2fh单元寄存器内容的实例。
movlw 0x20 ;20h→w,对指向ram单元的指针
;初始化
movwf fsr ;20h→fsr,fsr指向ram
loop clrf indf ;清除indf,即清除fsr内容所指
;向的单元20h→2fh
incf fsr ;(指针)fsr内容加1
btfss fsr,4;判别(指令)fsr的d3位,若为零
;执行下条循环指令;若为1间跳
;执行。
goto loop;跳转到loop(循环)
continue… ;已完成功能,继续执行程序
由上述指令看出,因寄存器indf和fsr的配合工作,达到了对ram地址20h~2fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使pic单片机的指令集得以精简。
说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“btfss fsr,4”比较关键。该条指令是保证题设中要选择ram地址单元上限值2fh时,其对应的二进制数为00101111b,此时fsr的第4位恰为1。所以上述指令中用了一条判断指令;btfss fsr,4,判断fsr的d3位值是否为1,若不为1而为0,则执行下条循环指令goto loop,使fsr中的地址不断加1,直到寄存器fsr的d3位为1时,这时它的内容代表的ram地址恰为2fh。
由此可见,学习pic单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。
2间接寻址寄存器indf和fsr 位于pic单片机数据存储器的最顶端、地址00单元(地址码最小)的间接寻址寄存器indf是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器fsr(又称寄存器选择寄存器)配合工作,实现间接寻址目的。初学专用寄存器indf和fsr时,记住下述的逻辑关系对编程是有帮助的:使用寄存器indf的任何指令,在逻辑上都是对寄存器fsr所指向的ram进行访问,即对indf(本身)进行间接寻址(访问),读出的应是fsr内容。以下的一个简单程序是用间接寻址方式清除ram地址20h~2fh单元寄存器内容的实例。
movlw 0x20 ;20h→w,对指向ram单元的指针
;初始化
movwf fsr ;20h→fsr,fsr指向ram
loop clrf indf ;清除indf,即清除fsr内容所指
;向的单元20h→2fh
incf fsr ;(指针)fsr内容加1
btfss fsr,4;判别(指令)fsr的d3位,若为零
;执行下条循环指令;若为1间跳
;执行。
goto loop;跳转到loop(循环)
continue… ;已完成功能,继续执行程序
由上述指令看出,因寄存器indf和fsr的配合工作,达到了对ram地址20h~2fh的寄存器清零目的。由于完成上述功能的指令数很少,这就会简化指令系统,使pic单片机的指令集得以精简。
说明:上述各条指令易于看懂,所以无需再复述,但其中的一条判别指令“btfss fsr,4”比较关键。该条指令是保证题设中要选择ram地址单元上限值2fh时,其对应的二进制数为00101111b,此时fsr的第4位恰为1。所以上述指令中用了一条判断指令;btfss fsr,4,判断fsr的d3位值是否为1,若不为1而为0,则执行下条循环指令goto loop,使fsr中的地址不断加1,直到寄存器fsr的d3位为1时,这时它的内容代表的ram地址恰为2fh。
由此可见,学习pic单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。