用VLO额外加分 视频系列频,实现1Hz左右的LED闪烁;接着利用GPIO口按键中断实现DCO控制下的10Hz左

&系统软件的设计 - MSP43O实现家用烟雾报警器
3 系统软件的设计与实现
  为了便于系统维护和功能扩展,系统软件采用了模块化的设计方法,采用了C语言编程。系统软件包括主程序、中断唤醒子程序、烟雾信号检测子程序和电池电压检测子程序。主程序流程图如图3所示。
  初始化时,将校准的1MHz DCO值送入DCO控制寄存器,再根据已校准的DCO时钟源校准VLO,MCU工作在低功耗模式LPM3。TA0每8s中断一次,MCU退出LPM3模式,调用烟雾信号检测子程序。为了避免误报警,系统只有连续3次探测到烟雾信号,才启动报警电路报警。第1次探测到烟雾信号后,VLO时钟源经4分频作为定时器A信号源,即第2次采样间隔4s;如果第2次仍探测到烟雾信号,定时器A时钟源直接由VLO输入1s采样;如果第3次仍探测到烟雾信号,系统开始警报,烟雾探测器继续以1s周期进行采样。为了降低系统功耗,在烟雾采样转换期间,MCU进入LPM3模式。
  在烟雾信号检测子程序中,首先通过P2.7和P1.4口分别打开LED和运放,将ADC10设定成4次单通道连续转换,通过ADC10的DTC特性将转换结果暂存到MCU的RAM中,运放经延时稳定后启动ADC,MCU进入LPM3模式,在完成4次AD转换后DTC中断,DTC中断服务程序返回,MCU进入活动模式,然后红外发射管打开,同样延时稳定后再进行一轮4次连续AD转换,采样结束后关闭运放、红外发射管、ADC及发光二极管,最后调用计算平均值子程序,计算两次连续4次AD转换的平均值,主程序调用计算结果确定是否探测到烟雾信号。
  4 结束语
  此系统符合国标GB《独立式感烟火灾探测报警器》认证的要求。实践证明,此系统具有体积小、功耗低、灵敏度高、应用灵活、可靠性高、实时性强等特点,是高性能家用烟感的最佳选择方案。
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
交流市电经二极管D1半波整流,与电阻R1、R2、R3和R4串联组成分压器.在R3上分得较小电压去控制...
本文主要介绍了简易水位报警器制作_制作简单的水满报警器。介绍一款以555时基集成电路为主要元件制作的...
鉴于现阶段老人跌倒报警器在携带等方面存在的问题,提出了一种利用陀螺仪、加速度计以及磁力计等惯性传感元...
如果将频率升高到20kHz,20kΩ负载的光敏三极管充放电速度跟不上,信号有衰减,必须要减小负载电阻...
CMOS反相电路IC1a、1b组成RC振荡器产生2kHz调制波,其输出经IC1c缓冲、D1整流后加到...
名称:开关控制报警器
说明:用 K1 开关控制报警器,程序控制 P1.0 输出两种不同频率的声...
本文主要介绍了计数报警器电路设计方案汇总(多款模拟电路设计原理图详解),方案二主要由直流电源电路(整...
本文主要介绍了蜂鸣器报警器电路图大全(五款模拟电路设计原理图详解)。方案二电路是通过运算放大器进行驱...
本文主要介绍了断水报警器电路设计方案汇总(四款模拟电路设计原理图详解)。该断水报警器电路由断水检测电...
本文主要介绍了红外线报警器电路设计方案汇总(八款模拟电路设计原理图详解)。红外报警器由报警主机和红外...
本文主要介绍了声光报警器电路设计方案汇总(五款模拟电路设计原理图详解),声光报警系统基本原理是单片机...
本文主要介绍了光控报警器电路设计方案汇总(四款模拟电路设计原理图详解)。光控报警电路中关键元器件就是...
本文主要介绍了555报警器电路原理图(八款模拟电路设计原理图详解)。基于555的简易防盗报警器的设计...
本文主要介绍了燃气报警器电路图大全(六款模拟电路设计原理图详解)。使用燃气燃料时必须注意安全,若遇意...
本文主要介绍了人体感应报警器电路图大全(七款模拟电路设计原理图详解)。人体发出的红外线波长在9~10...
本文主要介绍了断线报警器电路图大全(六款模拟电路设计原理图详解)。方案五介绍的微功耗断线式防盗报警器...
本文主要介绍了停电报警器电路设计方案汇总(五款模拟电路设计原理图详解),方案三分析了大部分电冰箱没有...
本文主要介绍了振动防盗报警器电路设计方案汇总(六款防盗报警器电路原理图详解)。方案二感应式防盗报警电...
本文主要介绍了水位报警器设计电路图大全(八款模拟电路设计原理图详解)。方案一的这种水位报警器整个电路...
本文介绍一款自行研制的无源监听型电话报警器。除具有同类报警器的主要功能外,其最大特点是无需电源(由电...
八路语音报警器不仅有语音部分的报警,同时也有报警显示,这两种功能的实现,均由单片机控制,由于篇所限。...
红外线发射器由IC2、R1、R2、C3等元件组成振荡频率为40kHz的多谐振荡器。D1是红外线发射探...
采用这种星型拓扑结构能够很好地扩展组合,容易增加网络节点,满足在家居中网络节点分布的不确定性,可在房...
本文采用完全集成混合信号片上系统(MCU)的C和无线收发器CC2500设计了一套移动...
该报警器能探测人体发出的红外线,当人进入报警器的监视区域内,即可发出报警声,适用于家庭、办公室、仓库...
目前,手机、MP3和笔记本 电脑等便携式电子设备进行充电主要采用的是一端连 接交流电源,另一端连接便...
据国外媒体报道,在经过了长达数月的寒冬后,我们终于迎来了期待已久的夏天。不过,虽然夏天相比冬季更受到...
传统的有线防盗报警器都是检测到有盗情的时候只在本地发出警报声音,内部没有控制器,易被破坏失效,安装、...
独立型烟雾警报器设计硬件电路图如图所示: 图 独立型烟雾警报器设计硬件电路图
电子发烧友网讯: 关于51单片机的设计及应用你都掌握透了吗?想一起来欣赏电子发烧友网最受欢迎的10大...
  当前人们对家居防火、防盗以及对家用电器远程控制的需求日益提升, 同时手机已经成为居民随身携带的通...
没学过电子你也会:地震报警器的制作,为了使电路可靠,不采用电源开关断电,提高了电路系统的可靠性,如果...
可用于任何数量的常开开关。适合水银开关,使他们接近时转向移动或自行车时升空,其并排站立,或被推离中心...
设计一个单片机控制的简易定时报警器。要求根据设定的初始值(1-59 秒)进行倒计时,当计时到0 时数...
这个简单的电路能在交流电源断电(或电压低于50V)时发出报警声。 交流市电经 二极管 D1半波整流,...
家庭守护天使--VF1型电话防盗报警器由:报警器主机和有线人体热释电红外探头组成,当设定的防区出现人...
红外线电子栅栏报警器已经被广泛应用于各类安保场合,它具备结构简单、造价低廉、可靠性好等优点。根据家庭...
SN75454B构成的四路报警器电路中若采用两个SN75454B芯片,则可构成八路报警器。可采用多个...
该家用地震报警器电路由触发控制电路和声光报警电路组成,使用时,将检测装置安装在室内墙壁上或窗台上。
液位报警器电路分为液位传感器和信号处理器两部分。R1-R3、C1-C3、VT及L1、L2构成了液位传...
本例介绍的非接触式液位报警器一般适用强酸或强碱溶液的液位报警。非接触式液位报警器分为液位传感器和信号...
该电路能同时检查多根导线,从而实现快速、准确地检测出电缆中是否有断线以及哪根导线断线,特别适合电信检...
简易延时 防盗报警器 电路原理:压下S1,C1充电提供电压。通过偏置电阻R2和R3偏向Q1。该电压在...
UI放大了由电容话筒发出的声音。电阻R1起限制电流作用,当R2和R3中心放大输出1/2 B+,允许单...
定时器(U1)执行双重任务;控制报警触发电路和输入延迟电路。在该电路中,通过第2管脚使R1触发U1,...
微功耗断线式防盗 报警器 工作原理: 如附图所示。电路中由R1为BG1的b极提供偏置电压。在警戒状态...
低功率、绝缘隔离电源对于工业传感器是很有用的,如用于简单的环路报警器。在50/60Hz变压器用在功率...
基于单片机的无线门铃报警器,将发射器发送的数据进行编码,只有收到与接收机相配套的遥控器发射出的信号时...
基于CA3083的五路触摸 报警器 电路利用集成电路芯片CA3083构成。平时该电路处于开路状态,电...
图(a)是用一片CMOS六反相器CD4069制作的漏电报警器。平时,由门A、门B、R2、YD组成的音...
该装置由发射器和接收器组成,将发射器放入行李里,接收器随身带,当物品离开自身超3m(米)时,接收器便...
工作时,发送部分和接收部分同时进行,将SPKRl和SPKR2同方向对准检测目标,彼此相距约为0.3米...
电子发烧友为大家提供了红外线行车间距报警器电路,本站还有许多其他相关资源,希望对您有所帮助!
音乐集成电路A受控工作,宝宝掀被情况下喇叭BL发出呼叫声。本站还有其他相关资源,欢迎浏览!
该报警器由红外线发射、接收、蜂鸣器和LED指示灯组成。正常情况下,绿色的LED常烁,表示监控区域正常...
本例介绍的水稻育苗床高温报警器,能在育秧棚内温度超过27℃(或26℃)时,发出声音报警,提醒农户...
键盘必须与一个共同的终端类 - 并为每个键单独的连接。一个12键键盘 - 13。用7或8个终...
这里介绍的水位报警器电路十分简单,它仅用一节五号电池作电源,体积小巧,和普通烟盒大小相仿.它可以用于...
  如何建立一个更简单的CMOS单防区报警器
  这是一个简单的单区防盗
  如何构建基于一个CMOS单防区报警器
  该电路具有自动出入延误 - 计时钟切断 ...
  如何构建基于单个区域晶体管报警器
  该电路具有自动出/入延误 - 计时贝尔/警报...
  如何建立个人报警器
  如何建立二区域防盗报警器
这例水位报警器可用于洗衣机中作水位高度控制报警.当洗衣机筒中的水加到需要的高度时,该报警器即发出"嘟...
这一例防盗报警器采用高音扬声器发声,音响输出功率可达20W.触发方式为断线触发式,即连线一断,电路立...
所谓太阳能防盗报警器,就是它的电源不用稳压电源或干电池,而是采用一种太阳能电池作电源,这样可以在相
这是一个用CC4069和一对红外线管制成的红外报警电路,它的监控距离1~2米,适合干门,窗等部位的防...
这是一个用于尿布尿湿后发出声响的报警电路,电路中作为湿传感器的两根铜钱在干燥时呈开路状态,几乎无
光电报警器在劳动保护和安全保护方面有一定的用处,图中所示是光电报警器线路。图示线路中A、B、C、D是...
图中所示是用与非门组成的一个多用途报警器,图示线路F1、F2和R1、C1组成键控振荡器,F2、F1和...
采用人工感觉和较先进的红外探测技术监测列车轴温,都只能在停车时定点测量。本
  1 系统设计优化比较
  目前可燃性气体泄漏报警器的实现技术分为两大类,一类是以单片机为核心的...
  该装置电路原理见图1。由红外线传感器、信号放大电路、电压比较器、延时电路和音响报警电路等组成。红...
图215介绍的光电报警器,可省去灵敏继电器,电路简单、调试方便、耗电量小,可用于防盗报警或电子玩具。...
这里介绍的报警器,具有结构简单、元件小、便于安装等优点。它利用电桥平衡原理,主要元件是四个电阻和
图210是感应报警器的电路图。它的基本原理是利用人体的感应来动作电子开关,接通报警电路。
这种报警器是用集成块装的。当有人触动安了报警器的门锁时,它就会发生长达5MIN的警报信号。
本章介绍无线防盗报警系统中主机的制作,采用了AT89C2051单片机作为
该温度报警器可设定温度的上下限,以将温度控制在一定的范围内。报警器采用了一块施密特集成电路CD409...
双路防盗报警器的设计
1.设计任务与要求&&& 1)设计一个双路防盗...
澳大利亚消防呼吁及时更换烟雾报警器电池
据澳大利亚www.fire.qld.gov.au 2010...
单片机报警器声音产生的方法
1.实验任务
用单片机P1.0输出1KHz和500Hz的音频信号驱...
智能无线防盗报警器的设计实现 
本文设计的无线防盗报警器利用单片机控制,功能强大,并且易于扩展成多...
电网断线报警器电路原理
 &&该装置的电路工作原理见下图。当铁丝网Fe完好时,...
文物防盗报警器电路工作原理
 该装置的电路工作原理见下图。展览馆的许多文物属国宝,对它们的保护措施...
基于单片机的瓦斯报警器设计
  当前,随着采矿技术的不断发展,井下作业的安全...
无线发射摩托车防盗报警器电路
摩托车无线报警器
汽笛报警器
邻近报警器Ⅱ
该电路由一个COMS逻辑门组成,当一个物体接近人线时,
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-电设工作小结之——MSP430G2553学习笔记——1
> 电设工作小结之——MSP430G2553学习笔记——1
电设工作小结之——MSP430G2553学习笔记——1
把这几天的工作做一个小结:第一版本文引用地址:MSP430G2553学习笔记Createdon:Author:zhangbin学习笔记formsp430g2553redesignedbyzhang binversions:12_08_01一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。程序如下:voidIO_interrupt_init()//IO中断初始化函数{P1REN|=BIT4+BIT5+BIT6+BIT7;//pullup内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT=BIT4+BIT5+BIT6+BIT7;//当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE|=BIT4+BIT5+BIT6+BIT7;//interruptenabledP13中断使能P1IES|=BIT4+BIT5+BIT6+BIT7;//Hi/loedge下降沿中断//P1IES&=~BIT3;//上升沿触发中断P1IFG&=~(BIT4+BIT5+BIT6+BIT7);//中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。所以不用的IO口可以设为输出状态,或设为输入状态但通过外围电路接至VCC或GND,或接一个上拉/下拉电阻。7,当使用msp430g2553的IO口时要注意,因为g2553的IO口寄存器的操作,不像51,它不能单独针对某一位进行操作,必须对整个寄存器进行操作。所以就不像51,g2553不可以定义bit型的数据。所以在使用msp的IO口时要注意对需要位的操作,而不要影响其他无关的位,可以用|&^等按位操作的符号。在使用IO都控制其他外围模块时也要注意要使用的IO口的定义,可以用如下的定义方法:#defineCLR_RSP2OUT&=~BIT0;//RS=P2.0#defineSET_RSP2OUT|=BIT0;#defineCLR_RWP2OUT&=~BIT1;//RW=P2.1#defineSET_RWP2OUT|=BIT1;#defineCLR_ENP2OUT&=~BIT2;//EN=P2.2#defineSET_ENP2OUT|=BIT2;#defineDataPortP1OUT8,g2553的P27和P26脚分别接外部晶体的输出和输入脚XOUT和XIN,默认是自动设为了晶振管脚功能,但是当想把它们用为普通的IO时,也可以,设置对应的SEL设为普通的IO即可,如下:P2DIR|=BIT6+BIT7;//把P26和P27配置为普通IO并为输出脚默认为晶振的输入和输出引脚作为dac0832的P2SEL&=~(BIT6+BIT7);//cs和wr控制端P2SEL2&=~(BIT6+BIT7);(二),时钟系统1,msp430能做到超低功耗,合理的时钟模块是功不可没的。但是功能强大的时钟模块设置起来也相对复杂一些。2,msp430的时钟源有:(1),外接低频晶振LFXT1CLK:低频模式接手表晶体32768Hz,高频模式450KHz~8MHz;(2),外接高速晶振XT2CLK:8MHz;(3),内部数字控制振荡器DCO:是一个可控的RC振荡器,频率在0~16MHz;(4),超低功耗低频振荡器VLO:不可控,4~20KHz典型值为12KHz;3,时钟模块:430的时钟模块有MCLKSMCLKACLK:(1),主系统时钟MCLK:提供给MSP430的CPU时钟。可以来自LFXT1CLKXT2CLKDCOVLO可选,默认为DCO。(2),子系统时钟SMCLK:提供给高速外设。可以来自LFXT1CLKXT2CLKDCOVLO可选,默认为DCO。(3),辅助系统时钟ACLK:提供给低速外设。可来自LFXT1CLKVLO。4,内部的振荡器DCO和VLO提供的时钟频率不是很精确,随外部环境变化较大。DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。DCO可以用CCS提供的宏定义进行相对比较精确的设置,如下:DCOCTL=CALDCO_12MHZ;//DCO设为12MHz这种方法设DCO频率比较精确,实际测得为12.08MHz左右正弦波BCSCTL1=CALBC1_12MHZ;用这种方法可以设置1,8,12,16MHz宏定义如下:#ifndef__DisableCalDataSFR_8BIT(CALDCO_16MHZ);SFR_8BIT(CALBC1_16MHZ);SFR_8BIT(CALDCO_12MHZ);SFR_8BIT(CALBC1_12MHZ);SFR_8BIT(CALDCO_8MHZ);SFR_8BIT(CALBC1_8MHZ);SFR_8BIT(CALDCO_1MHZ);SFR_8BIT(CALBC1_1MHZ);#endif5,使用超低功耗低频振荡器VLO可以很大程度地降低系统功耗,下面的例子是设置ACLK为VLO,MCLK为VLO的8分频:#include//1延时//#defineCPU_F((double))//cpufrequency#defineCPU_F((double)1630)//cpufrequency1630//CPU的实际MCLK大约为13.05/8=1.63KHz#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/))#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))voidmain(void){volatileunsignedinti;//VolatiletopreventremovalWDTCTL=WDTPW+WDTHOLD;//StopwatchdogtimerBCSCTL3|=LFXT1S_2;//LFXT1=VLO低频时钟选择为VLOACLK选为VLOIFG1&=~OFIFG;//ClearOSCFaultflag清除振荡器错误中断标志__bis_SR_register(SCG1+SCG0);//StopDCOSCG1禁止SMCLKSCG0禁止DCOBCSCTL2|=SELM_3+DIVM_3;//MCLK=LFXT1/8//因为前面已经选择了LFXT1=VLO所以MCLK选为VLO8分频所以CPU的MCLK大约为1.5KHzP1DIR=0xFF;//AllP1.xoutputsP1OUT=0;//AllP1.xresetP2DIR=0xFF;//AllP2.xoutputsP2OUT=0;//AllP2.xresetP1SEL|=BIT0+BIT4;//P10P14options功能选择为外围模块//p10输出ACLK,来自VLO,p14输出SMCLK,因为禁止了SMCLK,所以P14脚无波形输出//VLO典型值为12KHz实际用示波器测得为:13.05KHz左右波动//所以CPU的实际MCLK大约为13.05/8=1.63KHzfor(;;){P1OUT^=BIT6;//P1.6闪烁delay_ms(1000);}}6,如上面的程序所示,其中的延迟函数用那种方法,使用系统的延迟周期函数__delay_cycles(intn);可以达到比较精确的延迟,如下://more_//1延时//#defineCPU_F((double))//cpufrequency#defineCPU_F((double))//cpufrequency#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/))#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))//2空函数#definenop()_NOP();7,系统上电后默认使用的是DCO时钟,DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。(三),定时器Timer_A1,MSP430g2553具有两个16位的定时器:Timer0_ATimer1_A。分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。可以产生定时中断,也可以产生PWM。2,产生PWM,例子如下:#includevoidTimer_A0_1_init()//TA0.1输出PWM{TACTL|=TASSEL_1+MC_1;//ACLK,增计数CCTL1=OUTMOD_7;//输出模式为复位/置位CCR0=328;//时钟频率为32768HZ,100HZ//CCR1=164;//时钟频率为32768HZ,占空比CCR1/CCR0=50%CCR1=109;//占空比CCR1/CCR0=1/3TA0.1由P1.2P1.6输出}voidTimer_A1_2_init()//TA1.2输出PWM{TA1CTL|=TASSEL_1+MC_1;//ACLK,增计数TA1CCTL2=OUTMOD_7;//输出模式为复位/置位,注意CCTL2要写为TA1CCTL2TA1CCR0=164;//时钟频率为32768HZ,波形32768/CCR0=199HZTA1CCR2=41;//占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2TA1.2由P2.4P2.5输出}voidTimer_A1_1_init()//TA1.1输出PWM{TA1CCTL1=OUTMOD_7;TA1CCR1=123;//占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1TA1.1由P2.1P2.2输出}voidIO_init(){P1SEL|=BIT2+BIT6;P1DIR|=BIT2+BIT6;//P1.2P1.6输出TA0.1OUT1P2SEL|=BIT4+BIT5;P2DIR|=BIT4+BIT5;//P2.4P2.5输出TA1.2OUT2P2SEL|=BIT1+BIT2;P2DIR|=BIT1+BIT2;//P2.1P2.2输出TA1.1OUT1}voidmain(void){WDTCTL=WDTPW+WDTHOLD;IO_init();Timer_A0_1_init();Timer_A1_2_init();Timer_A1_1_init();_BIS_SR(CPUOFF);//EnterLPM0进入低功耗模式0SMCLKON,ACLKON}3,Timer_A的捕获/比较寄存器TAR寄存器是Timer_A的16位的计数寄存器。TACCRx是Timer_A的捕获/比较寄存器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCRx中。当为比较模式时:TACCRx中装的是要与TAR寄存器相比较的值。4,捕获模式捕获外部输入的信号的上升沿或下降沿或上升沿下降沿都捕捉,当捕捉发生时,把TAR的值装载到TACCRx中,同时也可以进入中断,执行相应的操作。这样利用捕捉上升沿或下降沿就可以计算外部输入信号的周期,得出频率。利用捕捉上升沿和下降沿可以得出输入信号的高电平或低电平的持续时间。也可以算出占空比。下面是一个例子,是Timer_A捕获初始化的程序:voidtimer_init()//使用Timer1_A时要特别注意各个寄存器的写法,因为Timer0_A的寄存器都简写了,所以在写//Timer1_A的寄存器时,要特别注意与Timer0_A的不同{P1SEL|=BIT2;//选择P12作为捕捉的输入端子Timer0_A//TACCTL1|=CM_3+SCS+CAP+CCIE;//上下沿都触发捕捉,用于测脉宽,同步模式、时能中断CCI1ATACCTL1|=CM_1+SCS+CAP+CCIE;//上升沿触发捕捉,同步模式、时能中断CCI1ATACTL|=TASSEL1+MC_2;//选择SMCLK时钟作为计数时钟源,不分频增计数模式不行,必须连续计数模式P2SEL|=BIT1;//选择P21作为捕捉的输入端子Timer1_A//TA1CCTL1|=CM_3+SCS+CAP+CCIE;//上下沿都触发捕捉,用于测脉宽,同步模式、时能中断CCI1ATA1CCTL1|=CM_1+SCS+CAP+CCIE;//上升沿触发捕捉,同步模式、时能中断CCI1ATA1CTL|=TASSEL1+MC_2;//选择SMCLK时钟作为计数时钟源,不分频增计数模式不行,必须连续计数模式}相对应的中断函数如下:#pragmavector=TIMER0_A1_VECTOR//Timer0_ACC1的中断向量__interruptvoidTimer_A(void){//CCI0A使用的捕捉比较寄存器是TA0CCR0,TA0CCR0单独分配给一个//中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer0_ACC0产生的中断,不用经过类似//下面的方法判断中断源了。//Timer0_ACC1-4,TA0公用一个中断向量TIMER0_A1_VECTOR,所以进入了中断后还要用下面//的方法进行判断是哪一个中断源产生的中断switch(TAIV)//如果是Timer0_ACC1产生的中断{case2:{flag=1;LPM1_EXIT;//退出低功耗模式//_BIC_SR_IRQ(LPM1_bits);//_bic_SR_register_on_exit(LPM1_bits);}case4:case10:}}#pragmavector=TIMER1_A1_VECTOR//Timer1_ACC1的中断向量__interruptvoidTimer_A1(void){//P1OUT|=BIT0;//led调试用的//LPM1_EXIT;//退出低功耗模式因为使用的是CCI0A使用的捕捉比较寄存器是TA1CCR0,TA1CCR0单独分配给一个//中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer1_ACC0产生的中断,不用经过类似//下面注释掉的方法判断。//而Timer1_ACC1-4,TA1则公用一个中断向量TIMER1_A1_VECTOR,所以进入了中断后还要用下面//的方法进行判断是哪一个中断源产生的中断switch(TA1IV)//如果是Timer1_ACC1产生的中断{case2:{flag=2;LPM1_EXIT;//退出低功耗模式//_BIC_SR_IRQ(LPM1_bits);//_bic_SR_register_on_exit(LPM1_bits);}case4:case10:}}//如果要测量更低频率的信号的话,可以在中断中判断溢出中断发生的次数,这样就可以得到溢出的次数,从而可以测量更//低频率的信号5,Timer_A的计数模式计数模式有:增计数模式,连续计数模式和增减计数模式。具体的各个模式的详解,参见用户指南。6,定时器的定时中断在使用定时器的定时中断时,要注意定时器计数模式的选择。在使用中断时,要注意中断向量的使用和中断源的判断,下面就举一个例子,注释的也较详细:#includeunsignedintt=0;voidmain(void){WDTCTL=WDTPW+WDTHOLD;//StopWDTP1DIR|=0x01;//P1.0outputCCTL0=CCIE;//CCTLx是捕获/比较控制寄存器interruptenabledCCIE=0x0010时能定时器A中断CCR0=50000;//捕获/比较寄存器设置计数器CCR0的初值16位寄存器,最大值为65535//默认SMCLK使用的是DCO,默认的DCO大约为800KHz,而CCR0=50000,所以中断产生的频率大约为16HzTACTL=TASSEL_2+MC_2;//SMCLK,contmode连续计数模式从0计到0FFFFh//TACTL=TASSEL_2+MC_1;//SMCLK,upmode增计数模式从0计到CCR0_BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt进入低功耗模式0,允许中断}//TimerA0interruptserviceroutine#pragmavector=TIMER0_A0_VECTOR__interruptvoidTimer_A(void)//CCIFG中断被响应后,该标志位自动清零{//P1OUT^=0x01;//ToggleP1.0t++;if(t==5){P1OUT^=BIT0;//ToggleP1.0t=0;}CCR0+=50000;//AddOffsettoCCR0增加CCR0偏移//定时器总是从0开始往上计数,一直到计满再从0开始,在连续计数模式下,当定时器的值等于CCR0时,产生中断//在中断中对CCR0增加50000,这样的话定时器从当前值到下一时刻再次等于CCR0时的间隔为50000,恒定//这样产生中断的时间间隔就相等了//所以在连续计数模式下,要想使中断的时间间隔一定,就要有CCR0+=n;这句话//在中断中CCR0不需要从新赋值,区别于51}中断的使用注意情况:还是把举个例子吧:#includevoidmain(void){WDTCTL=WDTPW+WDTHOLD;//StopWDTP1DIR|=0x01;//P1.0outputTACTL=TASSEL_2+MC_2+TAIE;//SMCLK,contmode,interruptTAIE允许定时器溢出中断_BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interruptGIE允许中断}//Timer_A3InterruptVector(TA0IV)handler#pragmavector=TIMER0_A1_VECTOR__interruptvoidTimer_A(void){switch(TA0IV)//TAIV中断向量寄存器用于{case2://CCR1notused捕获/比较器1case4://CCR2notused捕获/比较器2case10:P1OUT^=0x01;//overflow定时器溢出}}7,注意:定时器Timer0_A的时钟可以选择为外接时钟输入TACLK(P10),这样当外接一个信号时,定时器Timer0_A就相当于一个计数器使用。这样就可以用Timer0_A接外接信号,Timer1_A接标准的时钟如32768Hz的晶振,就可以实现等精度测频了。其实Timer1_A的时钟也可以外接的,但是在g2553中没有这个外接管脚(P37),所以就只能选择正常的时钟了。Timer0_A的外接时钟输入TACLK(P10)的设置如下:下面是我实现等精度测频时,两个定时器的初始化程序:voidtimer0_init(){TACTL|=TASSEL_0+MC_2+TACLR;//选择TACLK时钟作为计数时钟源,不分频必须连续计数模式P1SEL|=BIT0;//P10为Timer0_A的时钟TACLK输入,接外部待测信号,这样Timer0_A就当作计数器用}//Timer1_A采用ACLK作为时钟源计数,这样ACLK就相当于是标准信号,这样两个定时器相当于都工作在计数器方式,//ACLK32768Hz作为标准信号,这样可以实现等精度测频voidtimer1_init(){TA1CCTL0=CCIE;TA1CCR0=32768;//1s定时TA1CTL|=TASSEL_1+MC_2+TACLR;//选择ACLK时钟作为计数时钟源,不分频必须连续计数模式}8,用定时器和比较器可以实现DAC使用定时器也可以实现串口通信
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一}

我要回帖

更多关于 视频播放出现闪烁横线 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信