简述主引导记录的用途计数器c的分类与用途

三菱 PLC高速计数功能的应用
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
三菱 PLC高速计数功能的应用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口计数器的分类及作用谁知道呀!!!_百度知道
计数器的分类及作用谁知道呀!!!
因此。时钟方程。图2
异步三位二进制计数器分析步骤如下、驱动方程。既可能实现加计数又可实现减计数器的称为可逆计数器:加法计数器:1)写出时钟方程。从状态图可知随着CP脉冲的递增计数器的功能,通过对该电路的分析:二进制计数器。以同步二进制计数器为例说明。例如,有的受其他触发器输出端控制。000 →
011↓↑111←
二。方法是依据设定电路现态Q2n Q1n Q0n :(3) 求出对应状态值: 3)进行状态计算;异步计数器即构成计数器的触发器的时钟输入CP没有连在一起, 进行化简变换可得状态方程、异步计数器异步计数器中,即各触发器的状态变化有先后、可逆计数器。JK触发器特性方程为将对应驱动方程式分别代入特性方程式,要么都是同步的,代入上述各状态方程。该电路是由三个JK触发器接成T触发器的形式组成:C= Q0nQ1n Q2n 2)求状态方程,可得到计数容量更大的计数器,要把8种状态依次全假设到,所以工作速度不易提高,一般来讲其时钟输入端全连在一起,要么都是异步的,各触发器的时钟端有的受计数输入脉冲控制。 分析步骤如下:根据计数脉冲的输入方式不同可分??
CP0=CP↓CP1=Q0↓CP2=Q1↓驱动方程. 异步二进制计数器;设定现态时,列状态表,是时序电路中使用最广的一种? 综上所述, 经过八个CP脉冲完成一个循环过程。其中同步计数中构成计数器的所有触发器在同一个时刻进行翻转, 触发器输出Q2Q1Q0值是递增的,同步计数器较异步计数器具有更高的速度,还可以用于分频,其各触发器不在同一时刻变化:JK触发器的特性方程为,并且该时钟脉冲即输入的计数脉冲? (1) 写相关方程式:CP0=CP1=CP2=CP驱动方程: :同步计数器?
K2=1(2) 求各个触发器的状态方程。计数器的分类。同步二进制计数器是同步时序逻辑电路的一个实例。通常被组合的两组计数器. 异步二进制计数器的规律用触发器构成异步n位二进制计数器的连接规律如表3所示、图1是3位同步二进制加法计数器电路:异步二进制计数器一般由T′触发器构成、同步计数器
同步:计算输入脉冲的个数:J0=K0=1
J2=K2=Q0nQ1n输出方程?。 根据按照输出的计数进制不同又可分, 确定该时序电路的逻辑功能:Qn+1=J + Qn 。计数器的“模”?
时钟方程、输出方程、N进制计数器的组合利用不同进制计数器的组合,要依次把全部状态都假设到?
异步三位二进制计数器电路如图2所示。 。 。将驱动方程代入相应触发器的特性方程:该计数器为3位二进制同步加计数器。1。一般来讲?由时钟方程可知该电路是异步时序电路。计数器状态图和时序图(4) 归纳分析结果。  计数器不仅用于计数。 列状态表如表2所示。
画状态图和时序图如图3所示。4)画出状态转换图(见图2)、十进制计数器。根据计数过程中计数的增减不同分、任意进制计数器。以异步二进制计数器为例分析?
K1=1,则有23 =8种状态。三,即n=3。。由分析可知。1。这类计数器结构简单,组成异步计数器的所有触发器的翻转是不同步的。一般可从Q2n Q1n Q0n=000开始假设,电路结构简单,使应该翻转的触发器在时钟脉冲作用下同时翻转,但因各触发器的翻转是不同步的、减法计数器、定时等,计算结果填入状态表1?2。注意,代入状态方程和输出方程即可求得相应的次态Q2n+1 Q1n+1 Q0n+1
和C:同步指组成计数器的所有触发器共用一个时钟脉冲,求得状态方程,学会对此类电路的一般分析方法。 一。 :计数器累计输入脉冲的最大数目用M表示,此电路是异步三位二进制(或一位八进制)加法计数器:将一个五进制计数器和一个二进制计数器组合可得到十进制计数器(见图4)。例如这里的计数器由三个触发器组成?
K0=1、异步计数器
其他类似问题
按默认排序
其他1条回答
按计数器的进制又分为二进制计数器、十进制计数器和其它任意进制计数器;按其计数过程中计数状态的变化的情况又可分为加法计数器计数器的种类很多,按构成计数器中各触发器时钟端连接的方式分为同步计数器和异步计数器两类
您可能关注的推广回答者:
计数器的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁TI-Nspire™ CX-C CAS 彩屏图形计算器 - 产品简介
TI-Nspire™ CX-C CAS 彩屏是一种既能计算又能作图的新型的数学使用工具,它具备符号代数系统、几何操作系统、数据分析系统等,可以直观地绘制各种图形,并进行动态演示、跟踪轨迹。代数功能,图形计算器背光液晶全彩显示。借助从网上画廊的图片和自己的照片,看看数学和科学是怎样应用到现实世界的。
TI-Nspire™ CX-C CAS 彩屏图形计算器 - 主要功能简介
彩屏显示 超薄设计 可充电电池 中文输入和显示 英汉双解字典研究更高层次的数学概念 - CAS(即)使研究标准数值计算、符号代数和符号微积分计算变得更轻松。便携 - 不管是在校外、家中或是在公共汽车上、图书馆、咖啡店……任何时间、任何地方都可以使用便携的图形计算器。还能将课堂作业从图形计算器传送到计算机,就像发送电子邮件一样。全彩直观显示 - 在全彩背光显示屏上对方程、对象、点和线进行彩色标记。将方程、图形和几何表示形式之间的联系在屏幕上更快速,更紧密地表现出来。来自生活的真实图片 - 将数字图像或你拍的照片导入到图形计算器;用“重叠”和颜色标记的方法来显示数学和科学概念;有助于探索现实世界与数学、科学之间的联系。轻松充电 - 内置 TI-Nspire 充电电池,不需要碱性电池。时尚 - 外形时尚的 TI-Nspire CX-C CAS 图形计算器是迄今最薄、最轻的 TI 图形计算器。它还有最清晰并配有高分辨率的全彩显示屏,可以轻松看到和区别每个指数、变量和线条。3D作图 - 三维的作图和旋转功能(手动与自动)。可以更改3D图形的网格与表面颜色。
TI-Nspire™ CX-C CAS 彩屏图形计算器 - 技术参数与系统要求
技术规格·显示屏尺寸:320 x 240像素(3.2寸);·显示屏分辨率:125 DPI;16级灰阶;·电池:TI-Nspire充电电池(内置);·内存:128 MB储存内存 / 64MB操作内存;·USB接口:用于连接电脑,以及TI-Nspire图形计算器之间的连接等。
适用考试·适用以下标准考试:ACT*、AP*、IB® 和 Praxis™ 。
特点与功能·能够实现TI-Nspire技术的所有功能,并包括内置的计算机代数系统(CAS);·彩色背光显示屏;·兼容图片(jpeg,jpg,bmp,png格式文件),并且可以叠加显示屏上的图像;·3D作图;·包含一个易于滑动的触摸板,能像鼠标般工作;·让学生能研究有字母变量的数学表达式,观察其图形、理解公式背后的意义;·用多种形式呈现一个问题,比如代数的、图形的、几何的、数字的和文字的形式;·能在一个屏幕上显示和研究一个问题的4种表达形式;·抓移函数图像,并观察相对应的方程和数据的变化;·表达形式的“关联”:改变一种表达形式,观察对其它表达形式的实时改变;·求解方程组,同时避免计算错误;·内置互动几何功能;·易于使用的电脑功能:·简单的下拉菜单 - 效仿熟悉直观的电脑操作;·阿尔法快速键;·保存和审阅工作:在文档中创建、编辑、保存正在解决的问题;类似网络的文字处理;类似于计算机的文件存储功能;·连接:能轻松链接到计算机或另一台TI-Nspire图形计算器,方便文件传输;·采用独立的编程环境,还有由用户定义的功能和程序库。
TI-Nspire应用程序·计算器(Calculator)- 输入和显示表达式、公式和方程,它们的显示与课本上保持一致;能够从标准的符号模板中快速、方便的寻找与选用合适的数学符号、变量名;可以通过滚动条查看之前的运算结果与公式。·图形(Graphs)- 函数作图和对函数的探究;通过点击图形内部的几何形状,查看其形成原因等。·几何(Geometry)- 绘制和研究几何形状。·列表和电子表格(Lists & Spreadsheet)— 抓取和跟踪图表上的值,收集数据,并观察数学模型;统计分析的结果;功能类似于使用计算机电子表格,如有标签栏、在单元格里插入公式、选择单元格并调整大小等。·数据与统计(Data & Statistics)- 使用不同类型的图形总结统计数据;调整和研究数据 - 观察数据变化会如何影响统计分析结果;能创建“快图”; 执行对真实数据集合的描述与推论统计计算。·记事本(Notes)- 将数学用文字进行描述。包括用文字描述数学问题与其结论,解释解题的步骤;利用问题—答案的模板便于教师提出问题和学生提交答案。·威尼尔DATAQUEST(VERNIER DATAQUES)- 创建一个假设图形,收集与重放实验数据。结合TI-Nspire Lab Cradle的使用。
一些研究结果·通过多种形式学习数学,学生能够更容易更深刻地理解数学概念;·使用TI-Nspire图形计算器,学生可以表现出对问题更深刻的理解,和更强的推理能力;·适当的TI-Nspire技术应用能够促进互动学习,更积极的资源共享,也为学校提供新颖的整合教学模式。计算器是一种很好的学习数学辅助手段(不只是一个提高运算速度的工具);
TI-Nspire™ CX-C CAS 彩屏图形计算器 - 考试允许使用
在 SAT 和 AP 标准化考试中允许使用 TI-Nspire CX-C CAS彩屏图形计算器。SAT 和 AP 是美国大学入学考试委员会的注册商标,该委员会不参与本产品的生产且不担保本产品。政策可能会发生变更。
为本词条添加和相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和770多万专业认证智愿者沟通。
您也可以使用以下网站账号登录:
此词条还可添加&
编辑次数:
参与编辑人数:
最近更新时间: 05:17:25
贡献光荣榜
扫描二维码用手机浏览词条
保存二维码可印刷到宣传品
扫描二维码用手机浏览词条
保存二维码可印刷到宣传品AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—01
放假了~~就剩下课设了,哎~~宅在宿舍就差生根了,她倒好,果断生气了,(*^__^*)
嘻嘻……,下回我可不敢了~~~~,要高兴,要高兴,你要高兴,就是你了~~哈哈,不高兴我就屎了~~
好了,既然没什么事,那就从今天开始一步一步学习ATMEGA16的定时/计数器,这是个步骤啊~~~
Take it slowly~
四、ATMEGA16的定时/计数器
四—(01)、四位显示秒表试验
首先怀念一下咱们的体育课,再体育课或者田径比赛的时候,老师会经常使用秒表来记录同学们的成绩。在此,来进行一个秒表的设计。(说实话,这个秒表真的太贵了,不过只是实验,纯属娱乐)
使用INT0键进行计时的开始/停止,使用S1键作为计时值得清楚,并且采用6位数码管的右四位进行显示。
定时器T0被用作扫描4位数码管(采用溢出中断,每1ms中断一次),而定时器T1则用来计时(咱们用的秒表用来显示四位,两位小数,也就是每计时10ms中断溢出一次)。
1、预分频器和多路选择器
ATMEGA16有两个8位定时/计数器(T/C0、T/C2)和一个16位定时/计数器(T/C1)。
ATMEGA16的定时器/计数器时钟是可选择的。其时钟部分包括预分频器和一个多路选择器。预分频器课被认为是一个有多级输出的分频器。ATMEGA16用一个10位的计数器把输入的时钟分为4种可选择的分频输出。多路选择器可设置使用其中一个分频输出,或者不适用分频输出和使用外部引脚输入时钟。
看图看真相:(其中只有0和1的,2的同理啊~好像那个0和1共用一个,具体我给忘记了,自己看datasheet~)
2、8 位定时器/
T/C0 是一个通用的单通道8 位定时器/ 计数器模块。其主要特点如下:
& 单通道计数器
& 比较匹配发生时清除定时器( 自动加载)
& 无干扰脉冲,相位正确的PWM
& 频率发生器
& 外部事件计数器
& 10 位的时钟预分频器
& 溢出和比较匹配中断源 (TOV0 和 OCF0)
Figure 27为8位定时器/计数器的简化框图(说实话,我也看不懂啊~~)
T/C(TCNT0)和输出比较寄存器(OCR0)为8位寄存器。中断请求(图中简写为Int.Req. ) 信
号在定时器中断标志寄存器TIFR 都有反映。 所有中断都可以通过定时器中断屏蔽寄存器
TIMSK 单独进行屏蔽。图中没有给出TIFR 和TIMSK。
T/C可以通过预分频器由内部时钟源驱动,或者是通过T0 引脚的外部时钟源来驱动。时钟
选择逻辑模块控制使用哪一个时钟源与什么边沿来增加( 或降低)T/C 的数值。如果没有
选择时钟源T/C 就不工作。时钟选择模块的输出定义为定时器时钟clkT0。
双缓冲的输出比较寄存器OCR0 一直与T/C 的数值进行比较。比较的结果可用来产生
PWM波,或在输出比较引脚OC0上产生变化频率的输出。比较匹配事件还将置位比较标志OCF0。此标志可以用来产生输出比较中断请求。
本文的许多寄存器及其各个位以通用的格式表示。小写的“n” 取代了T/C 的序号,在此即
为0。小写的“x” 取代了输出比较单元通道,在此即为通道A。但是在写程序时要使用精
确的格式,例如使用TCNT0 来访问T/C0 计数器值,等等。
T/C 时钟源:
T/C 可以由内部同步时钟或外部异步时钟驱动。时钟源是由时钟选择逻辑决定的,而时钟
选择逻辑是由位于T/C 控制寄存器TCCR0 的时钟选择位CS02:0 控制的。
计数器单元:
8位T/C的主要部分为可编程的双向计数单元。 Figure 28 即为计数器和周边电路的框图。
根据不同的工作模式,计数器针对每一个clkT0
实现清零、加一或减一操作。clkT0 可以由
内部时钟源或外部时钟源产生,具体由时钟选择位CS02:0 确定。没有选择时钟源时
(CS02:0 = 0) 定时器即停止。但是不管有没有clkT0,CPU 都可以访问TCNT0。CPU 写操
作比计数器其他操作( 如清零、加减操作) 的优先级高。
计数序列由T/C 控制寄存器 (TCCR0) 的WGM01 和WGM00 决定。计数器计数行为与输
出比较OC0 的波形有紧密的关系。有关计数序列和波形产生的详细信息请参考P72“ 工作
T/C溢出中断标志TOV0根据WGM01:0 设定的工作模式来设置。TOV0可以用于产生CPU
输出比较单元:
8位比较器持续对TCNT0和输出比较寄存器OCR0进行比较。一旦TCNT0等于OCR0,比
较器就给出匹配信号。在匹配发生的下一个定时器时钟周期输出比较标志OCF0 置位。若
此时OCIE0 = 1 且SREG 的全局中断标志I 置位,CPU 将产生输出比较中断。执行中断
服务程序时OCF0 自动清零,或者通过软件写”1” 的方式来清零。根据由WGM21:0 和COM01:0
设定的不同的工作模式,波形发生器利用匹配信号产生不同的波形。同时,波
形发生器还利用max 和bottom 信号来处理极值条件下的特殊情况
Figure 29 为输出比较单元的方框图。
使用PWM 模式时OCR0 寄存器为双缓冲寄存器;而在正常工作模式和匹配时清零模式
双缓冲功能是禁止的。双缓冲可以将更新OCR0 寄存器与top 或bottom 时刻同步起来,
从而防止产生不对称的PWM 脉冲,消除了干扰脉冲。
访问OCR0 寄存器看起来很复杂,其实不然。使能双缓冲功能时,CPU 访问的是OCR0
缓冲寄存器;禁止双缓冲功能时CPU 访问的则是OCR0 本身。(好了,你笨上就这么多吧,我还是看书上的排版比较好啊~~datasheet真的好大啊~``)
3、8位定时/计数器0的寄存器
1)T/C 控制寄存器- TCCR0
& Bit 7 & FOC0: 强制输出比较
FOC0仅在WGM00指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,在
使用PWM 时,写TCCR0 要对其清零。对其写1 后,波形发生器将立即进行比较操作。
比较匹配输出引脚 OC0 将按照COM01:0 的设置输出相应的电平。要注意FOC0 类似一
个锁存信号,真正对强制输出比较起作用的是COM01:0 的设置。
FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对定时器进行清零
读FOC0 的返回值永远为0。
& Bit 6, 3 & WGM01:0:
波形产生模式
这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C 支持的
模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式,详见
Table 38 与P72“ 工作模式” 。
& Bit 5:4 & COM01:0:
比较匹配输出模式这些位决定了比较匹配发生时输出引脚OC0 的电平。如果COM01:0
中的一位或全部都
置位, OC0 以比较匹配输出的方式进行工作。同时其方向控制位要设置为1 以使能输出
当OC0 连接到物理引脚上时, COM01:0 的功能依赖于WGM01:0 的设置。Table 39 给
出了当WGM01:0 设置为普通模式或CTC 模式时COM01:0 的功能。
& Bit 2:0 & CS02:0: 时钟选择
用于选择T/C 的时钟源。
如果T/C0 使用外部时钟,即使T0 被配置为输出,其上的电平变化仍然会驱动记数器。
利用这一特性可通过软件控制记数(这里应该注意一下下~~~)。
2)T/C0计数寄存器—TCNT0
通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。对TCNT0 寄存器的写访问
将在下一个时钟阻止比较匹配。在计数器运行的过程中修改TCNT0 的数值有可能丢失一
次TCNT0 和OCR0 的比较匹配。
3)输出比较寄存器—OCR0
输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT0 进行比较。匹配事
件可以用来产生输出比较中断,或者用来在OC0 引脚上产生波形。
4)中断屏蔽寄存器—TIMSK
& Bit 1 & OCIE0: T/C0 输出比较匹配中断使能当OCIE0
和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的输出比较匹配中断使能。
当T/C0 的比较匹配发生,即TIFR 中的OCF0 置位时,中断服务程序得以执行。
& Bit 0 & TOIE0: T/C0 溢出中断使能当TOIE0
和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的溢出中断使能。当T/C0
发生溢出,即TIFR 中的TOV0 位置位时,中断服务程序得以执行。
5)定时/计数器中断标志寄存器—TIFR
& Bit 1 & OCF0: 输出比较标志0
当T/C0 与OCR0( 输出比较寄存器0) 的值匹配时,OCF0 置位。此位在中断服务程序里
硬件清零,也可以对其写1 来清零。当SREG 中的位I、OCIE0(T/C0 比较匹配中断使能
) 和OCF0 都置位时,中断服务程序得到执行。
& Bit 0 & TOV0: T/C0 溢出标志
当T/C0 溢出时, TOV0 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV0
也可以通过写1 来清零。当SREG 中的位I、TOIE0(T/C0 溢出中断使能) 和TOV0 都置
位时,中断服务程序得到执行。在相位修正PWM 模式中,当T/C0 在0x00 改变记数方
向时, TOV0 置位(这里我还真的不会~~)。
下面的是个补充:具体我也不知道~因为我也没有用过,回头用了再来更新,哈。
4、16位定时/计数器T/C1
16位的T/C 可以实现精确的程序定时(
事件管理)、波形产生和信号测量。其主要特点如下
& 真正的16 位设计( 即允许16 位的PWM)
& 2 个独立的输出比较单元
& 双缓冲的输出比较寄存器
& 一个输入捕捉单元
& 输入捕捉噪声抑制器
& 比较匹配发生时清除寄存器( 自动重载)
& 无干扰脉冲,相位正确的PWM
& 可变的PWM 周期
& 频率发生器
& 外部事件计数器
& 4 个独立的中断源(TOV1、 OCF1A、OCF1B 与ICF1)
先看看图吧:
定时器/ 计数器TCNT1、输出比较寄存器OCR1A/B
与输入捕捉寄存器ICR1 均为16 位
寄存器。访问16 位寄存器必须通过特殊的步骤,详见P85“ 访问16 位寄存器” 。T/C 控
制寄存器TCCR1A/B 为8 位寄存器,没有CPU 访问的限制。中断请求( 图中简写为
Int.Req.) 信号在中断标志寄存器TIFR1 都有反映。所有中断都可以由中断屏蔽寄存器
TIMSK1 单独控制。图中未给出TIFR1 与TIMSK1。
T/C可由内部时钟通过预分频器或通过由T1引脚输入的外部时钟驱动。引发T/C数值增加(
或减少) 的时钟源及其有效沿由时钟选择逻辑模块控制。没有选择时钟源时T/C 处于停止
状态。时钟选择逻辑模块的输出称为clkT1。
双缓冲输出比较寄存器OCR1A/B 一直与T/C 的值做比较。波形发生器用比较结果产生
PWM或在输出比较引脚OC1A/B输出可变频率的信号。参见P91 “输出比较单元” 。比较匹
配结果还可置位比较匹配标志OCF1A/B,用来产生输出比较中断请求。
当输入捕捉引脚ICP1 或模拟比较器输入引脚( 见P189 “ 模拟比较器” ) 有输入捕捉事件
产生( 边沿触发) 时,当时的T/C 值被传输到输入捕捉寄存器保存起来。输入捕捉单元包
括一个数字滤波单元( 噪声消除器) 以降低噪声干扰。
在某些操作模式下, TOP 值或T/C 的最大值可由OCR1A 寄存器、ICR1 寄存器,或一
些固定数据来定义。在PWM 模式下用OCR1A 作为TOP 值时, OCR1A 寄存器不能用
作PWM 输出。但此时OCR1A 是双向缓冲的, TOP 值可在运行过程中得到改变。当需
要一个固定的TOP 值时可以使用ICR1 寄存器,从而释放OCR1A 来用作PWM 的输出。
(不介绍了,太多了,要是想详细了解,自己看datasheet吧,要是要的我给你~~)
5、16位定时/计数器1的寄存器
1)T/C1 控制寄存器A -
T/C1控制寄存器A用来设置通道A和B的输出模式,以及波形的发生模式,其定义:
& Bit 7:6 & COM1A1:0: 通道A 的比较输出模式
& Bit 5:4 & COM1B1:0: 通道B 的比较输出模式
COM1A1:0与COM1B1:0分别控制OC1A 与OC1B状态。如果COM1A1:0(COM1B1:0)的
一位或两位被写入"1”,OC1A(OC1B) 输出功能将取代I/O 端口功能。此时OC1A(OC1B)
相应的输出引脚数据方向控制必须置位以使能输出驱动器。
OC1A(OC1B) 与物理引脚相连时,COM1x1:0 的功能由WGM13:0 的设置决定。Table 44
给出当WGM13:0 设置为普通模式与CTC 模式( 非PWM) 时COM1x1:0 的功能定义。
& Bit 3 & FOC1A: 通道A 强制输出比较
& Bit 2 & FOC1B: 通道B 强制输出比较
FOC1A/FOC1B只有当WGM13:0指定为非PWM模式时被激活。为与未来器件兼容,工作
在PWM 模式下对TCCR1A 写入时,这两位必须清零。当FOC1A/FOC1B 位置1 ,立即
强制波形产生单元进行比较匹配。COM1x1:0 的设置改变 OC1A/OC1B 的输出。注意
FOC1A/FOC1B 位作为选通信号。COM1x1:0 位的值决定强制比较的效果。
在CTC 模式下使用OCR1A 作为TOP 值, FOC1A/FOC1B 选通即不会产生中断也不好
清除定时器。
FOC1A/FOC1B 位总是读为0。
& Bit 1:0 & WGM11:0: 波形发生模式
这两位与位于TCCR1B 寄存器的WGM13:2 相结合,用于控制计数器的计数序列——计
数器计数的上限值和确定波形发生器的工作模式( 见Table 47)。T/C 支持的工作模式有:
(这些东西还是要理解性的记忆的~~~~)
2)T/C1 控制寄存器B - TCCR1B
& Bit 7 & ICNC1: 入捕捉噪声抑制器
置位ICNC1 将使能输入捕捉噪声抑制功能。此时外部引脚ICP1 的输入被滤波。其作用
是从ICP1 引脚连续进行4 次采样。如果4 个采样值都相等,那么信号送入边沿检测器。
因此使能该功能使得输入捕捉被延迟了4 个时钟周期。
& Bit 6 & ICES1: 输入捕捉触发沿选择该位选择使用ICP1
上的哪个边沿触发捕获事件。ICES 为"0” 选择的是下降沿触发输入
捕捉; ICES1 为"1” 选择的是逻辑电平的上升沿触发输入捕捉。
按照ICES1 的设置捕获到一个事件后,计数器的数值被复制到ICR1 寄存器。捕获事件还
会置为ICF1。如果此时中断使能,输入捕捉事件即被触发。
当ICR1 用作TOP 值( 见TCCR1A 与TCCR1B 寄存器中WGM13:0 位的描述) 时,ICP1
与输入捕捉功能脱开,从而输入捕捉功能被禁用。
& Bit 5 & 保留位
该位保留。为保证与将来器件的兼容性,写TCCR1B 时,该位必须写入"0”。
& Bit 4:3 & WGM13:2: 波形发生模式见TCCR1A
寄存器中的描述。
& Bit 2:0 & CS12:0: 时钟选择这3 位用于选择T/C
的时钟源,见Figure 49 与 Figure 50。
3)T/C1计数寄存器 - TCNT1H
TCNT1H与TCNT1L组成了T/C1的数据寄存器TCNT1。通过它们可以直接对定时器/计数
器单元的16 位计数器进行读写访问。为保证CPU 对高字节与低字节的同时读写,必须
使用一个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的。
在计数器运行期间修改TCNT1的内容有可能丢失一次TCNT1与OCR1x的比较匹配操作。
写TCNT1 寄存器将在下一个定时器周期阻塞比较匹配。
4)输出比较寄存器
该寄存器中的16 位数据与TCNT1 寄存器中的计数值进行连续的比较,一旦数据匹配,将
产生一个输出比较中断,或改变OC1x 的输出逻辑电平。
输出比较寄存器长度为16 位。为保证CPU 对高字节与低字节的同时读写,必须使用一
个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的,详见P85 “ 访问
16 位寄存器” 。
5)输入捕捉寄存器1 - ICR1H 与ICR1L
当外部引脚ICP1(或T/C1的模拟比较器)有输入捕捉触发信号产生时,计数器TCNT1中的
值写入ICR1 中。ICR1 的设定值可作为计数器的TOP 值。
输入捕捉寄存器长度为16 位。为保证CPU 对高字节与低字节的同时读写,必须使用一
个8 位临时高字节寄存器TEMP。TEMP 是所有的16 位寄存器共用的。在PWM方式下,ICR1的
设定值将作为计数器计数上限值。
6)T/C1 中断屏蔽寄存器- TIMSK
& Bit 5 & TICIE1: T/C1
输入捕捉中断使能当该位被设为"1”,且状态寄存器中的I 位被设为"1” 时, T/C1
的输入捕捉中断使能。一
旦TIFR 的ICF1 置位,CPU 即开始执行T/C1 输入捕捉中断服务程序( 见P43 “ 中断” )。
& Bit 4 & OCIE1A: 输出比较 A
匹配中断使能当该位被设为"1”,且状态寄存器中的I 位被设为"1” 时, T/C1 的输出比较A
匹配中断使
能。一旦TIFR 上的OCF1A 置位,CPU 即开始执行T/C1 输出比较A 匹配中断服务程序。
& Bit 3 & OCIE1B: T/C1 输出比较 B 匹配中断使能
当该位被设为"1”,且状态寄存器中的I 位被设为"1” 时,使能T/C1 的输出比较B 匹配中
断使能。一旦TIFR 上的OCF1B 置位,CPU 即开始执行T/C1 输出比较B 匹配中断服务
& Bit 2 & TOIE1: T/C1
溢出中断使能
当该位被设为"1”,且状态寄存器中的I 位被设为”1” 时, T/C1 的溢出中断使能。一旦
TIFR 上的TOV1 置位, CPU 即开始执行T/C1 溢出中断服务程序。
7)T/C 中断标志寄存器- TIFR
& Bit 5 & ICF1: T/C1 输入捕捉标志位外部引脚ICP1
出现捕捉事件时ICF1 置位。此外,当ICR1 作为计数器的TOP 值时,一
旦计数器值达到TOP, ICF1 也置位。
执行输入捕捉中断服务程序时ICF1 自动清零。也可以对其写入逻辑"1” 来清除该标志位。
& Bit 4 & OCF1A: T/C1 输出比较 A 匹配标志位当TCNT1
与OCR1A 匹配成功时,该位被设为"1”。
强制输出比较(FOC1A) 不会置位OCF1A。
执行强制输出比较匹配A 中断服务程序时OCF1A 自动清零。也可以对其写入逻辑"1” 来
清除该标志位。
& Bit 3 & OCF1B: T/C1 输出比较 B 匹配标志位
当TCNT1 与OCR1B 匹配成功时,该位被设为"1”。
强制输出比较(FOC1B) 不会置位OCF1B。
执行强制输出比较匹配B 中断服务程序时OCF1B 自动清零。也可以对其写入逻辑"1” 来
清除该标志位。
& Bit 2 & TOV1: T/C1 溢出标志
该位的设置与T/C1 的工作方式有关。工作于普通模式和CTC 模式时,T/C1 溢出时TOV1
置位。对工作在其它模式下的TOV1 标志位置位,执行溢出中断服务程序时OCF1A 自动清零。也可以对其写入逻辑"1”
来清除该标志位。
6、8 位有PWM 与异步操作的定时器/ 计数器2
小小介绍~~~
T/C2 是一个通用单通道8 位定时/
计数器,其主要特点如下:
& 单通道计数器
& 比较匹配时清零定时器 ( 自动重载)
& 无干扰脉冲, 相位正确的脉宽调制器 (PWM)
& 频率发生器
& 10 位时钟预分频器
& 溢出与比较匹配中断源(TOV2 与OCF2)
& 允许使用外部的32 kHz 手表晶振作为独立的I/O 时钟源
其实这里重要的应该是异步操作,这里只是简单介绍一下下,后面会有实验专门来操作的,尽量给力~~~这里我也不详细介绍了,重要的是后面的寄存器
定时器/ 计数器TCNT2、输出比较寄存器OCR2 为8
位寄存器。中断请求( 图中简写为
Int.Req.)。信号在定时器中断标志寄存器TIFR 都有反映。 所有中断都可以通过定时器中
断屏蔽寄存器TIMSK 单独进行屏蔽。图中未给出TIFR 与TIMSK。
T/C 的时钟可以为通过预分频器的内部时钟或 通过由TOSC1/2 引脚接入的异步时钟,详
见本节后续部分。异步操作由异步状态寄存器ASSR 控制。时钟选择逻辑模块控制引起
T/C计数值增加(或减少)的时钟源。 没有选择时钟源时T/C处于停止状态。时钟选择逻辑模
块的输出称为clkT2。
双缓冲的输出比较寄存器OCR2 一直与TCNT2 的数值进行比较。波形发生器利用比较结
果产生PWM 波形或在比较输出引脚OC2 输出可变频率的信号。参见P111 “ 输出比较单
元” 。比较匹配结果还会置位比较匹配标志OCF2,用来产生输出比较中断请求。
7、8位T/C2的寄存器
1)T/C2的控制寄存器
& Bit 7 & FOC2: 强制输出比较
FOC2仅在WGM指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,使用
PWM 时,写TCCR2 要对其清零。写1 后,波形发生器将立即进行比较操作。比较匹配输
出引脚 OC2 将按照COM21:0 的设置输出相应的电平。要注意FOC2 类似一个锁存信号,
真正对强制输出比较起作用的是COM21:0 的设置。
FOC2 不会引发任何中断,也不会在使用OCR2 作为TOP 的CTC 模式下对定时器进行清
读FOC2 的返回值永远为0。
& Bit 6, 3 & WGM21:0: 波形产生模式
这几位控制计数器的计数序列,计数器最大值TOP 的来源,以及产生何种波形。T/C 支
持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式&。
& Bit 5:4 & COM21:0:
比较匹配输出模式这些位决定了比较匹配发生时输出引脚OC0 的电平。如果COM01:0
中的一位或全部都
置位, OC0 以比较匹配输出的方式进行工作。同时其方向控制位要设置为1 以使能输出
当OC0 连接到物理引脚上时, COM01:0 的功能依赖于WGM01:0 的设置。Table 51 给
出了当WGM01:0 设置为普通模式或CTC 模式时COM01:0 的功能。
& Bit 2:0 & CS22:0:
这三位时钟选择位用于选择T/C 的时钟源,见Table 54。
2)定时器/ 计数器寄存器-
通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。对TCNT2
寄存器的写访问
将在下一个时钟阻止比较匹配。在计数器运行的过程中修改TCNT2 的数值有可能丢失一
次TCNT2 和OCR2 的比较匹配。
3)输出比较寄存器-
输出比较寄存器包含一个8
位的数据,不间断地与计数器数值TCNT2 进行比较。匹配事
件可以用来产生输出比较中断,或者用来在OC2 引脚上产生波形。
4)异步状态寄存器-
& Bit 3 & AS2: 异步 T/C2
AS2为"0”时T/C2由I/O时钟clkI/O驱动;AS2为"1”时T/C2由连接到TOSC1引脚的晶体振荡
器驱动。改变AS2 有可能破坏TCNT2、OCR2 与TCCR2 的内容。
& Bit 2 & TCN2UB: T/C2
更新中T/C2工作于异步模式时,写TCNT2将引起TCN2UB置位。当TCNT2从暂存寄存器更新完
毕后TCN2UB 由硬件清零。TCN2UB 为0 表明TCNT2 可以写入新值了。
& Bit 1 & OCR2UB: 输出比较寄存器2 更新中
T/C2工作于异步模式时,写OCR2将引起OCR2UB置位。当OCR2从暂存寄存器更新完毕
后OCR2UB 由硬件清零。OCR2UB 为0 表明OCR2 可以写入新值了。
& Bit 0 & TCR2UB: T/C2
控制寄存器更新中T/C2工作于异步模式时,写TCCR2将引起TCR2UB置位。当TCCR2从暂存寄存器更新完
毕后TCR2UB 由硬件清零。TCR2UB 为0 表明TCCR2 可以写入新值了。
如果在更新忙标志置位的时候写上述任何一个寄存器都将引起数据的破坏,并引发不必
要的中断。
读取TCNT2、OCR2 和TCCR2 的机制是不同的。读取TCNT2 得到的是实际的值,而
OCR2 和TCCR2 则是从暂存寄存器中读取的。
定时器/ 计数器2
的异步操作(这里还是挺重要的~~)
T/C2 工作于异步模式时要考虑如下几点:
& 警告:在同步和异步模式之间的转换有可能造成TCNT2、OCR2 和TCCR2 数据的损
毁。安全的步骤应该是:
1. 清零OCIE2 和TOIE2 以关闭T/C2 的中断
2. 设置AS2 以选择合适的时钟源
3. 对TCNT2、OCR2 和TCCR2 写入新的数据
4. 切换到异步模式:等待TCN2UB、OCR2UB 和TCR2UB 清零
5. 清除T/C2 的中断标志
6. 需要的话使能中断
& 振荡器最好使用32.768 kHz手表晶振。给TOSC1 提供外部时钟,可能会造成T/C2 工
作错误。系统主时钟必须比晶振高4 倍以上。
& 写TCNT2,OCR2和TCCR2时数据首先送入暂存器,两个TOSC1时钟正跳变后才锁
存到对应到的寄存器。在数据从暂存器写入目的寄存器之前不能执行新的数据写入
操作。3 个寄存器具有各自独立的暂存器,因此写TCNT2 并不会干扰OCR2 的写
操作。异步状态寄存器ASSR 用来检查数据是否已经写入到目的寄存器。
& 如果要用T/C2 作为MCU 省电模式或扩展Standby 模式的唤醒条件,则在TCNT2,
OCR2A和TCCR2A更新结束之前不能进入这些休眠模式,否则MCU可能会在T/C2设
置生效之前进入休眠模式。这对于用T/C2 的比较匹配中断唤醒MCU 尤其重要,因
为在更新OCR2 或TCNT2 时比较匹配是禁止的。如果在更新完成之前(OCR2UB为0)MCU
就进入了休眠模式,那么比较匹配中断永远不会发生, MCU 也永远无法
& 如果要用T/C2作为省电模式或扩展Standby模式的唤醒条件,必须注意重新进入这些
休眠模式的过程。中断逻辑需要一个TOSC1 周期进行复位。如果从唤醒到重新进入
休眠的时间小于一个TOSC1 周期,中断将不再发生,器件也无法唤醒。如果用户怀
疑自己程序是否满足这一条件,可以采取如下方法:
1. 对TCCR2、TCNT2 或OCR2 写入合适的数据
2. 等待ASSR 相应的更新忙标志清零
3. 进入省电模式或扩展Standby 模式
& 若选择了异步工作模式,T/C2 的 32.768 kHz 振荡器将一直工作,除非进入掉电模式
或 Standby 模式。用户应该注意,此振荡器的稳定时间可能长达1 秒钟。因此,建
议用户在器件上电复位,或从掉电/Standby 模式唤醒时至少等待1 秒钟后再使用
T/C2。同时,由于启动过程时钟的不稳定性,唤醒时所有的T/C2 寄存器的内容都可
能不正确,不论使用的是晶体还是外部时钟信号。用户必须重新给这些寄存器赋值。
& 使用异步时钟时省电模式或扩展Standby 模式的唤醒过程:中断条件满足后,在下一
个定时器时钟唤醒过程启动。也就是说,在处理器可以读取计数器的数值之前计数
器至少又累加了一个时钟。唤醒后MCU 停止4 个时钟,接着执行中断服务程序。中
断服务程序结束之后开始执行SLEEP 语句之后的程序。
& 从省电模式唤醒之后的短时间内读取TCNT2 可能返回不正确的数据。因为TCNT2 是
由异步的TOSC 时钟驱动的,而读取TCNT2 必须通过一个与内部I/O 时钟同步的寄
存器来完成。同步发生于每个TOSC1 的上升沿。从省电模式唤醒后I/O 时钟重新激
活,而读到的TCNT2 数值为进入休眠模式前的值,直到下一个TOSC1 上升沿的到
来。从省电模式唤醒时TOSC1 的相位是完全不可预测的,而且与唤醒时间有关。因
此,读取TCNT2 的推荐序列为:
1. 写一个任意数值到OCR2 或TCCR2
2. 等待相应的更新忙标志清零
3. 读TCNT2
& 在异步模式下,中断标志的同步需要3 个处理器周期加一个定时器周期。在处理器可
以读取引起中断标志置位的计数器数值之前计数器至少又累加了一个时钟。输出比
较引脚的变化与定时器时钟同步,而不是处理器时钟。
5)定时器/ 计数器中断屏蔽寄存器-
& Bit 7 & OCIE2: T/C2
输出比较匹配中断使能
当OCIE2 和状态寄存器的全局中断使能位I 都为"1” 时,T/C2 的输出比较匹配A 中断使
能。当T/C2 的比较匹配发生,即TIFR 中的OCF2 置位时,中断服务程序得以执行。
& Bit 6 & TOIE2: T/C2 溢出中断使能当TOIE2
和状态寄存器的全局中断使能位I 都为"1” 时,T/C2 的溢出中断使能。当T/C2
发生溢出,即TIFR 中的TOV2 位置位时,中断服务程序得以执行。
6)定时器/ 计数器 中断标志寄存器-
& Bit 7 & OCF2: 输出比较标志 2
当T/C2 与OCR2( 输出比较寄存器2) 的值匹配时,OCF2 置位。此位在中断服务程序里
硬件清零,也可以通过对其写1 来清零。当SREG 中的位I、OCIE2 和OCF2 都置位时,
中断服务程序得到执行。
& Bit 6 & TOV2: T/C2 溢出标志当T/C2 溢出时, TOV2
置位。执行相应的中断服务程序时此位硬件清零。此外, TOV2
也可以通过写1 来清零。当SREG 中的位I、TOIE2 和TOV2 都置位时,中断服务程序
得到执行。在PWM 模式中,当T/C2 在0x00 改变记数方向时, TOV2 置位。
这里也用到特殊功能寄存器:补充:
好了,现在基本上好了~~累死了
下面就是实验了,哈哈
4位秒表啊~~~吼吼
先贴张图片看看那
然后就是Proteus仿真~~~
出了点问题~~整了半天~~哭
个人认为是个Bug~~你懂得,我以前用51的时候就有这个问题,显示不完整,可能是更新太快了~
然后是按下INT0:
最后是按下S1:
基本上就这点吧~~这里边比较难理解的就是那个去取反的重定义!!!!再IAR工具的应用里会有介绍(就是持续更新的那个~~毕竟有很多要更新的~~)
然后就是程序了~~
//------------------------------------------------------------------------------
//4位显示秒表试验
//使用INT0键进行计时的开始和停止,使用S1键作为计时值得清除。定时器T0被用作扫描4
//位数码管(1ms),定时器T1则用来计时(10ms)
#include"ioavr.h"
#include"intrinsics.h"
typedef unsigned int&
__flash uchar
seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
&&&&&&&&&&&&&&&&&&&&&&&
0x7c,0x39,0x5e,0x79,0x71};&&&&&&&&&&&&&&&&&
//共阴极数码管
__flash uchar act[4]={0xfe,0xfd,0xfb,0xf7};
&&&&&&&&&&&&&&&
全局变量,计时值&&&&&&&&&&&&&
flag_&&&&&&&&&&
//全局变量,秒表启动标志
i;&&&&&&&&&&&&&&&&&
//每次进入T0,对第i个数码管刷新
#define CPL_BIT(x,y)&
(x^=(1&&y))&&&&
//就是将x所对应的第y位取反
#define s1&
(PIND&0X10)&&
//对S1进行按键检测的时候用到,如果检测到,对cnt清0,你懂得why~~
#define xtal&
8&&&&&&&&&&
//由于这里用到的是8MHz的,所以定义为8,写延时函数的时候会用到,回头我会把IAR for
AVR的精确延时写到博客上~~
//------------------------------------------------------------------------------
//延时1ms的函数,没有参数传递
void& delay_1ms()
for(i=1;i&(uint)(xtal*143-2);i++)
//------------------------------------------------------------------------------
//延时nms的函数,有参数传递
void& delay_nms(uint n)
& uint i=0;
& while(i&n)
delay_1ms();
//------------------------------------------------------------------------------
//端口定义函数,用来定义ABCD四个端口的输入输出
void& port_init()
& DDRA=0XFF;
& PORTA=0X00;
& DDRC=0XFF;
& PORTC=0XFF;
& DDRD=0X00;
& PORTD=0XFF;
//------------------------------------------------------------------------------
//T0的初始化定义
void& timer0_init()
TCNT0=0X83;&&&&&&&&&&&&&&
//1ms的定时初值
TCCR0=0X03;&&&&&&&&&&&&&&
//T0的计数预分频取64,这就打开了T0的计数功能
//------------------------------------------------------------------------------
//T1的初始化函数
void& timer1_init()
TCNT1H=0XD8;&&&&&&&&&&&&&
//10ms的定时初值
& TCNT1L=0XF0;
//------------------------------------------------------------------------------
//按键检测函数
void& scan_s1()
& if(s1==0)
delay_nms(10);
//------------------------------------------------------------------------------
//芯片初始化函数,包含上面的所有初始化,以及没有涉及的
void device_init()
__disable_interrupt();&&&&&
//disable all
interrupts,呵呵,不解释都知道,SREG?这个我不知道在不在里面,从下面的来看应该在,回头会具体分析的~~哈
& port_init();
& timer0_init();
& timer1_init();
MCUCR=0X00;&&&&&&&&&&&&&&&&&
//INT0为低电平时产生中断请求
GICR=0X40;&&&&&&&&&&&&&&&&&&
//使能INT0
TIMSK=0X05;&&&&&&&&&&&&&&&&&
//使能T0和T1溢出中断
__enable_interrupt();&&&&&&&
//re-enable interrupts
//------------------------------------------------------------------------------
void& main()
& device_init();
& while(1)
if(flag_start==0x01)
TCCR1B=0X02;&&&&&&&&&&&
//如果启动标志位为1,则启动T1,计数预分频取8
if(flag_start==0x00)
TCCR1B=0X00;&&&&&&&&&&&
//相反,定时器标志位为0,则关闭T1,停止计数,检测S1,如果按下,对cnt清0
scan_s1();
//------------------------------------------------------------------------------
#pragma vector=INT0_vect
__interrupt void& int0()
CPL_BIT(flag_start,0);&&&&&&&&&&&
//取反启动标志,这里对第0位取反
& delay_nms(10);
//------------------------------------------------------------------------------
//TIMER0_OVF
#pragma vector=TIMER0_OVF_vect
__interrupt void& timer0_ovf()
& SREG=0X80;
& TCNT0=0X83;
& if(++i&3)
& switch(i)
& case 0: PORTA=seg[cnt];PORTC=act[i];
PORTA=seg[cnt0/10];PORTC=act[i];
PORTA=seg[cnt00/100];PORTC=act[i];
PORTA=seg[cnt/1000];PORTC=act[i];
& default:
//------------------------------------------------------------------------------
//TIMER1_OVF
#pragma vector=TIMER1_OVF_vect
__interrupt void& timer1_ovf()
& TCNT1H=0XD8;
& TCNT1L=0XF0;
& if(++cnt&999)
&&& cnt=0;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 c语言计数器 的文章

 

随机推荐