试用定时/计数器T1对外部事件计数。要求每计数100,就将T1改成定时方式,控制P1.7输出 一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为12MHz。

时间: 2023-08-01 10:11:07 浏览: 94
这是一道典型的单片机应用题,需要用到定时器/计数器 T1,以及外部中断。下面是具体实现步骤: 1. 配置 T1 为计数模式,并启动 T1 计数器。 2. 配置外部中断 INT0 为上升沿触发,并启用外部中断。 3. 编写外部中断服务程序,每触发一次外部中断,就将 T1 的计数值加 1。 4. 在主程序中,不断检查 T1 的计数值是否达到 100,如果达到则执行以下操作: a. 停止 T1 计数器,将 T1 配置为定时模式,并设置计时器初值,使得 T1 计时 10ms。 b. 等待 T1 计时完成,即 T1 中断标志位被置位。 c. 清除 T1 中断标志位,将 T1 配置为计数模式,将计数器初值清零,重新启动 T1 计数器。 d. 控制 P1.7 输出一个脉宽为 10ms 的正脉冲。 5. 回到主程序,继续执行循环。 下面是具体的程序实现(使用 keil C51 编译器): ```c #include <reg52.h> #define FREQ_OSC 12000000UL // 晶振频率 sbit LED = P1^7; // 控制 LED 的 IO 口 unsigned int cnt = 0; // 外部事件计数器 bit flag = 0; // 定时/计数模式标志位 void init_timer1() { TMOD |= 0x10; // T1 为 16 位计数器,工作在模式 1(M1=0,M0=1) TH1 = 0; // 计数器初值高位清零 TL1 = 0; // 计数器初值低位清零 TR1 = 1; // 启动 T1 计数器 } void init_ext_int0() { IT0 = 1; // 外部中断 INT0 触发方式为上升沿 EX0 = 1; // 允许外部中断 INT0 EA = 1; // 允许所有中断 } void timer1_isr() interrupt 3 { TF1 = 0; // 清除 T1 中断标志位 if (flag) { flag = 0; TH1 = (65536UL - (FREQ_OSC / 100UL / 12UL)) / 256; TL1 = (65536UL - (FREQ_OSC / 100UL / 12UL)) % 256; TR1 = 1; // 启动 T1 定时器 LED = 1; // 输出正脉冲 } } void ext_int0_isr() interrupt 0 { cnt++; // 外部事件计数器加 1 } void main() { init_timer1(); init_ext_int0(); while (1) { if (cnt >= 100) { // 达到计数阈值 cnt = 0; flag = 1; // 标记为定时模式 while (!TF1); // 等待 T1 定时完成 LED = 0; // 停止输出正脉冲 TR1 = 0; // 停止 T1 定时器 TH1 = 0; // 计数器初值高位清零 TL1 = 0; // 计数器初值低位清零 TF1 = 0; // 清除 T1 中断标志位 init_timer1(); // 重新配置 T1 为计数模式 } } } ``` 需要注意的是,上述程序中的计时器初值是根据晶振频率和计时时间计算得出的,具体计算方法可以参考《51单片机原理与应用》等相关资料。同时,由于晶振频率可能存在一定的误差,因此实际输出的脉冲宽度可能会略微偏差。

相关推荐

最新推荐

recommend-type

电源技术中的全桥逆变单极性SPWM控制方式过零点振荡的研究

摘要:单极性全桥逆变相对于双极性逆变损耗低,电磁干扰少,单极性SPWM更适用于逆变控制,但该控制方式存在一个过零点振荡。介绍了单极性逆变中的双边SPWM的控制方法,分析了这种控制方法在正弦波电压过零点附近的...
recommend-type

电源技术中的开关型DC/DC变换器电压、电流控制的基本原理

脉宽调制(PWM)型高频开关稳压电源只对输出电压进行采样,实行的是闭环控制,这种控制方式属电压控制型,是一种单环控制系统。而电流控制型DC/DC开关变换器是在电压控制型的基础上,增加了电流反馈环,形成了双环...
recommend-type

一种基于PWM的电压输出DAC电路设计

对实际应用中的脉宽调制(PWM)波形的频谱进行了理论分析,指出通过一个低通滤波器可以把PWM调制的数模转换信号解调出来,实现从PWM到DAC的转换。论文还对转换误差产生的因素进行了分析,指出了减少误差的方法,论文...
recommend-type

正弦波脉宽调制(SPWM)原理小谈

SPWM脉冲系列中,各脉冲的宽度以及相互间的间隔宽度是由正弦波(基准波或调制波)和等腰三角波(载波)的交点来决定的。具体方法如后所述。
recommend-type

输出两路占空比和频率可调的互补PWM

如何利用STM32通用定时器实现输出两路占空比和频率可调的互补PWM ,高级定时器资源有限,本文利用通用定时器(General-purpose timers)实现互补PWM输出,在高级定时器资源不够时不失为一个好方法。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。