麦奎斯特 发表于 2012-9-23 19:10:30

解读STC12C5A系列单片机的个人总结

本帖最后由 麦奎斯特 于 2012-9-23 19:11 编辑

1、capture/PWM功能!解读—p303

为什么频率是256等份呢?因为 是 1T单片机,所以,定时器计数当然是 以一个时钟周期为计数单位呢!而何时溢出呢?因为是 8位计数器,所以,2^8=256!由于周期与频率成反比,sCLK<sCLK/256意思为 前者计时比较快,后者比较慢,也即前者 周期小后者周期大,使用1T单片机,相对于传统12T单片机来说,假如1T计数快点。由f=SYSclk/256 ,得T=256/SYSclk。即,最大可以计数 256次!!!!每隔 1/SYSclk 计数一次!也即计满256个数就溢出!假如为 12M晶振,则 1/12M =1us/12约为0.084us (传统单片机是 12 * 1/12M=1us),,是不是很快啊!!!

CMOD 为PCA 工作模式寄存器。


   

要说明的是 由 CMOD中的 ECF 置位后 允许CF溢出标志 中断,如果 PCA 产生 计数溢出,则硬件置CF=1,此时,即刻产生CF中断(如果ECF=0,则即使溢出也不产生CF中断,即硬件虽置位CF,但不能产生计数中断),虽然 CF 可以硬件或软件置位,但是 只能软件清零!!~~~简而言之,CF仅仅是个计数中断溢出标志,可否中断有ECF(类似中断允许位)决定!

CR(类似传统51的TRX) 是启动计数阵列,也就是计数器摆了!
以上是用于计数器时!!但是要注意的是 CR 清零 会关闭 计数阵列!

那有两路捕获中断,究竟是哪一个呢?请看 中断标志CCFX 来判断 是那一路中断!!! CCFX硬件置位但要软件清零咯(类似串口的RI 和 TI 哈哈)!!而下面的ECCFX用来使能CCFX中断标志的(如果ECCFX=0则即使捕获到信号,产生了CCFX置位同时申请中断,可是,ECCFX不允许中断的话,有申请但不允许还是中断不了啊!)。(可以这么说,要做什么动作或者申请做什么事,需要得到允许才可以做,正如 某件事发生了,你提出了一个申请(比如硬件置位了某个标志),可是 我没有批准你做这件事(没有“使能”标志的申请),即使事情发生了,你也做不了什么,因为我不允许,所以你做不了!!!只有我允许了,你才可以为之!!!进行下一步的工作!!!




我们这里只需要捕获 脉宽,所以用到CAPPX和ECCFX!!!这里要明白,ECCFX不允许的话,系统是捕获不了CCFX中断的!!


从图可以看到 ,ECCFn 为X 是因为 你是否允许在中断取决于你的设置,这里作者仅仅是提供一种解释,告诉你 这是一种怎样的工作方式!!为与不为,取决于你的ECCFX的设置!!
   
CL 、CH 其实为计数寄存器,就是说,你要计数,那 你也可以设置一个基准 让计数器从那开始计数咯!!反正溢出了,他就会把这些值放到CCAPX L/H 处!!
CCAPX L/H 是保存 计数捕获的值!!!且CCAPX L/H 还用于占空比输出的定值呢!!


这个就不解释了,太勒个呢~~!@@你懂的!!

辅助寄存器,改变端口,用于当你画PCB时,可以通过改变引脚来使布线更为完美!!

这个是他的结构咯~!
计数器结构图:

下面是捕获模式的介绍:主要看看他是怎么计数及如何保存这些数值的!!

看到值 是 放到哪里去了吧~~!!哈哈 ,采集到边沿信号 就把计数值从CH/L放到 了 另外的寄存器CCAPnL/H 咯!!虽然你获得了计数值但是中不中断去处理这些数据呢?不是你说了算,由CCON中的CCFn 和 CCAPMn 中的 ECCFn 来决定,也就是说,当捕获到这个信号 时,这个信号只是充当一个开关,把CH/L的值放到的另外的寄存器,而要不要处理是 另外的两个 大哥(CCFX 和 ECCFX) 说了算!

这里还教你怎么判断究竟是哪个中断呢,还提醒你要软件清零。。O(∩_∩)O哈哈~宏晶真好!



这里通过,设置CCAPMn的位ECOM X(允许比较功能)和MAT X(匹配控制位)---当MAT0=1时,PCA计数值与模块的比较/捕获寄存器的值的匹配将置位CCON寄存
器的中断标志位CCF0!
就是说,预设CCAPnL/H值 作为比较的基准值,那么 CH/L 按一定的 时钟信号递增,并比较 前者CCAPn ,当相等时。置位CCFn ,若ECCFn 允许中断的话,则产生中断,在中断函数处,重装CCAPn 即刻 实现 定时T不变!!而且,上面有介绍 怎么定时 ,预设值的计算方法咯~~~
   简而言之,用比较的功能来实现16位的定时器!!!强哈哈!!!


这里可以告诉我们,20M都可以变为 几十K 方波信号咯~~@@@@!!

这里要用到TOGn 翻转控制位,为什么要除以4,呢?因为 本来就SCLk/2 可是,要输出方波要翻转要 再 除以 2 才可以 实现翻转咯,频率的除就是 周期的乘!!!
阻抗匹配 是 输出阻抗 等于负载的阻抗 ,输出阻抗是 虚的参数,负载阻抗是 具体的 数值!!!要完全 用完 能源 需要 匹配咯!!否则出现失真!!



上面的简单不解释呢~~反正是可以输出PWM咯!!~~~但要注意,占空比的设置是在CCAPX L/H那里设置的~~!!!


2、宏晶单片机的复位功能介绍!

宏晶单片机中有一个 RST 外部复位引脚,同时还有另外一个外部低压检测复位(高可靠复位,新增第二复位功能脚RST2复位,不用复位第二功能则可以作为低电压检测端),,这需要在ISP 下载软件那里 选中相应的选项咯!!!
此外还有 软件复位 通过 且 此复位时 整个系统复位的 ,各个寄存器 和端口都被复位到初始状态!





还有上电 复位,掉电模式下 复位脚 无效咯!!

单片机内部也集成了 MAX810复位电路咯,不过要在ISP 烧写软件那里设计个!!

此外 还有 看门狗复位电路咯!

看门狗 有 预分频,相应的计算请看下面的解释!

3、单片机的IO设置。
可以设置 为 强上拉,推免输出。。。。


这里有错误咯 ,应该为P4口哈哈~~




看,上面就把IO口的工作方式给解决掉了,重点是设置 PXM1和PXM0 的设置,还有,要注意端口保护,要不烧掉芯片 你会心疼的咯~!!

恩,STC 还提供 一些方便,提供一些 寄存器地址咯~~

来给个中断 控制 系统图:

还可以中断嵌套咯:分级别呢!

具体怎么设置,请看手册,哈哈~~~这里截图了一部分咯!!
最神秘的是这个鬼东西咯IAP


5、工作模式:低速模式、空闲模式、掉电模式。


低速模式:是通过分频来降低工作频率,从而降低EMI。通过设置相应的寄存器的即可实现相应效果。

空闲模式:空闲模式,置位相应位寄存器即可。它与掉电模式的区别仅仅是 功耗,STC为<1.3mA (通常为3~7mA),同时不给系统时钟信号,则 系统不执行指令,但中断如 AD 、定时器、串口、外部仍然工作,可以通过这些中断唤醒空闲模式!!!空闲模式执行后,寄存器RAM和端口保持掉电模式前的状态!!!


掉电模式:功耗很小,但与 空闲模式不同的是,它只能用外部中断或复位来唤醒,外部中断唤醒是 执行掉电模式前的下一条语句,而外部复位则从0000H开始执行程序。掉电模式执行后,寄存器RAM和端口保持掉电模式前的状态!!!

唤醒是执行完中断后即可唤醒咯!!!!

下面是宏晶单片机的12C5A60S2的AD使用编程!!!
由下图可知,AD口分布在,P1.7~P1.0处,上电时,P1口弱上拉,可以通过软件编程设置任一端口及选通为AD输入口,精度为10位,采样频率为250kHz.

不同的设置方式会 有不同的数据存储格式。格式及设置如下:



转换原理:

上电poweradc,选通通道,比较,存储数据,置为标志!!


使用AD应注意:
1、        P1口模拟功能控制寄存器P1ASF,若要使用P1口的任一端口作为模拟输入端,请将P1ASF的相应位置一,不用的就作为IO口使用.(不能位寻址的寄存器)
详细设置如下:


1、        如上说,使用AD前,要通过ADC_CONTR(AD的操作使用整体赋值为好)先打开AD的电源,适当延时后,采样,再关闭电源!(转换过程中最好把串口及定时器等中断关掉为好!),还可以设置采样频率呢!

2、AD使用内部RC时钟,当转换结束,模块转换器结束标志位ADC_FLAG=1;
无论此标志位用于查询还是产生硬件中断,都必须软件清零.
而ADC_START是模块转换器ADC的启动控制位,设为1则开始转换,转换结束自动设为0.

2、        AD通道的选择可以通过上面的设置来选通,但是要注意还有一个寄存器P1ASF需要设置喔,详细请看上文。同时,我们还注意到,执行ADC_CONTR控制语句后,需要延时4个CPU时钟延时哦!!!!保证正确设置咯!!
   

3、        对于转换后的结果主要保存在ADC_RES 和 ADC_RESL寄存器中,而保存的格式则在AUXR1寄存器的ADRJ位中设置. 怎么计算那个转换的值,请看上面的计算公式.


4 、与AD中断有关的寄存器,如上,解释如下!
EA是总中断控制位,EADC是允许/禁止AD转换中断控制位.
总的来说,涉及到中断的就有三个位:EA、EADC、ADC_FLAG(要软件清零哦)!PADCH和PADC是四级中断的优先级设置!

4、        以上是应用电路,接好电容和电阻就OK了。亮点是用AD口做多键键盘扫描:
   
5、        如用户不需要精准的电压值,则出厂前可以把大概的电压值记录在单片机ER2ROM 中,若要更精准的数值,则要在8路中选择一路外接电源,测出外加电源和VCC的比值,即可测出单片机VCC的值,进而测出其他通道和单片机VCC的比值,即可测出输入通道的电压值.


我上次文档吧,这里要添加图片才可以显示呢!!!

dtdzlujian 发表于 2012-9-23 22:51:16

写的挺好的

yuanbuqi 发表于 2012-9-23 22:55:07

好, 顶一下

lihebb 发表于 2012-9-24 10:14:20

{:handshake:}我也经常用这个系列的~~~~~~~~~~

信天游 发表于 2012-11-8 12:44:38

谢楼主,正打算用他做东西,顶{:3_42:}

huangxiaojin 发表于 2012-11-8 16:29:52

写的不错!谢谢!

jetli 发表于 2012-11-8 20:15:41

{:victory:} 不错

kms2hh 发表于 2012-11-8 21:43:24

不错,收藏了{:handshake:}

hamipeter 发表于 2012-11-9 18:11:30

记个号,抽空看看

lxa0 发表于 2012-11-10 15:12:30

上个STC12C5A的数据手册?

sunplus 发表于 2014-1-13 09:51:56

MARK ~~~~51

t1510794321 发表于 2014-9-2 10:43:39

mark                           

li4512369 发表于 2014-9-13 17:49:39

不错不错                     

TZQ95865 发表于 2014-9-14 09:10:09

pac应用时注意毛刺
页: [1]
查看完整版本: 解读STC12C5A系列单片机的个人总结