mylinux 的小窝

Happy coding Happy life!

可编程计数阵列PCA(转)

 

转自:http://townsi.blog.hexun.com/12934682_d.html

一 PCA概述

    PCA就是一个定时器(计数器),和一般定时器原理相似:当PCA被使能则PCA由初值开始定周期累加,然后读取PCA的值。我们通常的做法是比较PCA是否等于我们提前设定的定时标志寄存器的值,如果相等,则定时时间到。PCA也是这样,不过PCA已经给我们准备好了定时标志寄存器,也已经做好了比较机制,不再需要我们在程序中添加比较语句。

    PCA是一个16位定时器,它有5个定时标志寄存器(CCAPnH+CCAPnL,n=0,1,2,3,4),把PCA划分成5个定时模块,这5个模块分别有一个单片机引脚与之对应。与标准的定时器/计数器相比,PCA对CPU 的干扰小,定时更精确,减少了软件设计。

二 PCA相关寄存器

    1.CMOD:PCA模式选择寄存器

7

6

5

4

3

2

1

0

CIDL

WDTE

-

-

-

CPS1

CPS0

ECF

CIDL:0-单片机空闲模式PCA工作;1-单片机空闲模式PCA不工作

WDTE:0-定时模块4禁用看门狗;1-定时模块4启用看门狗

CPS1,CPS0:PCA定时频率选择位(具体请看DATASHEET)

ECF:1-使CF为1时会产生中断

2.CCON:PCA控制寄存器

7

6

5

4

3

2

1

0

CF

CR

-

CCF4

CCF3

CCF2

CCF1

CCF0

CF:PCA定时2BYTE溢出标志,当CF变高时,PCA会产生溢出中断,CF位必须软件清零,前提是ECF对CF使能

CR:PCA启停位,0-停止PCA计数,1-启动PCA计数

CCFn(n=0,1,2,3,4):当PCA某个模块检测到PCA定时器的值和自己的定时标志寄存器的值相等时,对应的CCFn会被硬件置位, CCFn必须软件清零,前提是对应的MAT对CCF使能

3.CCAPMn:PCA比较模式选择寄存器(n=0,1,2,3,4)

7

6

5

4

3

2

1

0

-

ECOM

CAPP

CAPN

MAT

TOG

PWM

ECCF

ECOM:0-关闭比较功能;1-打开比较功能

CAPP:1-PCA的下降沿捕捉定时器的值

CAPN:1-PCA的上升沿捕捉定时器的值(当CAPP和CAPN都为1时,上升沿和下降沿都捕捉)

MAT:1-使能定时时间与定时标志寄存器相等时CCF由硬件置位的功能

TOG:1-使能定时时间与定时标志寄存器相等时,该模块对应的管脚输出高电平的功能

PWM:1-脉宽调制功能打开;0-脉宽调制功能关闭

ECCF:1-使当CCF=1时可以产生中断

4.CCAPnH, CCAPnL (n=0,1,2,3,4):PCA定时标志寄存器

5.CH,CL:PCA定时寄存器

6.CEXn (n=0,1,2,3,4):与各模块相关的单片机引脚

三 PCA基本功能

PCA基本功能有5种:捕捉功能、16位软件定时器功能、高速输出功能、脉冲宽度调制功能PWM和看门狗功能,其中看门狗功能只有模块4支持,具体说明如下:

1.捕捉功能:

选择方法:ECCF=1

功能介绍:当给所用模块相应的管脚改变时,PCA会将当前定时器中的值捕捉到用户的定时标志寄存器中,捕捉后该模块的CCFn会被硬件置位,同时产生中断。

2.16位软件定时器功能:

       选择方法:ECOM=1;ECCF=1;MAT=1

       功能介绍:定时器值和定时标志寄存器的值相等时会有中断产生

3.高速输出功能:

选择方法:ECOM=1;TOG=1;MAT=1 ECCF=1

功能介绍:定时器值和定时标志寄存器的值相等时该模块相应的管脚上有触发产生(高电平)。

4.脉冲宽度调制功能:

选择方法:ECOM=1;PWM=1

功能介绍:此功能通过比较定时器的低字节和定时标志寄存器的低字节来在模块相应的管脚上输出PWM调制电平,当CL < CCAPnL 时输出值为低,当CL >= CCAPnL 时,输出值为高。

5.看门狗功能

选择方法:ECOM=1;MAT=1;TOG=1;WDTE=1

功能介绍:定时器值和定时标志寄存器的值相等时,看门狗产生复位。用户可以周期性改变CCAP4H和CCAP4L防止定时器值和定时标志寄存器的值相等,从而防止复位。此功能只有模块4可以使用。

四 注

       本文中的寄存器只有CCON可以位寻址,其他都不支持!

       本文所参考单片机为P89C66X!

 

 

SPI和UART(转)

UART (Universal Asynchronous Receiver/Transmitter)
通用异步收发器
UART
是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终
端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了
。作为接口的一部分,UART还提供以下功能:
将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行
数据转换为字节,供计算机内部使用并行数据的器件使用。在输出的串行数据流中加入
奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,
并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠票也是
串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART
还提供输入输出数据的缓冲区,现在比较新的UART16550,它可以在计算机需要处理数
据前在其缓冲区内存储16字节数据,而通常的UART8250。现在如果您购买一个内置的
调制解调器,此调制解调器内部通常就会有16550 UART

 

SPI:高速同步串行口。3~4线接口,收发独立、可同步进行

SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。
     如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢

UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
     显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。