pic系列单片机品种虽多,但各产品内部硬件资源的数据存储器设置仍是很有规律的。笔者以pic16c71a和pic16c63/65/65a两个品种为实例,查看它们片内数据存储器的结构,找出它们的特点并说明某些寄存器的主要功能,以供用户快速编程。表1和表2分别是pic16c71a和pic16c63/65/65a产品片内数据存储器的资源表,其它系列产品的片内数据存储器结构的资源与表1、表2资源都很相似,其差别仅仅是片内功能部件的种类和数量不同(pic16c57/58单片机有4个存储体)。笔者从下述几个方面介绍表1和表2的特点和主要功能。
1、统一编址 pic系列单片机各类数据存储器都是以寄存器方式工作和寻址的。专用寄存器包括了定时寄存器tmro、选择寄存器option(又称为项选寄存器)、程序计数器pcl、状态寄存器status、间接寻址寄存器indf和fsr、端口i/o寄存器(如porta、portb…)和相对应的端口i/o控制寄存器(又称为端口i/o数据方向寄存器,如trias、trisb…)、保持寄存器pclath和中断控制寄存器intcon等。上述的专用寄存器都是pic16c63/65/65a和pic16c71a共同有的,它们不仅是寄存器名称、功能相同,而且寄存器的地址也完全相同。如果再查看其它pic单片机,如pic16c62/62a/64/64a、pic16c71/72/73/73a/74/74a、pic16c8x……它们的专用寄存器名称凡是与以上相同者其地址也完全与上述相同,可见尽管pic系列单片机品种多,但掌握它们的规律后,学习是不难的。
型号不同的pic单片机,其数据存储器的内部资源仅仅是功能种类和多少的不同。如pic16c71a型,其引脚为18脚,主要功能是带有8位的a/d转换部件,有4个a/d通道模拟输入,所以在表1中与其a/d转换部件有关的专用寄存器adres(用于存放a/d转换的数值结果)、a/d控制寄存器adcon0(用于控制a/d转换器的操作)和a/d控制寄存器adcon1(用于控制选择a/d引脚的功能)等。对pic16c65/65a型,其引脚是40脚的,其功能比pic16c71a单片机强,因而数据存储器表2中的专用寄存器的种类就比表1的增加了很多。
专用寄存器的每个寄存单元都有相对应的固定用途,它们可分成两类:一类用于供cpu操作(如indf和fsr、status、pcl……);另一类用于控制外围功能芯片的操作。
学习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单片机数据存储器中的专用寄存器时,不必要对每个产品的专用寄存器进行学习,只需先学习它们的共同点,然后选中一个产品型号的专用寄存进行详细分析,有条件时进行必要的相关指令操作,就能完全掌握单片机技术。
3、a/d转换寄存器 这里摘录一段笔者从网上下载的用pic16f877单片机芯片(带flash存储器的)完成有关a/d转换的源程序部分指令,并用它说明有关a/d转换寄存器在指令中的用法。这里先引用部分源程序,源程序中的注释是笔者按照指令在程序中的作用所加的注释(不是某条指令的直接功能),这是初学者读以下指令时应注意的。a/d转换器部分源程序清单如下:
demo 877?asm
list p=16f877
org 0x00 ;复位向量
nop ;空操作
start banksel portc ;选择portc所在
;数据存储器的存储
;体(实为bank0)
clrf portc ;对rc口清零
movlw b′01000001′ ;a/d转换时钟选
;择fosc/8,打开
; a/d转换器
movwf adcon0 ;设定了a/d转换
;操作部分参数
banksel option_reg ;选择option所在
;数据存储器的存储 ;体(实为bank1)
movlw b′10000111′ ;设置预分频器tm
; r0,分频率1∶256
movwf option ;完成上条指令设置
clrf trisc ;设定rc口(8位)
;为输出
movlw b′0001110′ ;选中模拟量通道1
;(ra1/an1)
movwf adcon1 ;模拟基准电压
vref为芯片电源电压,选择通道1(ra1/an1)完成
main …
要阅读上述的指令,读者还需了解以下必要的补充知识。
(1)关于用pic16f877单片机作a/d转换器。pic16f877单片机是具有多通道模拟量输入的8位a/d转换器。上述的源程序是利用该pic产品作a/d转换的一种实验程序,其实验目的是用pic16f877单片机来实现一个通道的8位a/d转换,并将转换结果以二进制形式经rc口输出再由led显示。实验的电路原理如附图(笔者根据源程序而绘出的pic16f877a/d转换硬件电路图)所示。
(2)编制与a/d转换器有关的专用寄存器指令。要读懂上述的源程序,应根据以下的线索:1)把握源程序的编写惯例;2)选择rc口和对它清零;3)给a/d控制寄存器adcon0的各位置数,达到a/d转换时选择a/d位的采样时间,即注释中的a/d时钟选择;4)选择专用寄存器option并给它各位置数,达到选择预分频器tmr0和确定其分频率(1∶256);5)设定rc口为输出,以保证led显示;6)给a/d控制器adcon1的各位置数,以确定pic16f877单片机的ra1口为模拟量的输入通道。并选中芯片电源作基准电压。读者若需深入了解a/d控制寄存器adcon0和adcon1的各位详细功能,请参看有关pic单片机书籍的详细介绍。
a/d转换的主程序(main)约有13条,将在本版pic系列专题的后期结合实验板的编程器介绍。pic系列单片机的其它专用寄存器,如trisa、status bank等,本报在前几期有关pic单片机的文中均已介绍过。
pic单片机
LED降压型恒流芯片 世微AP5162 宽电压降压恒流IC
如何解决加密货币面临剩余的问题
回顾上海兆芯新CPU成功流片,对标英特尔i5分析情况解析
华为nova7 SE曝光:搭载麒麟820E处理器、内置4000mAh电池,支持40W超级快充
iOS比Android安全?谷歌高管:我们更安全
PIC 8位单片机的分类和特点
一文看懂低压断路器工作原理及选型
光学成像技术:阿贝成像原理和实验解析
台积电官董事会会议上宣布的两个消息,释放出来三个信号
【大大芯方案】让数据传输更安全高效,大联大推出基于芯驰 G9X 的汽车智能网关方案
iphone8什么时候上市?iphone8最新消息:前置指纹+快充+玻璃机身,你想要的功能iphone8统统都有
收购传言不实,联想与Marvell否认联姻
浅析微服务架构中的监控系统
工信部鼓励企业根据使用场景研发换电模式车型
盘点卷积神经网络中十大操作
家用智能设备也有被黑的风险 六招教你如何防黑客
被逼加速的数字化转型,其实是为企业高质量发展播下了种子
勒索删库 仍可恢复 数据值得相信Cyber Recovery的五个理由
5G将成为构建未来智慧社会的核心基础
PCB设计中的错误