4.1 任务4.1 简易交通灯的实现-正计数倒计数模式_第1页
4.1 任务4.1 简易交通灯的实现-正计数倒计数模式_第2页
4.1 任务4.1 简易交通灯的实现-正计数倒计数模式_第3页
4.1 任务4.1 简易交通灯的实现-正计数倒计数模式_第4页
4.1 任务4.1 简易交通灯的实现-正计数倒计数模式_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机应用技术项目四简易交通灯的实现任务4.1简易交通灯的实现—正计数/倒计数模式任务要求

使用CC2530开发板的D4、D3两个灯分别来模拟交通灯的红灯、绿灯,同一时刻只有一个灯亮,D4亮或D3亮,用来表示禁行或者通行,且红灯亮1s后,绿灯再亮1s,依次交替。1基础知识2相关寄存器3中断运用4任务分析5任务实现一、基础知识

什么是定时/计数器一种能够对内部的时钟信号或外部的输入信号进行计数,当计数值达到设定要求时便向CPU提出处理请求,从而实现定时或计数功能的外设。也称为定时计数器,或定时器,或计数器,用T表示。一、基础知识

工作原理定时/计数器的核心是一个计数器,可以进行加1(或减1)计数,每出现一个计数信号,计数器就自动加1(或自动减1),当计数值从0变成最大值(或从最大值变成0)产生溢出,定时/计数器便向CPU发出中断请求。计数信号周期性的内部时钟信号非周期性的外部输入信号计数功能定时功能计数信号的周期,也称为计数周期一、基础知识

解放CPU,提高CPU工作效率定时器的工作示意图一、基础知识

作用实现定时和计数,且在整个工作过程中不需要CPU进行过多参与,它的出现将CPU从相关任务中解放出来,提高了CPU的使用效率。一、基础知识

定时功能计数功能定时功能,即每隔一个计数周期,定时/计数器计数值加1(或减1),当计数值达到指定值时,说明定时时间已到。这是定时/计数器的常用功能,可用来实现延时或定时控制。计数功能,即对任意时间间隔的输入信号的个数进行计数。一般用来对外界事件进行计数,其输入信号一般来自CC2530单片机外部开关型传感器,可用于生产线产品计数、信号数量统计和转速测量等方面。一、基础知识

计数周期

二、工作模式

五个定时器1定时器2定时器3定时器4睡眠定时器16位8位8位自由运行模正计数/倒计数二、工作模式

T1从0x0000开始,每经过一个计数周期增加1,当计数器达到0xFFFF时溢出,计数器重新载入0x0000,开始新一轮递增计数。自由运行模式16位达到最大值时,系统设置标志位IRCON.T1IF和T1STAT.OVFIF。如果设置了相应的中断屏蔽位TIMIF.T1OVFIM和IEN1.T1IE,将产生溢出中断.运行周期FFFF+1二、工作模式

模模式T1从0x0000开始,每经过一个计数周期增加1,当计数器达到T1CC0寄存器保存的值时溢出,计数器重新载入0x0000,开始新一轮递增计数。一般用于自定义定时周期,且需要启动通道0的输出比较模式,产生输出比较中断。特殊情况:从比T1CC0寄存器值大的数值可以计数,则会增加到OxFFFF,且产生溢出中断。达到OxFFFF时,系统设置标志位IRCON.T1IF和T1STAT.OVFIF。二、工作模式

T1CCO模模式T1CCO寄存器由2个8位寄存器T1CC0H、T1CCOL构成,分别用来保存最终计数值的高8位和低8位。定时周期不固定,由用户自行设定。对于T1来说,共有5个比较通道,即T1CC0、T1CC1、T1CC2、T1CC3、T1CC4;均16位。补充:对于T2来说,共有2个比较通道;均8位。二、工作模式

正计数/倒计数模式T1从0x0000开始,每经过一个计数周期增加1,正计数到T1CCO保存的最终计数值,然后再倒计数回0x0000。再次到达0时,系统设置标志位IRCON.T1IF和T1STAT.OVFIF.如果设置了相应的中断屏蔽位TIMIF.T1OVFIM和IEN1.T1IE,将产生中断.二、工作模式

补充T3和T4还有倒计数模式,共4种运行模式,类似于模模式,只不过是设定值倒计数到0。三、相关寄存器T1STAT寄存器位名称复位操作描述7:6—00R0保留5OVFIF0R/W0T1溢出中断标志位。当T1在自由运行模式或模模式下,计数值达到最终计数数值时置位,在正计数/倒计数模式下,计数值达到0时置位。写1没有影响4CH4IF0R/W0T1通道4中断标志位。当通道4中断条件发生时置位。写1没有影响3CH3IF0R/W0T1通道3中断标志位。当通道3中断条件发生时置位。写1没有影响2CH2IF0R/W0T1通道2中断标志位。当通道2中断条件发生时置位。写1没有影响1CH1IF0R/W0T1通道1中断标志位。当通道1中断条件发生时置位。写1没有影响0CH0IF0R/W0T1通道0中断标志位。当通道0中断条件发生时置位。写1没有影响

三、相关寄存器IRCON寄存器不需要手动清除可以位寻址

位名称复位操作描述7STIF0R/W睡眠定时器中断标志位。0:无中断未决。1:中断未决6—0R/W必须写为0,写入1总是使能中断源5P0IF0R/WP0端口中断标志位。0:无中断未决。1:中断未决4T4IF0R/WH0T4中断标志位。当T4中断发生时置位,且当CPU指向中断服务函数时清除。0:无中断未决。1:中断未决3T3IF0R/WH0T3中断标志位。当T3中断发生时置位,且当CPU指向中断服务函数时清除。0:无中断未决。1:中断未决2T2IF0R/WH0T2中断标志位。当T2中断发生时置位,且当CPU指向中断服务函数时清除。0:无中断未决。1:中断未决1T1IF0R/WH0T1中断标志位。当T1中断发生时置位,且当CPU指向中断服务函数时清除。0:无中断未决。1:中断未决0DMAIF0R/WDMA完成中断标志位。0:无中断未决。1:中断未决三、相关寄存器可位寻址默认是1,说明这个“开关”默认是开着的,允许中断位名称复位操作描述7—0R0没有使用6T1OVFIM1R/WT1溢出中断屏蔽位5T4CH1IF0R/W0T4通道1中断标志位。0:无中断未决。1:中断未决4T4CH0IF0R/W0T4通道0中断标志位。0:无中断未决。1:中断未决3T4OVFIF0R/W0T4溢出中断标志位。0:无中断未决。1:中断未决2T3CH1IF0R/W0T4通道1中断标志位。0:无中断未决。1:中断未决1T3CH0IF0R/W0T4通道0中断标志位。0:无中断未决。1:中断未决0T3OVFIF0R/W0T3溢出中断标志位。0:无中断未决。1:中断未决

TIMIF寄存器三、相关寄存器T1CTL位名称复位操作描述7:4-0000R0未使用3:2DIV[1:0]00R/WT1时钟分频设置00:1分频01:8分频10:32分频11:128分频1:0MODE[1:0]00R/W定时器1工作模式设置00:暂停运行01:自由运行模式10:模模式11:正计数/倒计数模式16MHZ的内部RC振荡器32MHZ的外接晶体振荡器振荡周期分频系数计数周期设置工作模式之后,T1就开始工作注意:默认采用16MHZ三、相关寄存器

问题:T1在自由运行模式下,最长定时时间为多少?问:T1是否最多就可以定时0.524288s?假如要求T1定时3S,应该怎么做呢?三、相关寄存器

T1CCxHT1CCxLx:0-4,表示定时器1的通道0到通道4x取值后,T1CCxH与T1CCxL配对使用,分别存放高8位和低8位先写T1CCxL,再写T1CCxHT1通道0-4捕获/比较值的高8位,低8位。三、相关寄存器

T1CNTHT1CNTL分别记录当前计数值的高8位和低8位先读T1CNTL,再读T1CNTH四、中断运用

定时器产生中断的3种情况定时器达到最终计数值,自由运行模式或模模式下计数到0xFFFF;正计数/倒计数模式下到Ox0000。输出比较事件。输入捕获事件。四、中断运用

T1的中断控制位T1IET1OVFIM使能T1中断;位于IEN1寄存器中。计数溢出中断屏蔽位;置1时,计数溢出中断使能;默认值为1。EA中断系统控制位;位于IEN0寄存器中。四、中断运用

IRCON寄存器T1IFT2IFT3IFT4IF该中断标志位会在执行中断服务函数时会自动清除,不需要用户手动操作。T1STAT寄存器位名称复位值操作描述7:6--00R0未使用5OVFIF0R/W0T1溢出中断标志4:0CHxIF0R/W0定时器1通道4到通道0的中断标志T1的中断标志位五、任务分析

选用T1,让其每隔固定时间产生一次中断请求。在T1的中断服务函数中判断定时时间是否到达1s,如果到达1s则直接在中断服务函数中切换D4、D3的亮灭状态。六、任务实现

初始化T1设置T1分频系数T1CTL

|=

0x0c;设置T1最大计数值本任务要求定时时间为1s,根据CC2530单片机时钟源的选择和T1的分频系数选择可知,T1在自由运行模式下,最长定时时间略大于0.52s。为便于在程序中进行计算,可设置T1的定时时间为0.5s。六、任务实现

定时器最大计数值计算过程1.T定时

=0.5s。2.当T1使用正计数/倒计数模式时,在一个定时周期中,正计数时间和倒计数时间相同,故T正计数

=T倒计数=0.25s。3.定时0.25s,则需要计数周期的个数是:0.25s/T计数

=0.25/8*10-6=31250。4.31250是十进制,转换为十六进制,为0x7a12。即在正计数/倒计数模式下,T1的最大计数值为:0x7a12。设置T1最大计数值0x7a12,其实现代码如下所示。T1CC0L

=

0x12;

//设置最大计数值的低位字节

T1CC0H

=

0x7a;

//设置最大计数值的高位字节。六、任务实现

T1中断服务函数#pragma

vector

=

T1_VECTOR

__interrupt

void

t1_fuc(void)

{

T1STAT

&=~

0x20;

//清除T1溢出中断标志位

count++;

//T1溢出次数加1

if(count

==

2)

//如果溢出次数到达2说明经过了1s

{

D4

=

!D4;

//D4切换亮灭状态

D3

=

!D3;

//D3切换亮灭状态

count

=

0;

//溢出次数清零

}

}六、任务实现

void

main()

{

/***********D3、D4初始化部分*************/

P1SEL

&=~

0x03;

//设置P1_0、P1_1为普通I/O引脚

P1DIR

|=

0x03;

//设置P1_0、P1_1为输出方向

D4

=

1;

//点亮D4

D3

=

0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论