同时用两个定时器控制蜂鸣器发声

合集下载

两个定时器蜂鸣器-一个控制频率-另一个控制时间教学提纲

两个定时器蜂鸣器-一个控制频率-另一个控制时间教学提纲
ET1=1;
TR1=1;
TR0=1;//启动定时器0
while(1)
//等待中断产生
{
if(tt=a)
{
tt=0;
Waveout=~Waveout;
}
}
}
void timer0() interrupt 1 //定时器0中断
{
TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失
{
fre=50000;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断TH0=(65536-fre) Nhomakorabea256;
TL0=(65536-fre)%256;
tt++;
}
void timer1() interrupt 3 //定时器1中断用来产生300微秒时间定时
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==6)
{
flag=0;
freq=Freq[i];
}
}
两个定时器蜂鸣器-一个控制频率-另一个控制时间
//同时利用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同一个频率持续的时间,间隔300ms依次输出1、10、
//50、100、200、400、800HZ的方波

stm32f103通用定时器pwm应用例程--蜂鸣器演奏乐曲

stm32f103通用定时器pwm应用例程--蜂鸣器演奏乐曲

stm32f103通用定时器pwm应用例程--蜂鸣器演奏乐曲STM32F103通用定时器PWM应用例程:蜂鸣器演奏乐曲一(说明:本例程是将流明LM3SLib_Timer.pdf文档中的例程9及例程10(PWM应用:蜂鸣器演奏乐曲),移植到STM32F103上。

二(流明LM3SLib_Timer.pdf例程9及例程10的拷贝:例程9( Timer PWM应用:蜂鸣器发声如图1.1所示,为EasyARM1138开发板上的蜂鸣器驱动电路。

蜂鸣器类型是交流蜂鸣器,也称无源蜂鸣器,需要输入一列方波才能鸣响,发声频率等于驱动方波的频率。

图1.1 蜂鸣器驱动电路程序清单1.9是Timer模块16位PWM模式的一个应用,可以驱动交流蜂鸣器发声,运行后蜂鸣器以不同的频率叫两声。

其中"buzzer.h"和"buzzer.c"是蜂鸣器的驱动程序,仅有3个驱动函数,用起来很简捷。

程序清单1.9 Timer PWM应用:蜂鸣器发声文件:main.c#include "systemInit.h"#include "buzzer.h"// 主函数(程序入口)int main(void) {jtagWait(); // 防止JTAG失效,重要~clockInit(); // 时钟初始化:晶振,6MHzbuzzerInit(); // 蜂鸣器初始化buzzerSound(1500); // 蜂鸣器发出1500Hz声音SysCtlDelay(400* (TheSysClock / 3000)); // 延时约400ms buzzerSound(2000); // 蜂鸣器发出2000Hz声音SysCtlDelay(800* (TheSysClock / 3000)); // 延时约800ms buzzerQuiet( ); // 蜂鸣器静音for (;;) {}}文件:buzzer.h#ifndef __BUZZER_H__#define __BUZZER_H__// 蜂鸣器初始化extern void buzzerInit(void);// 蜂鸣器发出指定频率的声音extern void buzzerSound(unsigned short usFreq); // 蜂鸣器停止发声extern void buzzerQuiet(void);1#endif // __BUZZER_H__文件:buzzer.c#include "buzzer.h"#include <hw_types.h>#include <hw_memmap.h> #include <sysctl.h>#include <gpio.h>#include <timer.h>#define PART_LM3S1138#include <pin_map.h> #define SysCtlPeriEnable SysCtlPeripheralEnable #define GPIOPinTypeOut GPIOPinTypeGPIOOutput// 声明全局的系统时钟变量extern unsigned long TheSysClock;// 蜂鸣器初始化void buzzerInit(void){SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1); // 使能TIMER1模块SysCtlPeriEnable(CCP3_PERIPH); // 使能CCP3所在的GPIO端口GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR | // 配置TimerB为16位PWM TIMER_CFG_B_PWM); }// 蜂鸣器发出指定频率的声音// usFreq是发声频率,取值 (系统时钟/65536)+1 , 20000,单位:Hz void buzzerSound(unsigned short usFreq) {unsigned long ulVal;if ((usFreq <= TheSysClock / 65536UL) || (usFreq > 20000)) {buzzerQuiet( );}else {GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN); // 设置相关管脚为Timer功能ulVal = TheSysClock / usFreq;TimerLoadSet(TIMER1_BASE, TIMER_B, ulVal); // 设置TimerB初值TimerMatchSet(TIMER1_BASE, TIMER_B, ulVal / 2); // 设置TimerB匹配值TimerEnable(TIMER1_BASE, TIMER_B); // 使能TimerB计数 }}// 蜂鸣器停止发声void buzzerQuiet(void){TimerDisable(TIMER1_BASE, TIMER_B); // 禁止TimerB计数GPIOPinTypeOut(CCP3_PORT, CCP3_PIN); // 配置CCP3管脚为GPIO输出GPIOPinWrite(CCP3_PORT, CCP3_PIN, 0x00); // 使CCP3管脚输出低电平 } 例程10(Timer PWM应用:蜂鸣器演奏乐曲程序清单1.10是Timer模块16位PWM模式的一个应用,能驱动交流蜂鸣器演奏一首动听的乐曲《化蝶》(乐谱参见图1.2)。

C语言51单片机时钟程序

C语言51单片机时钟程序
/*延时?函数*/ void delay(uint k) { uint i,j; for(i=0;i<k;i++){ for(j=0;j<121;j++) {;}}
} /*----------------------- 主函数 ------------------------- */
/*主函数*/
void main()
{
init_timer();
/*定时器 T0 初始化*/
while(1) /*无限循环*/
{
if(P2_4==0)scan_key(); /*有按键,调用按键扫描?函数*/
switch(set)
/*根据 set 键值散转*/
{
case 0:time(); break; /*走时时间程序*/
程序三
同时用两个定时器控制蜂鸣器发声, 定时器 0 控制频率,定时器 1 控制同个 频率持续的时间,间隔 2s 依次输出 1,10,50,100,200,400,800, 1k(hz)的方波
#include<reg52.h> //52 单片机头文件 #include <intrins.h> //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit beep=P2^3;
ET0=1;//开定时器 0 中断
TR0=1;//启动定时器 0
a=0xfe;
while(1);//等待中断产生
}
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==2) {

stm32蜂鸣器起风了源码

stm32蜂鸣器起风了源码

stm32蜂鸣器起风了源码STM32是一款广泛应用于嵌入式系统的微控制器,其强大的功能和灵活性使得它成为了众多电子设备的首选芯片。

其中,蜂鸣器是STM32中常用的一个外设,可以通过它来产生不同音调的声音。

本文将介绍如何使用STM32的蜂鸣器来模拟起风的声音。

需要明确的是,STM32的蜂鸣器是通过PWM(脉冲宽度调制)技术来实现的。

PWM是一种通过改变信号的脉冲宽度来控制信号的技术,它可以用来产生不同频率的声音。

在STM32中,可以通过配置定时器和通道来实现对蜂鸣器的控制。

我们需要初始化定时器和通道。

定时器用来产生固定频率的时钟信号,通道则用来控制脉冲的宽度。

在初始化定时器和通道之后,我们可以开始配置蜂鸣器的工作模式。

蜂鸣器有两种工作模式:连续模式和单次模式。

在连续模式下,蜂鸣器会不断地发出声音,直到停止。

而在单次模式下,蜂鸣器只会发出一次声音,然后停止。

对于起风的声音,我们可以选择连续模式。

可以通过改变占空比来调整声音的音调。

占空比是指高电平的时间与一个周期的比值。

当占空比为0%时,蜂鸣器不会发出声音;当占空比为50%时,蜂鸣器会发出最高音调的声音;当占空比为100%时,蜂鸣器会发出最低音调的声音。

在代码中,我们可以通过改变占空比的值来改变声音的音调。

具体的实现步骤如下:1. 配置定时器和通道,并设置定时器的工作模式为PWM模式。

2. 设置定时器的周期,即声音的频率。

频率越高,声音越尖锐。

3. 设置占空比,即声音的音调。

占空比越大,音调越低。

4. 启动定时器,开始发出声音。

使用STM32的蜂鸣器模拟起风的声音的源码如下:```c#include "stm32f4xx.h"void Buzzer_Init(){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_TIM2);TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock / 1000000 - 1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseStructure.TIM_Period = 1000 - 1;TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 500 - 1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM2, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE);TIM_Cmd(TIM2, ENABLE);}int main(void){Buzzer_Init();while (1){// Do something}}```在以上代码中,我们使用了TIM2定时器和PA5通道来控制蜂鸣器。

两个定时器蜂鸣器,一个控制频率,另一个控制时间

两个定时器蜂鸣器,一个控制频率,另一个控制时间
//同时利用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同一个频率持续的时间,间隔300ms依次输出1、10、
//50、100、200、400、800HZ的方波
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
{
flag=0;
freq=Freq[i];
}
}
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
tt++;
}
void timer1()interrupt 3 //定时器1中断用来产生300微秒时间定时
{
TH1=(6550000)%256;
flag++;
if(flag==6)
#define uint unsigned int //宏定义
#define uchar unsigned char
sbit Waveout=P1^0;
uchar tt;
uint fre,flag;
uint Freq[]={1,10,50,100,200,400,800,1000}
void main() //主函数
{
fre=50000;
TMOD=0x11;//设置定时器0,定时器1为工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;

stc单片机定时器应用范例

stc单片机定时器应用范例

stc单片机定时器应用范例
STC单片机定时器是单片机中非常重要的一个模块,它可以用于各种定时、计数和延时操作。

下面我将从多个角度为你介绍一些STC单片机定时器的应用范例。

1. 延时控制,STC单片机定时器可以用于控制延时操作,比如控制LED灯的闪烁频率。

通过设置定时器的计数值和工作模式,可以实现不同的延时效果。

2. 定时采集,在一些数据采集系统中,STC单片机定时器可以用于定时采集传感器数据,比如温度、湿度等,并将数据发送到其他设备或者进行处理。

3. 蜂鸣器控制,STC单片机定时器可以用于控制蜂鸣器的鸣叫时长和频率,实现声音信号的发声控制。

4. PWM输出,定时器可以用于产生PWM信号,可以用于控制电机的转速、LED的亮度调节等。

5. 定时中断,定时器可以用于产生定时中断,实现定时任务的
执行,比如定时检测按键状态、定时发送数据等。

6. 计时应用,STC单片机定时器可以用于计时应用,比如秒表、计时器等功能的实现。

总的来说,STC单片机定时器可以应用于各种需要时间控制和
定时操作的场景,通过合理的配置和应用,可以实现丰富的功能和
应用。

希望以上范例能够帮助你更好地理解STC单片机定时器的应用。

51单片机学习练习

51单片机学习练习1、对照TX-1C单片机学习板原理图写程序用位操作和总线操作两种方法完成以下题目1.熟练建立KEIL工程2.点亮第一个发光管.3.点亮最后一个发光管4.点亮1、3、5、75.点亮二、四、五、六6.尝试让第一个发光管闪烁7.尝试设计出流水灯程序2、第一个发光管以间隔200ms闪烁8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms,亮时蜂鸣器响,灭时关闭蜂鸣器,一直重复下去。

8个发光管来回流动,第个管亮100ms,流动时让蜂鸣器发出“滴滴”声。

用8个发光管演示出8位二进制数累加过程。

8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁5次。

重复此过程。

间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。

间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。

3、1、利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。

2、利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,使8个指示灯依次一个一个闪动,闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。

3、同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,1k(hz)的方波。

4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复。

4、1.利用动态扫描方法在六位数码管上显示出稳定的654321.2.用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即后两位显示1%秒,一直循环下去。

3.利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减直至765398并保持显示此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动,当数码管上数减到停止时,实验板上流水灯也停止然后全部开始闪烁,3秒后(用T0定时)流水灯全部关闭、数码管上显示出“HELLO”。

蜂鸣器的频率控制原理

蜂鸣器的频率控制原理小伙伴们!今天咱们来唠唠蜂鸣器这个小玩意儿的频率控制原理,可有趣啦!蜂鸣器呢,就像一个小小的音乐精灵,能发出各种各样的声音。

那它的频率是咋被控制的呢?这得从蜂鸣器的内部构造说起。

蜂鸣器有两种常见的类型,一种是有源蜂鸣器,一种是无源蜂鸣器。

有源蜂鸣器内部自带了振荡源,就像它自己有个小乐队指挥似的,一通电就按照固定的频率唱歌啦。

无源蜂鸣器呢,就比较依赖外部的信号来控制频率。

咱先说说无源蜂鸣器的频率控制。

想象一下无源蜂鸣器是个听话的小娃娃,它在等着外部的信号来告诉它该怎么发声。

这时候,就需要一个控制器,比如说一个小小的单片机。

这个单片机就像一个超级聪明的大脑,它可以产生不同频率的电信号。

当这个电信号传到蜂鸣器的时候,蜂鸣器就会根据这个信号的频率来振动发声。

如果信号的频率比较低,蜂鸣器发出的声音就会比较低沉,就像一个老爷爷在慢悠悠地哼着小曲儿;如果频率比较高呢,那声音就变得尖锐起来,像个调皮的小老鼠在吱吱叫。

那这个单片机是怎么产生不同频率的信号的呢?这就涉及到数字电路的魔法啦。

单片机里面有个小定时器,这个定时器就像一个超级精准的小闹钟。

它可以按照我们设定的时间间隔来产生脉冲信号。

比如说,我们设定这个定时器每0.001秒就产生一个脉冲,那这个脉冲信号的频率就是1000Hz。

这个频率的信号传到蜂鸣器,蜂鸣器就会按照这个频率来振动发声。

而且啊,我们可以通过改变定时器的设置,轻松地改变信号的频率,就像给蜂鸣器换不同的歌曲一样。

再来说说有源蜂鸣器。

虽然它内部自带了振荡源,但是有时候我们也想让它按照我们的想法来改变频率呢。

这时候就有点小麻烦啦,不过也不是没办法。

有些有源蜂鸣器有外部控制引脚,我们可以通过给这个引脚输入不同的电压或者信号来微调它的振荡频率。

就像给一个已经有了自己节奏的小乐队,稍微调整一下指挥的节奏一样。

不过这种调整的范围通常比较小,不像无源蜂鸣器那样可以有很大的频率变化范围。

在实际的应用中,蜂鸣器频率控制可有用啦。

51单片机蜂鸣器代码理解

51单片机蜂鸣器代码理解1.引言1.1 概述概述:蜂鸣器是一种广泛应用于电子设备中的声音输出装置,它通过控制某个频率的电信号使蜂鸣器发出特定的声音。

而51单片机,则是一种常见的单片机芯片,具有广泛的应用领域。

本文将主要探讨51单片机蜂鸣器的代码理解和应用。

通过对其基本原理的概述以及相关代码的解析,希望读者能够深入理解51单片机蜂鸣器的工作原理和实现方式。

在第二部分中,我们将介绍单片机蜂鸣器的基本原理。

包括如何通过单片机控制蜂鸣器的电信号频率和时长,从而实现不同的声音效果。

接着,在第二点中,我们将详细解析51单片机蜂鸣器的代码。

通过对代码的分析,读者可以了解到如何使用51单片机的引脚功能和定时器功能来控制蜂鸣器。

最后,在结论部分,我们将对所述内容进行总结,并展望51单片机蜂鸣器在未来的应用前景。

蜂鸣器作为一种重要的声音输出装置,具有广泛的应用前景,可以应用于报警系统、提醒装置等领域。

通过本文的阅读,读者将能够全面了解51单片机蜂鸣器的工作原理和代码实现方式,为相关领域的应用开发提供参考和指导。

让我们开始探索吧!1.2 文章结构文章结构的部分主要介绍了本文的组织和分类方式,以帮助读者更好地理解文章的内容和思路。

本文按照以下结构进行组织:1. 引言部分:介绍了文章的概述、结构和目的。

通过引言部分,读者可以初步了解到本文的内容和主题,并对文章的结构和目的有一个整体的认识。

2. 正文部分:主要分为两个小节,分别是"单片机蜂鸣器的基本原理"和"51单片机蜂鸣器代码解析"。

2.1 单片机蜂鸣器的基本原理:该部分将详细介绍单片机蜂鸣器的基本工作原理,包括蜂鸣器的构成和工作原理,以及单片机如何控制蜂鸣器发出指定的声音。

2.2 51单片机蜂鸣器代码解析:该部分将对51单片机蜂鸣器的代码进行解析,包括如何初始化引脚、设置定时器和中断等相关代码。

通过对代码的逐行解析和说明,读者可以更加深入地理解代码的功能和实现原理。

郭天祥十天学会单片机PPT课件

2利用定时计数器t1产生定时时钟由p1口控制8个发光二极管使8个指示灯依次一个一个闪动闪动频率为10次秒8个灯依次亮一遍为一个周期循3同时用两个定时器控制蜂鸣器发声定时器0控制频率定时器1控制同个频率持续的时间间隔300ms依次输出110501002004008001khz的方波
十天学会单片机 完整版
五个中断源的中断控制系统; 一个全双工UART(通用异步接收发送器) 的串行I/O口,用于实现单片机之间或单片机 与微机之间的串行通信; 片内振荡器和时钟产生电路,石英晶体和微 调电容需要外接。最高振荡频率取决于单片 机型号及性能。
C51知识
C语言是一种编译型程序设计语言,它兼顾 了多种高级语言的特点,并具备汇编语言的 功能。目前,使用C语言进行程序设计已经 成为软件开发的一个主流。用C语言开发系 统可以大大缩短开发周期,明显增强程序的 可读性,便于改进、扩充和移植。而针对 8051的C语言日趋成熟,成为了专业化的实 用高级语言。
非总线型
RST P3.0/RXD P3.1/TXD XTAL2 XTAL1 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 GND 1 2 3 4 5 6 7 8 9 10 20 19 18 17 16 15 14 13 12 11 VCC P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1/AIN1 P1.0/AIN0 P3.7
C-51数据的存储类型
例:
数据类型 变量名
char var1; bit flags; unsigned char vextor[10]; int wwww; 注意:变量名不能用C语言中的关 键字表示。
◆单板机 将CPU芯片、存储器芯片、I/O接口芯片和 简单的I/O设备(小键盘、LED显示器)等装 配在一块印刷电路板上,再配上监控程序(固 化在ROM中),就构成了一台单板微型计算 机(简称单板机)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void timer0() interrupt 1 i[pd])/256; //pd 为频段
TL0=(65536-yanshi[pd])%256;
bp++;
//bp 为变频信号
}
void timer1() interrupt 3 // 定时器 1 控制同个频率持续的时间,50mS 脉冲
同时用两个定时器控制蜂鸣器发声,定时器 0 控制频率,定时器 1 控制同个频率持续的时间, 间隔 300ms 依次输出 1,10,50,100,200,400,800,1k(hz)的方波。此题出题略有错误,应 去掉 1Hz,原因见注释
***************方法 1(747code)***************
beep=~beep; //变频信号发生后 beep 取反
if(t>5)
//测试定时器 0 脉冲是否达到 6 个,即 300mS
{
pd++; //如果达到 300mS,频段改变
t=0; //将定时器脉冲数归零
}
if(pd>6) //频段 pd 超出 6 个即第 7 个时,将频段归零
{
pd=0;
}
TR0=1;
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P3^4;
uint yanshi[]={50000,10000,5000,2500,1250,625,500}; //暂时除去 1Hz,原因是 1Hz 的半个周期
是 500mS,300mS 怎么能表现出来呢?
uchar t,bp,pd; //t 为 50mS 时间脉冲信号,bp 为变频信号,pd 为所选频段
void timer0() interrupt 1 // 定时器 0 控制频率
{
TH0=(65536-yanshi[pd])/256;
TL0=(65536-yanshi[pd])%256;
//开启定时器 0,让定时器 0 继续工作;定时器 0 在每执行一次以
上程序中大约有 4 条指令时间的增加,大约 12×4=48 微秒
}
}
}
*************方法 2(748code)*****************
#include <reg52.h>
#define uint unsigned int
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
void init()
{
EA=1;
//开启总中断
ET0=1;ET1=1;//开启外部定时器中断允许位
TMOD=0x11; //同时定义两个定时器的工作模式
TH0=(65536-yanshi[bp])/256;
TMOD=0x11; //同时定义两个定时器的工作模式
TH0=(65536-yanshi[bp])/256;
TL0=(65536-yanshi[bp])%256;//给定时器 0 赋初值
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //给定时器 1 赋初值
}
} t=0; pd++; if(pd>6)
//300mS 执行完了以后将定时器脉冲数归零 //再将频段变换
//频段变换超出范围则归零
{
pd=0;
}
}
}
******************************
TR0=1;TR1=1;//启动两个定时器;可以测试一次给字节赋值
}
void main()
{
bp=0;pd=0;beep=1;t=0;
init();
while(1)
{
if(bp>0) //测试变频信号发生
{
TR0=0; //关闭定时器 0,防止在执行定时器 1 时被中断,会引起混乱
bp=0;
//将变频信号 bp 归零,等待下一个信号 1
bp++;
//bp 为变频信号
}
void timer1() interrupt 3 // 定时器 1 控制同个频率持续的时间,50mS 脉冲
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
}
void init()
{
EA=1;
//开启总中断
ET0=1;ET1=1;//开启外部定时器中断允许位
TL0=(65536-yanshi[bp])%256;//给定时器 0 赋初值
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; //给定时器 1 赋初值 TR0=1;TR1=1;//启动两个定时器;可以测试一次给字节赋值
}
void main()
{
bp=0;pd=0;beep=1;t=0;
init();
while(1)
{ while(t<6)
//300mS 定时
{ if(bp>0)
则很容易出现混乱
//在执行低优先级的定时器程序时,最好关闭高优先级定时器,否
{ TR0=0; //关闭定时器 0,防止被中断 bp=0; //变频信号归零
beep=~beep; TR0=1; //使开启定时器 0 继续运行;if 语句中关开定时器用了大约 2 个机器周期,即 12×2=24 微秒,相对 500 很小
#define uchar unsigned char
sbit beep=P3^4;
uint yanshi[]={50000,10000,5000,2500,1250,625,500}; //暂时除去 1Hz,原因是 1Hz 的半个周期
是 500mS,300mS 怎么能表现出来呢?
uchar t,bp,pd; //t 为 50mS 时间脉冲信号,bp 为变频信号,pd 为所选频段
相关文档
最新文档