- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PCA应用举例 例 对液体流量进行测量的流量计是通过对脉冲进行计数来实现的,某应用系统中需要对2路液体的流量进行测量。系统中使用PCA0工作在上升沿捕捉方式对脉冲进行计数,试编写实现该功能的程序。 解:实现该功能的程序如下: #include c8051f020.h unsigned long xdata Plus_NUM[2]={0x0l,0x0l }; //用于脉冲计数 void PORT_Init (void) //端口初始化 { XBR0 = 0x10; //CEX0、CEX1配置到P0.0、0.1 XBR2 = 0x40; //允许交叉开关 P0MDOUT=0x00; //P0为开漏输出 } PCA应用举例 void SYSCLK_Init (void) //时钟初始化 { int i; OSCXCN = 0x67; //外部晶振22.1184MHz for (i=0; i 256; i++) ; //延时 while (!(OSCXCN 0x80)) ;//等待外部晶振稳定 OSCICN = 0x88; //选择外部晶振作系统时钟源,允许时钟丢失检测 } void Init_PCA0(void) //PCA0初始化 { PCA0MD=0x08; //PCA0采用系统时钟,禁止PCA0溢出中断 EIE1|=0x08; //允许PCA0中断 PCA0CPM0=0x21; //模块0上升沿中断允许 PCA0CPM1=0x21; //模块1 CR=0; //关PCA0 } PCA应用举例 void PCA0_ISR (void) interrupt 9 //PCA0中断服务程序 { EA=0; //关中断 if (CCF0==1) //模块0对第一路液体脉冲计数 { CCF0=0; //清CCF中断标志 Plus_NUM[0]++; //脉冲计数 } if (CCF1==1) //模块1 { CCF1=0; Plus_NUM[1]++; } EA=1; //开中断 } PCA应用举例 void main (void) //主程序 { WDTCN = 0xde; //关看门狗 WDTCN = 0xad; SYSCLK_Init (); //初始化时钟 PORT_Init (); //初始化IO口 Init_PCA0(); //初始化PCA0 CR=1; //启动PCA0 EA=1; //开中断 while (1); //等待中断 } 10.10 系统其它控制功能 1 中断系统 不同的计算机系统的中断源数目不一样,MCS-51系列单片机有5~16个中断源,而本章中介绍的C8051F系列单片机支持22个中断源;中断源在片内外设与外部输入引脚之间的分配随器件的不同而变化。每个中断源可以在一个SFR中有一个或多个中断标志。当一个外设或外部源满足有效的中断条件时,相应的中断标志被置为逻辑‘1’。 22个中断源的详细说明见书中表10-9。 2. 振荡器 系统时钟可以自由地在内部振荡器和外部振荡器之间进行切换,也可以在选择内部振荡器时让外部振荡器保持在允许状态,这样可以避免在系统时钟被切换到外部振荡器时的启动延迟。内外振荡器的使用和配置只需要两个特殊功能寄存器OSCICN(内部振荡器控制寄存器)和OSCXCN(外部振荡器控制寄存器)。 C8051F020单片机有一个内部振荡器和一个外部振荡器驱动电路,每个驱动电路都能产生系统时钟。 单片机在复位后从内部振荡器启动,内部振荡器可以被使能或者禁止,其振荡频率可以用内部振荡器控制寄存器(OSCICN)设置。 内部振荡器 C8051F020单片机复位后,内部振荡器工作在2MHz,并且系统默认它作为系统时钟。如果系统设计只使用内部振荡器而不使用外部振
原创力文档


文档评论(0)