• 单片机基础(六):单片机定时/控制器的控制接口


    单片机定时/控制器的控制接口

    定时/计数器编程的 5 个步骤
    1.根据需求选择工作方式,确定方式控制字,写入TMOD寄存器
    2.计算定时/计数器的计数值,求计数初值,写入初值寄存器
    3.根据需要,开放定时/计数器的中断选项
    4.设置定时/计数器控制寄存器TCON,启动定时器
    5.等待定时时间到,用查询或中断方式作相应处理


    定时/计数器的应用举例
      利用定时器产生周期性动作的基本思想:

    • 产生周期性的定时
    • 定时时间到做相应处理

     如 设系统时钟频率为12MHz,要求用定时/计数器T0实现从P1.0输出周期为500μs的方形波(即周期性高低电平切换)

    分析:
      从P1.0输出周期为500μs的方波,只需P1.0每250μs取反一次即可
      当系统时钟为12MHz,振荡频率为(1/12M)s,即(1/12)μs,一个机器周期为12个振荡周期,所以一个机器周期为1μs,即计数一次为1μs,则计数值为250,选择计数方式2,计数初值为方式2的 256 - 250 = 6
      工作方式2,方式控制字0x02,计数初值6,TH0 = TL0 = 0x06


    代码实现
    查询法:时刻查询TF的状态并在溢出时做处理

    /*
    *12MHz的晶振  使P1.0端口输出周期为500μs的方波
    */
    #include<reg52.h>
    sbit P1_0 = P1^0;
    void main(){
    	TMOD = 0x02;
    	TH0 = TL0 = 0x06;
    	TR0 = 1;
    	for(;;){
    		if(TF0){//查询溢出状态
    			TF0 = 0;		//归位
    			P1_0 = ~P1_0;	//处理
    		}
    	}
    }
    

    中断法:溢出状态触发中断,并使用中断服务处理溢出

    #include<reg52.h>
    sbit P1_0 = P1^0;
    void main(){
    	TMOD = 0x02;
    	TH0 = TL0 = 0x06;
    	EA = 1;//
    	ET0 = 1;//中断控制,详见该系列博客中断篇
    	TR0 = 1;
    	while(1);//使程序一直执行
    }
    
    //中断服务程序
    void time0_int(void) interrupt 1 {
    	P1_0 = !P1_0;
    }
    

    长时间定时

      一般晶振频率都以MHz为单位,机器周期就以μs为单位,这样短的周期有时无法满足需求,但我们可以用编程手段实现更长时间的计时,比如设置计数变量,每计时100μs就让计数变量加一,计数变量达到10000时就实现了1s单位的计时,这样就可以灵活适应需要


    2019/3/3

  • 相关阅读:
    页面滚动
    tcbRouter
    http缓存策略
    Ajax跨域
    tcp 3次握手和4次挥手
    http头字段
    http工作原理
    一个下载Windows镜像的地址
    安装MySQL-8.0.13
    配置Java,jdk环境变量
  • 原文地址:https://www.cnblogs.com/kafm/p/12721823.html
Copyright © 2020-2023  润新知