单片机---1MHz方波的产生(中断和查询方式)

这篇具有很好参考价值的文章主要介绍了单片机---1MHz方波的产生(中断和查询方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单片机—定时/计数器方式产生1MHz方波

要求: 使用定时器1,采用工作方式1,在输出口P2.0产生周期未1秒的方波;

定时计数基本流程

  1. 计算初值
  2. 定义TMOD寄存器确定 T0 或 T1 为工作方式
  3. 把计数器初值装入 THx 和 TLx (x=0,1与上面确定的T0,T1保持一致)
  4. 采用中断方式时,要对 IE 和 IP 寄存器进行赋值,打开中断
  5. 使TRx(x=0,1) 置位, 启动定时/计数器工作

要求分析

  • 定时器T1由 TH1(字节地址8DH) 和 TL1(字节地址8BH) 组成,使用时我们在其装填初值

  • T1定时器对应TMOD寄存器的高八位,采用工作方式1则对应M1M0=01,所以这里我们将TMOD的初值设为 0001 0000 转化为对应16进制数为 TMOD=0x10

  • 要产生周期为1s的方波,可以利用定时器在500ms时产生溢出, 在通过软件方法是输出口P2.0的输出状态取反, 不断重复这一过程即可.

  • 1s=1000ms,工作方式1是16位定时/计数器,对每一个机器周期(1μs)进行计数,其最大值为2**16=65536μs,约等于65.54ms,那么我们产生500ms的定时可以采用每次50ms的定时,并且让其计数10次来实现

  • 根据公式计算初值为:

    a=216 - t • fosc / 12 = 65536 - 50000 • 11.059/12 = 19456.833 (11.059MHz晶振频率)

    a=216 - t • fosc / 12 = 65536 - 50000 • 12/12 = 15536 (12MHz晶振频率)

    15536转化为16进制为0x3CB0 即 TH1=0x3C TL1=0xB0

  • 对于查询方式来说,我们利用 TCON 定时/计数控制寄存器中 TF1的溢出来作为计数,核心思想方法同上面一致,采用每次50ms的计时,时间到产生溢出,循环溢出10次后将输出口的电平取反即可实现对应方波的.

代码编写

中断方式实现
//中断方式
#include <reg52.h> //定义头文件,我的单片机型号为80C52RC
unsigned char num; //用于循环计数变量
sbit D1=P2^0;	   //方波输出口为P2.0


/*中断函数 中断源:"定时/计数器1(T1)",代号3*/
void timer1() interrupt 3 
{
    TH1=0x3C; TL1=0xB0;  //装填计数器初值
	num++;			 	 //计数变量自增
}
/*程序主函数*/
void main()
{
	num=0;		//初始化计数变量
	EA=1;		//打开中断允许寄存器IE内的总开关EA
	ET1=1;		//打开中断允许寄存器IE内的开关ET0
	TMOD=0x10;	//0001 0000
    
	//低四位,GATE=0,C/T=0,M1M0=01;选用中断源T1,方式1,16位定时器
	TH1=0x3C; TL1=0xB0;  //装填计数器初值
	TR1=1;				 //启动定时器T1
	
	while(1)			 // 无限循环使得方波连续
	{
		if(num==10) //中断函数每执行0次,取反一次,10*50ms=500ms,即led1以1s的间隔交替点亮熄灭
		{
			num = 0;   //中断函数每执行20次,初始化计数变量
			D1 = !D1;  //取反
		}
	}
}
查询方式实现
//查询方式
#include <reg52.h> //定义头文件,我的单片机型号为80C52RC
unsigned char num; //用于循环计数变量
sbit D2=P2^1;	   //方波输出口为P2.1

void main()
{
	num = 1; 		//设置计数的次数
	//低四位,GATE=0,C/T=0,M1M0=01;选用定时器T1,方式1,16位定时器
	TMOD = 0x10;	//0001 0000
	TR1 = 1;		//启动T1			
	TH1=0x3C; TL1=0xB0;	// 装载计数器初值
	while(1)  			// 无限循环使得方波连续
	{
		if (TF1==1)		//判断定时器T1溢出标志位是否为1
		{
			num++;
			TF1 = 0; 	//清除中断
			TH1=0x3C; TL1=0xB0;	// 装载计数器初值
			if (num==10) //若产生了10次溢出 
			{
				D2 = !D2; // 定时时间到使D2反向
				num = 1;			
			}
		}		
	}
}

结果演示

仿真图如下:

单片机---1MHz方波的产生(中断和查询方式)

仿真效果如下:

单片机---1MHz方波的产生(中断和查询方式)

实物演示如下:

单片机---1MHz方波的产生(中断和查询方式)

单片机---1MHz方波的产生(中断和查询方式)

可以见结果符合所需要求.文章来源地址https://www.toymoban.com/news/detail-443091.html

到了这里,关于单片机---1MHz方波的产生(中断和查询方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于51单片机的波形发生器(PCF8591、正弦波、三角波、锯齿波、方波)

            正弦波、三角波、锯齿波和方波是我们平时最常见的四种波形,那么学会使用单片机产生这四种波就很重要了。但学过51单片机就知道,其IO引脚只能输出高电平或低电平,单靠其引脚生成以上波形,好像不大可能,因此我们需要配合使用另一个很重要的芯片,DAC芯片

    2024年02月09日
    浏览(89)
  • AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

     说一下功能:客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信,从此老死不相往来 看代码: 服务端代码:    

    2024年02月13日
    浏览(57)
  • 单片机Hard fault 产生原因和错误跟踪的方法

    一、单片机 Hard fault产生的原因 Hard fault产生的原因有两方面,硬件方面和软件方面。 ①硬件方面常见原因 :  电源设计有错误,造成器件供电不稳;  电源质量不好,纹波,噪声过大;  器件接地不良;  对于带有 Vcap 引脚的器件,管脚处理不当;  电路中有强干扰源,对

    2024年02月03日
    浏览(48)
  • 51单片机中断系统

    我们先来举一个生活事例: 你打开火,烧上一壶水。然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的报警声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。 对于

    2024年02月05日
    浏览(57)
  • 51单片机中断

    1、什么是中断? CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 中断触

    2024年01月21日
    浏览(51)
  • 51单片机(九):中断

    一、“中断”与定时器的关系         前面我们学习过了定时器,实际上 定时器的一般用法都是采取中断的方式进行实现的 。需要明确的是,定时器和中断不是一回事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断是单片机中的一种运行机制。 在单片

    2024年02月04日
    浏览(43)
  • 51单片机——中断

    中断系统的设置,是为了让CPU能对外界紧急事件进行实时处理 中断的过程是,当中断请求源发出中断请求时,CPU响应中断后,CPU先暂停当时正在执行的主程序,转而去处理中断服务程序,处理完后继续原来的工作 微型机一般允许多个中断源,当几个中断源同时发出中断时,

    2023年04月15日
    浏览(86)
  • 【51单片机——————外部中断】

    中断是指单片机主程序运行过程中,出现某些意外情况需要单片机处理,单片机能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 在实际应用开发中,单片机不可能一直轮询查看按键是否按下,单片机还需要去执行其他任务,

    2024年02月06日
    浏览(48)
  • 【51单片机】外部中断

    51的 外部中断 与 定时器(内部中断) 有一个共同特点,那就是与主程序是 并行 工作的,就是主程序在运行的时候,中断也在等待触发条件,当 中断被触发的时候会暂停主程序 转而执行中断服务程序,只有中断服务程序执行完后,才会继续执行主程序。 这里的触发条件是指:

    2024年02月02日
    浏览(66)
  • 单片机--中断实验练习

    STM32上电LED(PB0)灯亮 ,当检测到按键(PA8)按下时处理中断事件,变量i++ 响应优先级-在两个中断同时触发时,且这两个中断的优先级相同,响应优先级高先执行   知识点:消抖 消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响,确保在每一次断开或闭合触

    2024年02月06日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包