求一个产生时钟脉冲:用555定时器构成1秒脉冲方法产生一...

1 Pages: 1/2& & &Go
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
555定时器怎么做一个产生一秒钟脉冲的定时器,谁有电路图,给说一下,555定时器是只能产生脉冲吗,可以像定时器一样定时控制吗.
级别: 实习会员
发帖数量: 4 个
工控威望: 35 点
下载积分: 311 分
在线时间: 0(小时)
注册时间: 最后登录:
网上找个555时基电路,发脉冲的那种,可以用电位器调整的,然后用示波器测量脉冲时间,调整为0.5S的方波纹,好像不太准确的,因为和电压有关系,电压不稳定会造成不准确!
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
网上的电路频率太高,怎么样把频率降下来?
级别: 实习会员
发帖数量: 4 个
工控威望: 35 点
下载积分: 311 分
在线时间: 0(小时)
注册时间: 最后登录:
改变电阻和电容的值就可以的,不过你的有个仪器测才行啊!
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
图片: =600) window.open('/attachment/Mon_671_ce3.jpg');" onload="if(this.width>'600')this.width='600';if(this.height>'3000')this.height='3000';" >
后来在网上查到一张电路图,自己用虚拟电子实验室仿真了一下,能达到那种效果,后来自己又用555等电子元件焊了一下,也可以。[ 此帖被matengfei在 20:27重新编辑 ]
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
至于工作原理,网上很多,我自己也看不太懂,只要有电路图和接线图,按图能接出来达到自己想要的效果就行了。
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
但是,电路怎么样搭建才能实现定时效果呢,555可以和定时器一样用吗,还是只能产生定时脉冲?
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
图片: =600) window.open('/attachment/Mon_671_4b9e44.jpg');" onload="if(this.width>'600')this.width='600';if(this.height>'3000')this.height='3000';" >
加了一个可调电阻,来改变单个脉冲周期长度
工控新人,还请多多指教
级别: 家园常客
发帖数量: 837 个
工控威望: 968 点
下载积分: 8135 分
在线时间: 1194(小时)
注册时间: 最后登录:
我想知道这个虚拟电子实验室是用的哪个软件,虚拟示波器又时用的哪个软件
专心学工控技术,请各位帮忙指教
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
这个软件的名字就叫虚拟电子实验室,英文名中Multisim,网上一搜就出来了,汉化破解版的.示波器也是里面自带的.
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
图片: =600) window.open('/attachment/Mon_671_a3bbfc.jpg');" onload="if(this.width>'600')this.width='600';if(this.height>'3000')this.height='3000';" >
攻人之过勿太严,要思其堪受;教人以善勿过高,要令其可从。
级别: 家园常客
发帖数量: 759 个
工控威望: 945 点
下载积分: 2000 分
在线时间: 204(小时)
注册时间: 最后登录:
图片: =600) window.open('/attachment/Mon_671_ef2acc18f773d47.jpg');" onload="if(this.width>'600')this.width='600';if(this.height>'3000')this.height='3000';" >
把圆圈内的电路去掉,然后外接一个传感器,当传感器输出高电平时,驱动三极管,三极管作为一个开关把GND和可调电阻的下侧接通,继电器吸合,传感器输出高电平→低电平,三极管截止.继电器延时一段时间复位.
1 Pages: 1/2& & &Go单片机课后习题解答17-第4页
上亿文档资料,等你来发现
单片机课后习题解答17-4
;求平方子程序如下(采用查平方表的方法);SQR:INCA;MOVCA,@A+PC;RET;TABLE:DB0,1,4,9,16;DB25,36,49,64,81;END;22、如何实现将内存单元40H~60H的数逐个对;答:MOVR0,#40H;MOVDPTR,#2540H;MOVR2,#21H;L1:MOVA,@R0;MOVX@DPTR,A;INCR0;
;求平方子程序如下(采用查平方表的方法)SQR: INC
AMOVC A, @A+PCRETTABLE: DB
0, 1, 4, 9, 16DB
25,36,49,64,81END22、如何实现将内存单元40H~60H的数逐个对应传到片外2540H~2560H单元中?答: MOV
R0,#40HMOV
DPTR,#2540HMOV
R2,#21HL1:
A,@R0MOVX @DPTR,AINC
DPTRDJNZ R2,L1SJMP $23、参考21题24、参考21题25、参考实验程序26、参考实验程序 第五章
定时/计数器1、89S51单片机内部有几个定时/计数器,他们有哪些专用寄存器组成?答:89S51单片机内部有两个16位定时/计数器,为定时器0(T0)和定时器1(T1)。在定时器/计数器的16位的计数器是由两个8位的专用寄存器TH0、TL0,TH1、TL1组成。2、89S51单片机的定时/计数器有哪几种工作方式,各有什么特点?答:定时器/计数器有四种工作方式:方式0,方式1,方式2,方式3。其中,方式3只适用于T0。以T0为例:①方式0,16位寄存器只用了13位,TL0的高三位未用。由TH0的8位和TL0的低5位组成一个13位计数器;②方式1,和方式0的工作相同,唯一的差别是TH0和TL0组成一个16位计数器;③方式2,把TL0配置成一个可以自动恢复初值的8位计数器,TH0作为常数缓冲器。TH0由软件预置值。当TL0产生溢出时,一方面使溢出标志TF0置1,同时把TH0中的8位数据重新装入TL0中;④方式3,将使TL0和TH0成为两个相互独立的8位计数器,TL0利用T0本身的一些控制,它的操作与方式0和方式1类似。而TH0被规定为只用作定时器功能,对机器周期计数,并借用了T1的控制位TR1和TF1。在这种情况下TH0控制了T1的中断。这时T1还可以设置为方式0~2,用于任何不需要中断控制的场合,或者用作串行口的波特率发生器。3、定时/计数器用作定时方式时,其定时时间与哪些因素有关?作为计数时,对外界计数频率有何限制?答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。定时时间与时钟频率和定时初值有关。定时/计数器作计数时,由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。4、当定时器T0用作方式3时,由于TR1位已被T0占用,如何控制定时器T1的开启和关闭? 答:定时器T0用作方式3时,由于TR1位已被T0占用,此时通过控制位C/T切换其定时或计数器工作方式。当设置好工作方式时,定时器T1自动开始运行,若要停止,只需送入一个置定时器T1为方式3的方式字。5、已知89S51单片机系统时钟频率为24MHz,请利用定时器T0和P1.2输出矩形脉冲。矩形波高电平宽度50μs,低电平宽度350μs。答: ORG
TMOD,#02H
;设置工作方式MOV
TH0,#09CH
;设置定时器初值MOV
TL0,#09CHSETB
;启动定时器LOOP: SETB P1.2
;P1.0输出高电平MOV R0,#07HDEL: JBC
;定时是否到?AJMP
DELREP: SETB P1.2
;P1.0输出低电平DJNZ R0,DELAJMP
LOOPEND6、在89S51单片机中,已知时钟频率为12MHz,请编程使P1.0和P1.1分别输出周期为2ms和500μs的方波。答:选择方式2,用定时器T1MOV
TMOD,#20HMOV
TH1,#06HMOV
TL1,#06HSETB TR1L1:
R2,#04HL2:
P1.1DJNZ R2,L2CPL
P1.0LJMP L17、设系统时钟为24MHz,试用定时器T0做外部计数器,编程实现每计到1000个脉冲,是T1开始2ms定时,定时时间到后,T0又开始计数,循环往复。答: MOV
TMOD,#15H
;T1定时方式1,T0计数方式1L1:
TH0,#0FCHMOV
TL0,#18HSETB TR0JNB
H 8、略9、略 MOV
LJMP TL1,#
H TR1 TF1,$ TR1 TF1 L1第六章
80C51的串行接口1、什么是串行异步通信?他有哪些特点?有哪几种帧格式?答:串行通信即所传输数据的各位按顺序一位一位的发送或接收。串行通信分为同步和异步两种方式。在异步通信中数据或字符是一帧一帧地传送的。帧定义为一个字符的完整的通信格式,通常也称为帧格式。它的主要特点:由于异步通信每传送一帧有固定的格式,通信双方只需按约定的帧格式来发送和接收数据,所以硬件结构比同步通信方式简单;此外它还能利用校验位检测错误。帧格式的一般形式是先用一个起始位“0”表示字符的开始,然后是数据位,其后是奇偶校验位,最后是停止位,用以表示字符结束。2、某异步通信接口按方式3传送,已知其每分钟传送3600个字符,计算其传送波特率。答:设每个字符由1个起始位、8个数据位、1个可编程位和1个结束位组成,其传送波特率为:
11b×0bps3、80C51单片机的串行口由哪些基本功能部件组成?答: 80C51单片机的串行口基本功能部件主要有:两个数据缓冲寄存器SBUF,一个串行口控制寄存器SCON,一个输入移位寄存器。4、80C51单片机的串行口有几种工作方式?几种帧格式?如何设置不同方式的波特率? 答:80C51单片机的串行口有四种工作方式,由串行口控制寄存器中的SM0、SM1控制。80C51单片机的串行通信有8位、10位、11位三种帧格式。波特率设置:4种工作方式波特率的计算方法不同,其中方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,均由定时器T1的溢出率控制。具体计算如下:方式0:波特率固定为时钟频率的1/12,不受SMOD的影响。(SMOD为波特率倍增位)SMOD方式1的波特率=2/32×定时器T1的溢出率SMOD方式2的波特率=2/64×foscSMOD方式3的波特率=2/32×定时器T1的溢出率5、为什么定时器T1用作串行口波特率发生器时,常采用工作方式2?答:在串行通信中,收发双方对发送或接收的数据速率(即波特率)要有一定的约定。串口有四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,有定时器T1的溢出率控制。定时器T1用作串行口波特率发生器时,因为工作方式2是自动重装载方式,因而定时器T1作波特率发生器常采用工作方式2.6、已知定时器T1设置成方式2,用作波特率发生器,系统时钟频率为24MHz,求可能产生的最高和最低的波特率是多少?答:最高波特率:TH1=0FFH,TL1=0FFH波特率最高=2/32×24M/(12×(256-255))bps=0.125Mbps最低波特率:TH1=00H,TL1=00H波特率最低=1/32×24M/(12×(256-0))bps=244bps 7、略(参见教材相关例题)8、利用AT89S51串行口控制8个发光二极管工作,要求发光二极管每隔1S交替的亮灭,画出电路并编写程序。答:电路如下图所示实验程序如下:CLR
;清输出SETB P1.0
;允许串行移位MOV
SCON,#00HMOV
;显示初值AGAIN: MOV
SBUF,AJNB
TILCALL DLY_1SRR
ALJMP AGAINDLY_1S: MOV
R1,#20L3:
R2,#200L2:
R3,#250L1:
DJNZ R3,L1DJNZ R2,L2DJNZ R1,L3RET9、串行口异步通信时,ASCII码“3”的字符格式(10位)如何?答:串行口异步通信时,10位的数据帧结构为:一个起始位(0),8个数据位(先低位后高位),一个停止位(1)。故ASCII码“3” 的字符格式为:B。10、若选用定时器T1作波特率发生器,设fosc=6MHz,计数初值为0FDH,SMOD=1,求波特率是多少?答:若选用定时器 T1作波特率发生器,波特率由下式确定:波特率=(定时器T1溢出率)/n公式中:①n为32或16,取决于特殊功能寄存器PCON中的SMOD位的状态。若SMOD=0,则n=32。若SMOD=1,则n=16。②定时器T1溢出率=定时器T1的溢出次数/秒。由题可知:fosc=6MHz,计数初值为0FDH,SMOD=1,故6MHz?10.42kHz 16?12?256?0FDH第七章
中断系统1、什么是中断?在单片机中中断能实现哪些功能?答:中断是通过硬件来改变CPU程序运行方向。计算机在执行程序过程中,由于CPU以外的原因,有必要尽快终止当前程序的执行,而去执行相应的处理程序,待处理结束后,在回来继续执行被终止的原程序。这种程序在执行过程中由于外界的原因而被中间打断的情况成为“中断”。中断能实现的功能:(1)能实现中断及返回。(2)能实现优先权的排队。(3)能实现中断的嵌套。2、什么是中断优先级?中断优先级处理的原则是什么?答:通常,在系统中会有多个中断源,有时会出现两个或更多个中断源同时提出中断请求的情况,这就要求计算机能区分各个中断源的请求,有能确定首先为哪一个中断源服务。为了解决这一问题,通常给各中断源规定了优先级别,称为优先权或中断优先级。中断优先级处理原则:两个或两个以上的中断源同时提出中断申请时,计算机首先为中断优先权最高的中断服务,服务结束以后,再响应级别较低的中断源。3、80C51有几个中断源,各中断标志如何产生的,又如何清“0”的?CPU响应中断时,中断入口地址各是多少?答:8051单片机有5个中断源,分别是:外部中断0、定时器T0中断、外部中断1、定时器T1中断、串行口中断。中断标志产生与清“0”:(1)外部中断:外部中断由外部原因引起,可以通过两个固定的引脚(INT0和INT1)输入信号。一旦输入信号有效,则向CPU申请中断并使IE0(或IE1)=1。硬件复位。(2)定时器中断:定时器中断是为了满足定时或计数溢出处理的需要而设置的。当定时/计数器的计数结构发生计数溢出时,即表明定时时间到或计数次数到,此时就以计数器溢出信号作为中断请求,去置一个溢出标志位(TF0或TF1=1)。使用中断时通过硬件复位,在查询方式下可由软件复位。(3)串口中断:串行中断请求是在单片机内部产生的。当发送完数据或接收完数据后,就会置相应标志位(TI或RI=1)。一旦响应中断,必须由软件进行复位。中断入口地址:外部中断0、定时器T0中断、外部中断1、定时器T1中断、串行口中断的入口地址依次为:0003H,000BH,0013H,001BH,0023H。4、中断响应时间是否确定不变的?为什么?答:中断响应时间不是确定不变的。由于CPU不是在任何情况下都可以中断请求予以响应,不同情况对中断响应的时间也是不一样的。中断信号会在每个机器周期的S5P2时刻对相应中断标志位进行置位,若CPU在下一个机器周期才能查询到中断请求,如果满足中断响应的条件,下一条指令将是一硬件长调用指令,使程序转入中断矢量入口,调用本身需要2个机器周期,因此响应中断至少需要3个机器周期。如遇正在执行的指令,或有同级、更高级的中断服务正在进行,则需更长时间。若系统中只有一个中断源,则响应时间为3~8个机器周期。5、用定时器T1定时,要求在P1.6口输出一个方波,周期为1min,晶振为12MHz,请用中断方式实现,并分析采用中断后的优点。答:使用定时器T1,工作在方式1,定时50msORG
0000HLJMP MAIN包含各类专业文献、文学作品欣赏、外语学习资料、中学教育、应用写作文书、单片机课后习题解答17等内容。 
 单片机课后习题答案_工学_高等教育_教育专区。单片机课后习题答案习习题 0 题 答 案 1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM ...  单片机课后习题解答 26页 免费 单片机期末考试试题 7页 1下载券单...第1 章 习题答案 1.什么是单片机? 答:将中央处理器(Central Processing Unit,...  答:在一片集成电路芯片上集成微处理器、存储器、I/O 接口电路,从而构成了单芯片微型计算 机,即单片机。单片机主要特点有:控制性能和可靠性高;体积小、价格低、...  单片机课后习题答案_理学_高等教育_教育专区。第1章 单片机概述 1.除了单片机这一名称之外,单片机还可称为 和。答:微控制器,嵌入式控制器。 2.单片机与普通微型...  单片机课后习题答案_工学_高等教育_教育专区。习习题 0 题答 案 1.单片机是把组成微型计算机的各功能部件即(微处理器(CPU))、(存储器(ROM 微处理器( 存储器(...  单片机课后练习题及答案_数学_小学教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 单片机课后练习题及答案_数学_小学教育_教育专区。...  单片机课后习题答案_理学_高等教育_教育专区。作业习题答案 《单片机应用技术》部分习题与参考答案第 1 章 单片机概述 1-1 什么是嵌入式系统?嵌入式系统的硬件和软...  单片机课后习题与答案_理学_高等教育_教育专区。一些关于单片机的简单基础习题部分...单片机课后习题答案 43页 免费 单片机课后习题解答 26页 免费 单片机原理及应用期末...  单片机原理及应用第二版课后习题答案_工学_高等教育_教育专区。第 1 章 单片机概述参考答案 1.1 答:微控制器,嵌入式控制器 1.2 答:CPU、存储器、I/O 口、...STM32 定时器产生PWM彻底应用 - TopMars的日志 -
电子工程世界-论坛 -
STM32 定时器产生PWM彻底应用
热度 1已有 13396 次阅读 13:31
STM32STM32PWM
STM32STM32
STM32PWMPWM
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//TIM2
&&&&&& TIM_InternalClockConfig(TIM2);//
&&&&&& TIM_BaseInitStructure.TIM_Prescaler=3; //TIM
& &&& TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//
& &&& TIM_BaseInitStructure.TIM_Period=1799;//
& &&& TIM_BaseInitStructure.TIM_ClockDivision=0;//
&&&&&& TIM_TimeBaseInit(TIM2,&TIM_BaseInitStructure);
&&&&&& //1
&&&&&& TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//
& &&& TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_E//
& &&& TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_D//
& &&& TIM_OCInitStructure.TIM_Pulse=CCR1_V//
&&&&& TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_H//
&&&&& TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_L//
& &&& TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_S//
& &&& TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_R//
&&&&&& TIM_OC1Init(TIM2,&TIM_OCInitStructure);
&&&&&& TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
&&&&&& //2&&
& &&& TIM_OCInitStructure.TIM_Pulse=CCR2_V//
&&&&&& TIM_OC2Init(TIM2,&TIM_OCInitStructure);
&&&&&& TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
&&&&&& //3
&&&&&& TIM_OCInitStructure.TIM_Pulse=CCR3_V//
&&&&&& TIM_OC3Init(TIM2,&TIM_OCInitStructure);
&&&&&& TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);
&&&&&& //4
&&&&&& TIM_OCInitStructure.TIM_Pulse=CCR4_V//
&&&&&& TIM_OC4Init(TIM2,&TIM_OCInitStructure);
&&&&&& TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);
&&&&&& TIM_Cmd(TIM2, ENABLE);
&&&&&& TIM_CtrlPWMOutputs(TIM2,ENABLE);
&&&&&& TIM_BaseInitStructure.TIM_Prescaler=3; //TIM(18M)
& &&& TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//
& &&& TIM_BaseInitStructure.TIM_Period=1800;//
& &&& TIM_BaseInitStructure.TIM_ClockDivision=0;//
&&&&&& TIM_TimeBaseInit(TIM2,&TIM_BaseInitStructure);
&&&&&& //1
&&&&&& TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_T//
& &&& TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_E//
& &&& TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_D//
& &&& TIM_OCInitStructure.TIM_Pulse=CCR1_Val1;//
&&&&& TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_H//
& &&& TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_L//
& &&& TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_S//
& &&& TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_R//
&&&&&& TIM_OC1Init(TIM2,&TIM_OCInitStructure);
&&&&&& TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
&&&&&& TIM_ARRPreloadConfig(TIM2,ENABLE);
&&&&&& TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
&&&&&& TIM_Cmd(TIM2,ENABLE);
&&&&&&&&&&&&&
void TIM2_IRQHandler(void)
&&&&&& TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);
&&&&&& if(n==1)
&&&&&&&&&&&&& n=0;
&&&&&&&&&&&&& TIM_SetCompare1(TIM2,CCR1_Val2);
&&&&&& else
&&&&&&&&&&&&& n=1;
&&&&&& & &&& TIM_SetCompare1(TIM2,CCR1_Val1);
&&&&&& }&&&&&&&&&&& &&&&&&&&&&& &&&&&&&&&&&&
CCR1PWMCCR110K40%PWM
CCRCCR65535PWMPWMCNTPWMCCR65535
unsigned char& Cnt[4]; //PWM
unsigned int& T[4];//
unsigned int& R[4];//
unsigned int& Rh[4];PWM
unsigned int& Rl[4]; //PWM
unsigned char F[4];//
unsigned int CCR1,CCR2,CCR3,CCR4;
void Init(void)
&&&&&& unsigned char i = 0;&&&&&&
&&&&&& for(i = 0; i & 4; i++)
&&&&&&&&&&&&& Cnt[i]= 0;
&&&&&&&&&&&&& T[i]& = 0;
&&&&&&&&&&&&& R[i]& = 0;
&&&&&&&&&&&&& Rh[i] = 0;
&&&&&&&&&&&&& Rl[i] = 0;
&&&&&&&&&&&&& F[i]& = 0;
&&&&&& }&&&&
&&&&&& //t0~65536&&&&
&&&&&& T[0] = 450;&&&& && //F=40K
&&&&&& T[1] = 600;&&&& && //F=30K
&&&&&& T[2] = 900;&&&& && //F=20K
&&&&&& T[3] = 1800;&& //F=10K
&&&&&& //F()0~100
&&&&&& F[0] = 40;
&&&&&& F[1] = 30;
&&&&&& F[2] = 20;
&&&&&& F[3] = 10;&&&&&
&&&&&& for(i = 0; i & 4; i++)
&&&&&&&&&&&&& Rh[i] = (T[i] * F[i]) / 100;
&&&&&&&&&&&&& Rl[i] = T[i] - Rh[i];
&&&&&& }&&&&
&&&&&& R[0] = Rl[0];
&&&&&& R[1] = Rl[1];
&&&&&& R[2] = Rl[2];
&&&&&& R[3] = Rl[3];
&&&&&& CCR1 = R[0];
&&&&&& CCR2 = R[1];
&&&&&& CCR3 = R[2];
&&&&&& CCR4 = R[3];
void RCC_Configuration(void)
&&&&&& RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
&&&&&& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
&&&&&& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD,ENABLE);
&&&&&& RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
void GPIO_Configuration(void)
&&&&&& GPIO_InitTypeDef GPIO_InitS
&& //Key1 PA0 Key3 PA8
&&&&&& GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_8;
& &&& GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& &&& GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
&&&&&& GPIO_Init(GPIOA,&GPIO_InitStructure);
&&&&&& //Key2 PC13
&&&&&& GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
& &&& GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& &&& GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
&&&&&& GPIO_Init(GPIOC,&GPIO_InitStructure);
&&&&&& //Key PD3
&&&&&& GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
& &&& GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& &&& GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
&&&&&& GPIO_Init(GPIOD,&GPIO_InitStructure);
&&&&&& //TIM3 CH1 CH2
&&&&&& GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
& &&& GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& &&& GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
&&&&&& GPIO_Init(GPIOA,&GPIO_InitStructure);
&&&&&& //TIM3 CH3 CH4
&&&&&& GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;
& &&& GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& &&& GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
&&&&&& GPIO_Init(GPIOB,&GPIO_InitStructure);
void NVIC_Configuration(void)
&&&&&& NVIC_InitTypeDef NVIC_InitS
&&&&&& #ifdef VECT_TAB_RAM
&&&&&& NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
&&&&&& #else
&&&&&& NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
&&&&&& #endif
&&&&&& NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
&&&&&& NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQC
& &&& NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
& &&& NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
& &&& NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
&&&&&& NVIC_Init(&NVIC_InitStructure);&&&&&
void TIM_Configuration(void)
&&&&&& TIM_TimeBaseInitTypeDef TIM_BaseInitS
&&&&&& TIM_OCInitTypeDef TIM_OCInitS
&&&&&& TIM_InternalClockConfig(TIM3);
&&&&&& TIM_BaseInitStructure.TIM_Prescaler=3;//418M
& &&& TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
& &&& TIM_BaseInitStructure.TIM_Period=65535;
& &&& TIM_BaseInitStructure.TIM_ClockDivision=0;
& &&& TIM_BaseInitStructure.TIM_RepetitionCounter=0;
&&&&&& TIM_TimeBaseInit(TIM3,&TIM_BaseInitStructure);
&&&&&& TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_T
& &&& TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_E
& &&& TIM_OCInitStructure.TIM_Pulse=CCR1;
& &&& TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_L
&&&&&& TIM_OC1Init(TIM3,&TIM_OCInitStructure);
&&&&&& TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Disable);
&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);
&&&&&& TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_T
&&&&&& TIM_OCInitStructure.TIM_Pulse=CCR2;
&&&&&& TIM_OC2Init(TIM3,&TIM_OCInitStructure);
&&&&&& TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Disable);
&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);
&& & TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_T
&&&&&& TIM_OCInitStructure.TIM_Pulse=CCR3;
&&&&&& TIM_OC3Init(TIM3,&TIM_OCInitStructure);
&&&&&& TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Disable);
&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC3);
&&&&&& TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_T
&&&&&& TIM_OCInitStructure.TIM_Pulse=CCR4;
&&&&&& TIM_OC4Init(TIM3,&TIM_OCInitStructure);
&&&&&& TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Disable);
&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC4);
&&&&&& TIM_Cmd(TIM3,ENABLE);
&&&&&& TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
&&&&&& TIM_ITConfig(TIM3,TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC3|TIM_IT_CC4,ENABLE);
void TIM3_IRQHandler(void)
&&&&&& if(TIM_GetITStatus(TIM3,TIM_IT_CC1)!=RESET)
&&&&&&&&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC1);
&&&&&&&&&&&&& Cnt[0]=(~Cnt[0])&0x01;
&&&&&&&&&&&&& if(Cnt[0]==0x01)&&
&&&&&&&&&&&&&&&&&&&& R[0]+=Rl[0];
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& R[0] += Rh[0];
&&&&&&&&&&&&& if(R[0]&65535)
&&&&&&&&&&&&&&&&&&&& R[0]=R[0]-65535;
&&&&&&&&&&&&& CCR1=R[0];
&&&&&&&&&&&&& TIM_SetCompare1(TIM3,CCR1);
&&&&&& if(TIM_GetITStatus(TIM3,TIM_IT_CC2)!=RESET)
&&&&&&&&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC2);
&&&&&&&&&&&&& Cnt[1]=(~Cnt[1])&0x01;
&&&&&&&&&&&&& if(Cnt[1]==0x01)&&
&&&&&&&&&&&&&&&&&&&& R[1]+=Rl[1];
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& R[1] += Rh[1];
&&&&&&&&&&&&& if(R[1]&65535)
&&&&&&&&&&&&&&&&&&&& R[1]=R[1]-65535;
&&&&&&&&&&&&& CCR2=R[1];
&&&&&&&&&&&&& TIM_SetCompare2(TIM3,CCR2);
&&&&&& }&&&&
&&&&&& if(TIM_GetITStatus(TIM3,TIM_IT_CC3)!=RESET)
&&&&&&&&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC3);
&&&&&&&&&&&&& Cnt[2]=(~Cnt[2])&0x01;
&&&&&&&&&&&&& if(Cnt[2]==0x01)&&
&&&&&&&&&&&&&&&&&&&& R[2]+=Rl[2];
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& R[2] += Rh[2];
&&&&&&&&&&&&& if(R[2]&65535)
&&&&&&&&&&&&&&&&&&&& R[2]=R[2]-65535;
&&&&&&&&&&&&& CCR3=R[2];
&&&&&&&&&&&&& TIM_SetCompare3(TIM3,CCR3);
&&&&&& }&&&&
&&&&&& if(TIM_GetITStatus(TIM3,TIM_IT_CC4)!=RESET)
&&&&&&&&&&&&& TIM_ClearITPendingBit(TIM3,TIM_IT_CC4);
&&&&&&&&&&&&& Cnt[3] = (~Cnt[3])&0x01;
&&&&&&&&&&&&&
&&&&&&&&&&&&& if(Cnt[3]==0x01)&&
&&&&&&&&&&&&&&&&&&&& R[3]+=Rl[3];
&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&& R[3] += Rh[3];
&&&&&&&&&&&&& if(R[3]&65535)
&&&&&&&&&&&&&&&&&&&& R[3]=R[3]-65535;
&&&&&&&&&&&&& CCR4=R[3];
&&&&&&&&&&&&& TIM_SetCompare4(TIM3,CCR4);&&&&&&&&&&&&&&&&&&&&&
作者的其他最新日志
评论 ( 个评论)
Powered by}

我要回帖

更多关于 msp430定时器捕获脉冲 的文章

更多推荐

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

点击添加站长微信