在本文中,我们用定时器0来产生方波信号,包含两个实验,实验1产生一个频率为10kHz的方波信号,实验2产生一个频率为100Hz的方波信号。
实验1
实验1 中定时器0的初始化代码如下所示。
void init_T0(void)
{
TMOD|= 0x02; //使用方式2,8位自动重装载定时器
TH0=256-50; //给TH0和TL0赋初值,计数周期为50个机器周期
TL0=256-50; //采用12MHz的晶振,计时时长为50us
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
代码中将定时器0设置为方式2,8位自动重装载定时器,TL0用来计数,TL0的溢出,不仅置位TF0,而且将TH0的内容重新装入TL0,TH0内容由初始化时预置为256-50,即计数周期为50个机器周期,外部晶振为12MHz,机器周期为1us,则计数周期为50us,采用中断对定时器0的溢出事件进行处理,中断代码如下所示。
void T0_ISR(void) interrupt 1 using 1
{
PULSE=~PULSE; //输出的值取反
}
在中断函数中只改变了PULSE的状态,程序中PULSE是P10引脚的宏定义。
烧写之后可以看到实验现象,用示波器测量P10的输出信号,从示波器中可以看出P10输出周期为100us的方波,即频率为10KHz的方波。
实验2
实验2中定时器的初始化代码如下所示
void init_T0(void)
{
TMOD = 0x00; //使用方式0,13位定时器
TH0=(8192-5000)/32; //给TH0和TL0赋初值,计数器由3192开始计数,到8191溢出
TL0=(8192-5000)%32;
EA=1; //总中断打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
}
在这个实验中,采用定时器0的方式0进行定时。方式0为13位计数器,由TL0的低5位和TH0的8位构成。TL0的低5位溢出时向TH0进位。TH0计数溢出置位TCON中的溢出标志位TF0。程序中由3192开始计数,计数到8191溢出。计数周期为5000个机器周期,即为5ms。因此产生脉冲的周期为10ms,脉冲频率为100Hz。溢出中断代码如下所示。
void T0_ISR(void) interrupt 1 using 1
{
TH0=(8192-5000)/32; //给TH0和TL0重新赋值
TL0=(8192-5000)%32;
PULSE=~PULSE; //PULSE的值取反
}
在中断中,重新赋值TH0和TL0,并改变PULSE的状态。
烧写之后可以看到实验现象,用示波器测量JP1上的P10的输出信号,从示波器中可以看出P10输出周期为10ms的方波,即频率为100Hz的方波。
关键字:51单片机 定时器 方波信号
引用地址:
51单片机(二十)—— 定时器产生方波信号
推荐阅读最新更新时间:2024-11-06 06:32
基于MCS51单片机的低成本LabVIEW实验教学系统设计
NI 公司于20 世纪70 年代提出了虚拟仪器的概念。虚拟仪器是在以计算机为核心的平台上,由用户设计,具有虚拟面板,由软件实现测试功能的计算机仪器系统,是计算机与测试仪器相结合的产物。虚拟仪器最常用的编程语言为LabVIEW,是NI公司的基于图形化编程语言的虚拟仪器开发工具,利用它可以轻松组建一个测试系统而无需进行繁琐的代码编写。因此虚拟仪器大大突破了传统仪器在灵活性,以及数据处理、显示、存储等方面的不足,其主要优势在于:用户能够根据需求灵活的进行功能修改和扩展;人机界面为视窗界面,形象直观;网络连接简单易行,便于组建测控网络。 目前虚拟仪器在通信、汽车、测控等行业得到了广泛的应用。相应的各大高校也在NI公司的支持下,
[单片机]
教你如何 51单片机控制mg995舵机
这是我的小车雏形,还没完成,之前就一直卡在舵机控制部分,今天终于搞定了。接下来我就将我注意的所有部分说出来,和大家分享一下我的经验: 1 单片机,舵机,电源共地; 2 用两个稳压芯片进行供电,将电源分开来; 3 舵机信号端没有直接连接单片机IO口,我串了一个10K的电阻,也就是这一步之后我就可以控制我的舵机了。 之前听很多人说是信号端直接连IO口也可以控制的,但是我就是一直都不可以了,今天我就串了一个10K的电阻之后意外发现可以控制舵机了 所以我就发这个帖子出来,和大家分享,同时感谢那些帮我思考的人,感谢你们~~ 需要比较清楚的电路的人可以留言,如果我看需要的人很多的话我就传上来吧~~~ 基于大众的要求,要求资料,那我就把我
[单片机]
51单片机汇编语言子程序调用指令RET RETI
控制转移 指令 用于控制程序的流向,所控制的范围即为程序存储器区间,MCS-51系列单片机的控制转移 指令 相对丰富,有可对64kB程序空间地址单元进行访问的长调用、长转移指令,也有可对2kB字节进行访问的绝对调用和绝对转移指令,还有在一页范围内短相对转移及其它无条件转移指令,这些指令的执行一般都不会对标志位有影响。 . 子程序调用指令(1条) 子程序是为了便于程序编写,减少那些需反复执行的程序占用多余的地址空间而引入的程序分支,从而有了主程序和子程序的概念,需要反复执行的一些程序,我们在编程时一般都把它们编写成子程序,当需要用它们时,就用一个调用命令使程序按调用的地址去执行,这就需要子程序的调用指令和返回指令。 LCALL
[单片机]
ATmega16L-定时器数码管扫描
/**************************************** 用定时器维持数码管显示 现在是数码管示数不断增加。 ****************************************/ #include iom16v.h unsigned int cnt; unsigned char shu ; unsigned char aa; const unsigned char duanma ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; const un
[单片机]
8051单片机中DPTR的扩展设计
首先对比分析在执行大规模数据转移时,传统8051单片机和进行DPTR扩展后的8051单片机在数据转移执行效率上的差别。通过详细分析DPTR操作所涉及的因素,具体实现对DPTR的扩展,并进行实际仿真测试。 单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MCU架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据存储器和I/O接口电路;但在现今的8051单片机应用中,特别
[单片机]
基于51单片机之8个独立式键盘驱动程序
#define KEY P1 //键盘所连接的I/O接口组定义 *********************************************************** 函数名:8个独立式键盘驱动程序 调 用:? = Key (); 参 数:无 返回值:unsigned char 键值0~8 结 果:有键按下时返回值为键值1~8,无键按下时返回值为0 备 注:在主函数中不断调用 *********************************************************/ unsigned char Key ( ){ //8个独立键盘处理程序 unsigned char a,
[单片机]
STM8学习笔记---定时器输出7路PWM波
STM8S003F3P6单片机共有三个定时器定时器1、定时器2、定时器4。其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器。定时器1和定时器2可以输出PWM波。其中定时器1有4个通道,定时器2有3个通道。 现在让定时器1和定时器2所有通道同时输出PWM波。 首先初始化定时器IO口 通过最小系统图可以看出定时器通道对应的IO口为: TIM1_CH1– PC6, TIM1_CH2– PC7, TIM1_CH3– PC3, TIM1_CH4– PC4, TIM2_CH1– PC5, TIM2_CH2– PD3, TIM2_CH3– PA3, 将定时器对应的IO口都设置为推挽输出模式。因为要
[单片机]
GD32开发实战指南(基础篇) 第16章 RTC
开发环境: MDK:Keil 5.30 开发板:GD32F207I-EVAL MCU:GD32F207IK 1 RTC工作原理 1.1 RTC简介 GD32 的 RTC 外设,实质是一个掉电后还继续运行的定时器。从定时器的角度来说,相对于通用定时器 TIMER 外设,它十分简单,只有很纯粹的计时功能(当然,可以触发中断);但从掉电还继续运行的角度来说,它却是 GD32中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性。 以上所说的掉电, 是指主电源 VDD断开的情况,为了 RTC 外设掉电继续运行,必须给GD32芯片通过 VBAT引脚接上锂电池 。当主电源 VD
[单片机]