1. pic 单片机 参考文献
PIC8位单片机的基本组成
PIC系列8位单片机为适应各种不同的用途,有多种型号可供选用。但是,尽管PIC单片机有不同的档次和型号,但其最基本的组成则大同小异。因此,在这里先从型号PIC16F84的单片机入手,讨论其基本组成。PIC16F84是双列直插式(DIP)塑料封装,最大时钟频率可达4MHz。现为Microchip公司的独家产品,关于其具体技术指标,可查阅该公司的产品手册,或在网址www.microchip.com上查找。
PIC16F84单片机的引脚排列可参阅本期本版的16F8X系列简介一文。本文的附图是该器件的主要组成部分。PIC16F84虽然体积不大,但仍然是一个完整的计算机,它有一个中央处理器(CPU)、程序存储器(ROM)、数据寄存器(RAM)和两个输入/输出口(I/O口)。
和其它品种的单片机一样,CPU是此单片机的“首脑”,它从程序存储器中读取和执行指令。在取指和执行时,还可同时对数据寄存器进行取数(前已介绍PIC16F84采用哈佛结构)。由附图可明显看出,程序存储器和数据存储器各有一条总线与CPU相连。有些CPU将CPU内部的寄存器与其外部的RAM是分开管理的,但PIC单片机不是这样,它的通用数据RAM也归为寄存器,称为File寄存器。在PC16F84中,有68个字节的通用RAM,其地址为0CH~4FH。
除了通用数据寄存器外,还有一些专用寄存器,其中最常用的工作寄存器为“W寄存器”。CPU将工作数据存放在W寄存器中。寄存器W的作用与其它单片机中的“累加器A”相似。此外,还有几个专用寄存器,它们分别以某种方式控制PIC的运作。
PIC16F84的程序存储器是由Flash(闪速)EPROM构成,它可用电来记录和擦除,而在断电时,仍可保留其内容。PIC单片机有些型号的程序存储器用的是EPROM,需要用紫外线来擦除;还有一些型号是一次性可编程(OTP)的产品(一经编程便不能再擦除)。
PIC16F84有两个输入/输出口,即A口和B口。每个口的每个引脚可单独设定为输入或输出。各个口的位是从0开始编号的。当A口为输出方式时,其第4位(即RA4)为开路集电极(或开路漏极)输出,而B口及A口其它各位为常规的全CMOS驱动电路。这些功能必须注意,否则会在编程时出错。CPU对每个端口都按一个字节8位来处理,但A口只有5位引脚。
PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。
摘 要:在介绍空调室内机控制器功能的基础上,从软件的规划着手,详细介绍了室内机软件的总体设计过程、详细设计过程以及编码的实现,并在此基础上重点给出了空调室内机运行模式的特点和结合这些特点如何用MPLAB集成开发环境去实现各运行模式。
关键词:空调;控制器;单片机;软件设计
单片机软件实现是单片机系统应用的重点,他是在硬件设计基础上实现程序设计的重要环节。单片机程序设计一般包括以下几个步骤:软件规划、流程图编制、代码编写。由于单片机系统具有软硬件紧密结合的特点,因此在基于某种单片机系统的软件开发时,应充分了解该系统实现的硬件环境,同时也应该在系统设计与硬件设计阶段,对软件设计有一个大体的规划。因此,本文在介绍室内机控制器功能的基础上,重点讨论如何用软件实现该室内机的功能。
一:PIC16C71的问题和对策
问题1:在芯片进入低功耗睡眠模式 (SLEEP MODE)后,其振荡脚将处于浮态,这将使芯片的睡眠功耗上升,比原手册中的指标高了10μA以上。
对策:在振荡脚OSC1和地 (GND)之间加一10MΩ电阻可防止OSC1进入浮态,且不会影响正常振荡。
问题2:RA口方向寄存器TRISA目前只是一个4位寄存器,对应于RA0~RA3,并非手册中所言是8位寄存器,对应于RA0~RA4,即RA4并没有相应的输入/输出方向控制位,它是一个具有开极输出,施密特输入I/O脚。
对策:避免使用对RA口进行读-修改-写指令(如BCF RA, BSF RA),以免非意愿地改变RA4的输入/输出状态。对于RA口的操作应采用寄存器的操作方式(MOVWF RA)。
问题3:当CPU 正在执行一条对INTCON寄存器进行读-修改-写指令时,如果发生中断请求,则读中断例程会被执行二次。这是因为当中断请求发生后INTCON寄存器中的GIE位会被硬件自动清零(屏蔽所有中断),并且程序转入中断例程入口(0004H)。当GIE位被清零后,如果这时正好CPU在执行一条对 INTCON的读-修改-写指令(如BSF INTCON等),则 GIE位还会被写回操作重新置1,这样会造成CPU二次进入中断例程。
对策:如果在程序中需对INTCON的某一中断允许位进行修改,则应事先置GIE=0
,修改完成后再恢复GIE=1。
…………..
BCF INTCON, GIE
BSF INTCON, ×××
BSF INTCON, GIE
…………..
图1
问题4:当芯片电压VDD加电上升时间大于100μs时,电源上电复位电路POR和电源上电延时器PWRT可能不能起正常的作用,而使芯片的复位出现不正常(即PC≠复位地址)。一般在这种情况下建议不要采用PWRT。
对策:如果VDD上升时间很长,此芯片一般需较长的电源上电延时,可靠的电源上电延时方法如图1所示,在MCLR端外接复位电路。
问题5:如果在A/D转换中用RA3作为参考电压输入,则最大满量程误差(NFS)要大于手册中的指标。实际情况如表1所示。
表1 A/D满量程误差表
VREF源
(5.12V) 满量程误差
(NFS)
VDD <±1 LSb
RA3 <±2.5 LSb
二:PIC16C84的问题和对策
问题1:PIC16C84的内部的E2PROM数据存储器的E/W周期偶尔会超出最大值(10ms)。
对策:在程序中应该用EECON1寄存器中的WR位来判断写周期的完成,或是启用“写周期完成中断”功能,这两种方法可保证写入完成。
问题2:VDD和振荡频率的关系如表2所示。
VDD 振荡方式 最高频率
2V-3V RC, LP 2MHZ,200MHZ
3V-6V RC,XT,LP 4MHZ,200MHZ
4.5V-5.5V HS 10MHZ
2. 最近刚学PIC单片机,有个程序看不懂,请高手帮下,越详细越好:
INDF 和 FSR两个寄存器构成了一个间接寻址的作用。
FSR有点像C语言中的指针,INDF是一个虚拟的寄存器,对它操作其实是对FSR锁指向的内存单元操作。
简单的说,当20h这个数赋给了FSR,那么就是FSR作为指针指向了内存中地址为20h的这个单元(以下就用<20h>来表示这个单元,以区别十六进制的20h这个数值),此时INDF就被映射到<20h>。
从头说起:
1:W被赋值20h这个数;2:FSR被赋值和W寄存器相同的数20H,此时FSR指向了<20h>;3:此时W寄存器因为没被改变过,所以其数值依然是十六进制的20h那么MOVWF 20H其实就是把W里的数据赋值给<20h>这个内存单元 也就是 <20h> = 20H ;
4:重点来了 INCF INDF,让INDF自加1。前面说了对INDF操作其实就是对FSR所指向的单元操作,也就等同于 INCF <20h>(真正程序里不能这么写的,因为<20h>这杨写法是错误的) 类似C与语言中的<20h>++
5:FSR自加1,FSR内部的值等于21h所以FSR指向了<21h>这个内存单元。
6:<20h>单元的数值高4位和低4位转换一下数据。所以 <20h> = 02h
7:把<20h>的内容赋值给W寄存器,所以w = 02h
8:FSR此时 等于21h ,把21h和W的02h做与运算,结构 0 赋值给FSR。
3. pic单片机怎么用户汇编语言实现位取反
用COMF指令。
例如对于一个自定义的变量TEMP
PIC10、PIC12、PIC16系列单片机用 COMF TEMP,1
PIC18系列单片机用 COMF TEMP,1,0
PIC24、dsPIC系列单片机用 COM TEMP (注意这两个系列的单片机用的汇编的不是COMF,而是COM)
另外PIC32系列单片机没用过其汇编,所以没法说是怎么写。
4. pic单片机中ADDWF PCL,F 中f是指的什么意思呢,请高手指点啊!!!!好像没这个寄存器吧
ADDWF PCL,F,这条指令的意思表示W寄存器和PCL的值相加,结果存回到PCL寄存器,工作寄存器W的值不变,ADDWF PCL,W表示结果存回工作寄存器W,PCL的值不变