本设计中以PlCl6F877单片机为核心,完成对输出驱动单元、人机交互单元、执行机构单元、检测单元等部分的控制.根据设计产品的功能要求,各个功能的定义如下:
· 码盘电机的位置和方向分别由RE0和RC2控制:
· 把手电机的位置和方向分别由RB1和RC1控制:
· 码盘电机光电检测输入到RB7口;
· 把手电机光电检测输入到RBG口:
· 蜂鸣器输出通过RD0口;
· 开锁指示输出通过RD1口;
· 键盘扫描输出为RB0~RB3;
· 键盘扫描输入为RD2、RD3、RD4、RD7口:
· LCD串行通信通过RPD、REI、RE2、RD5实现。
PICIDP877单片机在各种复位间的区别如下:
· 上电复位(POR);
· MCLR在正常运行下复位:
· MCLR复位在SLEEP期间;
· WDT在正常运行期间溢出复位;
· WDT唤醒(在SLEEP期间);
· 降压复位。
一些寄存器用在POR上未知,在其他任何复位时不会改变共他大多数寄存器,在运行期间都能通过上电复位(POR),NCLR、WDf复位,在睡眠期间,NCLR复位可在BDR上复位到复位状态。它们不受WDT唤醒的影响,因为这些复位被当成正常运行的继续。TD、PD位在不同的复位状态中被置1或清0。
单片机在MCLR复位通道上有一个MCLR噪声过滤器,过滤器将探测和忽略小的脉冲,然而一个有效的MCLR脉冲必须符合最小脉冲宽度。
(1)上电复位(POR)。
当VDD被探测到上升时(在1.2~1.1V之间),产生一个上电复位脉冲。为了充分利用POR,把MCLR引脚连到VDD(通过一个电阻器)。这将省去通常用来产生上电复位的外部RC组件,需要确定VDD最大上升时间。
当单片机开始运行时(退出复位条件)单片机运行参数必须达到要求以保证运行(如电压、频率、温度),如果这些条件达不到,单片机必须一直保持复位状态直到运行参数达到要求,降压复位可用来满足启动条件。
(2)上电定时器(PWRT)。
上电定时器在从POP上电时提供一个固定的72ms正常溢出。PWRT运行在一个内部的RC振荡器上,随着PWRT一起作用,单片机一直保持在复位状态。PWRT的时间延时允许VDD上升到一个可接受的电平,提供一个设定位使能/不使能PWRT。
上电时间延时随着单片机的不同VDD、温度以及生产过程的变化而不同。
(3)晶体振荡器起动定时器(OST)。
在PWRT延时结束之后晶体振荡器起动定时器提供一个1024个振荡器周期的延时(从0SC1输入),这样保证晶体振荡器或者谐振器开始振荡和稳定。
OST溢出在XT、LP和IIS方式下,上电复位,或从睡眠中唤醒时才起作用。
(4)降压复位(B0R)。
一个设置位BODEN能够不使能(如果编程清0)或使能(如果置1)降压复位电路。如果VDD下降低于4.0V,VBOR参数D005(VBOR)比在参数(TBOR)大,降压情况将复位芯片,如果VDD下降低于4.0V,且比参数(TBOR)小,复位芯片可能不复位。
一旦降压发生,芯片将保持在降压复位状态直到VDD上升高于VBOR。采用上电定时器保持单片机在复位状态72ms。如果在PWRT期间,当带有上电定时器复位的VDD上升高于VB0R时,降压复位将重新开始。当复位能使时,上电定时器应该一直被使能而不管PWRT设置位的状态。
(5)溢出顺序。
在上电时,溢出顺序如下:POR复位出现时,当一个POR复位发生时,PWRT延迟开始。当PWRT结束(LP,XT,HS)时,OST开始计数1204个振荡器周期。当OST结束时,单片机脱离复位。
如果MCLR保持较长时间低电平,溢出将会中止。把MCLR变为高电平时,溢出立即运行。
(6)电源控制/状态寄存器(PCON)。
电源控制/状态寄存器PCON有两位。
位0是BOR(降压复位状态位),POR在上电复位时是未知的,用户必须将该位置1。在随后的复位上如果BOR是0,则表明发生降压复位。BOR状态位是随意位,如果降压复位电路不能使能,BOR位是不能确定的。
位1是POR(上电复位)。在POR被清0时,其他方面不受影响。在一个POR之后,用户必须将该位置1。在随后的复位上如果POR是0,则表明发生POR复位。
(7)中断。
PICl6877有10个中断源。中断控制寄存器(INTCON)用标志位记录单个中断请求,它有单个和全体中断使能位。
一个全体中断使能位GIF(INTCON<7>)使能或不使能所有的中断。当位GIE使能时,一个中断标志位和屏蔽位置1时,中断将立即引导。单个中断通过它们在各种寄存器里相应使能位来禁止。不管GIE位的状态如何,单个中断都是置1的,GIE位在复位时清O。
中断返回指令,RETFIE将GIE位置1来重新使能中断。RBO/INT引脚中断,RB端口改变中断和TMR。溢出中断标志都包括在INTCON寄存器里。
外部中断标志包含在特殊功能寄存器PIR1和PM里,相应的的中断使能位包含在特殊功能寄存器PIE1和PIE2里,外部中断使能位包含在特殊功能寄存器INTCON里。不管和它们相关的屏蔽位和GIF,位的状态如何,单个中断标志位置1。
(8)INT中断。
在引脚RBO/INT引脚上的外部中断为边沿触发。INteDG位(OPTION (6))置1时为上升沿触发:如果INTEDG位是清0的,则为下降沿触发。当在RBO/INT引脚上出现一个有效边沿时,标志位INTF (INTCON(1))被置1。
(9)TMR0中断。
在TMR0寄存器里的一个溢出(FFH~OOH)将标志位TOIF(INTCON<2>)置1。通过对使能位TOIE(INTCON<5>)置1或清0来决定中断使能或不使能。
(10)端口B变化中断
一个在PORTB<7∶4>的输入变化将标志位RBIF(INTCON(0))置1,通过对使能位RBIF(INTCON(4>)置1或清0,来决定中断使能或不使能。
(11)在中断期间上下内容的保存。
在一个中断期间,只有返回程序计数的值被保存在堆栈里。其中典型的是用户希望在一个中断期间保存的关键寄存器,即工作寄存器和状态寄存器,这将由软件来实现。
在PICl6F876M77单片机里每个块的高16位字节是公用的,临时保存寄存器W-TEMP、STATUS-TEMP和PLATH-TEMP存放在这里。这16个存储单元不要求分块,使存储和重新存储内容较容易。
(12)监视定时器(WDT)。
监视定时器是一个自由运行的片内专用振荡器,它不需要任何外部组件。这个RC振荡器和 OSC1/CLKIN引脚的外部RC振荡器是分离的。这就意味着即使在单片机的OSCI/CLKIN和OSC2/CLKOUT引脚上的时钟已停止的情况下,WDT仍能运行。例如,通过执行一条Sleep指令。
在正常运行期间,一个WDT溢出将使单片机复位(EDT复位)。如果单片机在睡眠方式,一个WDT溢出将使单片机唤醒和恢复正常运行(WDT唤醒)。在STATUS寄存器里的TO位通过MDI溢出将被清0。
通过编程设定WDT位为0,使WDT永久不能使用。
当把预分频器分配给WDT时,预分频器分配和预分频器值在OPTIONˉRFC寄存器里是置1的。
在串行模式下,使用两条传输线进行数据传送,主控系统将配合传输同步时钟(SCLK)与接收串行数据线(SID)来完成串行传输。
在片选CS设为高电位时,同步时钟(SCLK)输入的信号才会被接收,在片选CS设为低电位时。模块内部传输串行传输计数与串行数据将会被重置,传输中的数据将会被终止、清除,并将待传输的数据重设回第一位,设计中将CS设为高电位。
模块的同步时钟(SCLK)具有独立的操作,因为其内部没有传送/接收缓冲区,因此,当有连续多个指令需传送时,必须等到一个指令执行完成才能传送下一个指令。
串行传输时先传起始位,它需要接收5个连续的“t”(同步位串),此时传输记数器将被重置,串行传输将被同步,传输的第二位分别指向传输方向位RW不口暂存器选择位RS,最后8位为“0”。
在接收到起始位后,每个指令或者数据将分两组接收,高4位将会被放到第1个LSB中,低4位将会被放到另1个LSB中,其余都为“0”。
串行接口时序如图1所示。
图1 串行接口时序
该液晶显示模块采用SPI串行方式与单片机进行通信,液晶模块中的控制芯片将配合传输同步时钟SCLK与串行数据线SID来完成串行传输。当片选信号CS为高电平时,同步时钟线SCLK输入信号开始被接收;当CS为低电平时,传输中的信号将被终止、清除。
在本系统中,CS与单片机复位端相连,即系统复位时液晶显示模块也同时复位,接口设计如图2所示。
图2 接口设计图