奶爸业余单片机学习之:定时器使用方法——非中断,TF值软件重置法

============定时器使用方法——非中断,TF值软件重置法========

第一:设置特殊功能寄存器TMOD,配置好工作模式。

第二:设置计数寄存器TH0和TL0的初值。

第三:设置TCON,通过TR0置1来让定时器开始计数。

第四:判断TCON寄存器的TF0位,监测定时器溢出情况。

 实例:

//LED由三极管及73HC138控制
//用定时器0实现亮与灭之间的1秒时

# include <reg52.h>

sbit led2 = P0^0;

sbit addr0 = P1^0;
sbit addr1 = P1^1;
sbit addr2 = P1^2;
sbit addr3 = P1^3;
sbit enled1 = P1^4;

int main()
{
  unsigned char time0 = 0;

  addr0 = 0, addr1= 1, addr2 = 1,addr3 = 1, enled1 = 0; //38译码器控制led2时的I/O状态(原理图)
  led2 = 0;//先点亮LED2

  TR0 = 1;//启动定时器0
  TMOD = 0x01;//定时器0、工作方式1
  TH0 = 0xB8;TL0 = 0x00;//已20ms定时时,装入的初值
  TF0 = 0;//单片机上电后,TF0/1默认为0,因此此步可省略。

  while(1)//主程序大循环
  {
    if(TF0 == 1)//判断TF0是否为1(溢出),若溢出则执行if内语句
    {
      TF0 = 0;//TF0软件重置
      TH0 = 0xB8;TL0 = 0x00;//给定时器0存储寄存器装入计数值为20ms时的初值(初值=65536-计数值)
      time0++;//TF0每溢出一次(20ms),变量time0加1,
      if(time0 >= 50) //当time0从0变50时,则1秒时间已到
      {
        time0 = 0;//time0清零,重新计数
        led2 = ~led2;//led2取反,实现亮灭之间1秒变化
      }
    }
  }
  return 0;
}

时间: 2024-10-13 18:29:45

奶爸业余单片机学习之:定时器使用方法——非中断,TF值软件重置法的相关文章

奶爸业余单片机学习之:定时器中断的使用方法——进入中断TF0(TF1)值硬件自动重置

/*============定时器中断的使用方法—---TF0(TF1)值硬件重置法======== 第一:打开总中断第二:打开定时器 中断第三:设置特殊功能寄存器TMOD,配置好工作模式. 第四:设置计数寄存器TH0和TL0的初值. 第五:设置TCON,通过TR0置1来让定时器开始计数.*/ //LED由三极管及73HC138控制//用定时器0实现亮与灭之间的1秒延时 # include <reg52.h> sbit led2 = P0^0; sbit addr0 = P1^0;sbit a

奶爸业余单片机学习之:UART串口通信学习笔记(一)

UART串口通信,全名:异步串口通信 UART的四种工作模式:(0,1,2,3) 模式1:SM0 = 0; SM1 = 1;REN = 1  //由SCON(串行口控制寄存器)控制,可位寻址.10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制) 模式1功能:以TXD为例,平时没数据时,TXD为高电平,需要发送数据时,先发送一个起始位0,然后发送八位数据位(一个字节),最后发送一位停止位1: REN位为允许串行接收位:REN = 1:允许串行口接收数据:REN = 0:禁止串行口接收数

奶爸业余单片机学习之:UART串口通信学习笔记(二)

/************************************** 串口通信实验* 晶振11.0592MHz* 波特率9600bps* 中断方式实现:单片机接收电脑数据,加1后发送回电脑***************************************/ #include<reg52.h> unsigned char dat; /**********串口通信配置*******************/void UART_CONFIG(unsigned long baud

奶爸业余单片机学习之:用数码管及LED实现交通灯(初版)

/* * 人行道交通灯程序:LED2(红灯).LED3(黄灯).LED4(绿灯)* 红灯30秒,绿灯3秒,绿灯15秒,倒计时 灯亮时间显示在数码管上* 晶振11.0592MHz,LED.数码管由三八译码器控制,T0中断 *程序思路:由于三八译码器每次只能输出一个低电平,因此必须用动态扫描方式点亮数码管及LED,中断间隔1ms *亮灯时间倒数,红灯60秒,绿灯20秒,黄灯3秒,顺序:红 - 绿 -黄 -红循环,因此每经历1000次中断,实现数字递减. */ #include<reg52.h>un

奶爸业余单片机学习之:C语言基础——指针(指针变量)学习笔记

指针变量的定义: 存放地址的变量称为指针变量 1. 定义指针变量的一般形式如下: 类型名 * 指针变量名1,* 指针变量名2,... * 指针变量名n ; 例如:  int * X, *Y, *Z; 等同于: int * X; int * Y; int * Z; 实例: #include<stdio.h>void main(){    int x = 1;    int y = 2;    int* A;        //声明一个指向整形变量的指针变量A    int* B;        

英语学习阅读书目(转自知乎奶爸文)

前些日子写了篇关于学习英语的随笔,里面介绍了当下一种学习英语的好方法.一直都没有真正开始学习英语之路.首先是没有找到合适的书籍,其次是最近有点忙,事情有点多. 今天找到一个特别好的资料,将英语学习可读的外文书很全面的都罗列了出来!下面首先挂上原文的链接:有哪些易读的英文原版书? 下面进入正文: 首先预热一下,我觉得所有人确定一定以及肯定可以看懂的必然是这本,超简单 这本书的伟大或者经典就不多说了,里面每个生词,建议都牢牢背下来,非常值得反复精读,在欧美那儿可谓无人不知无人不晓 下面进入正题: 1

单片机学习(一) 中断、定时器、优先级的一些理解

以下仅仅为比较常见的场景下的理解,不完整,参考需谨慎. 1.main文件中,while循环中写明了按顺序执行的语句.期间会执行许多中断服务(最常用的定时器功能也是中断). 2.从信号角度来说,比如超声波模块有高低电平之分,所以存在上升或下降的过程.中断可以捕获上升或下降的信号,捕获到之后,执行中断函数. 3.外部中断:有外部的传感器模块的信号进来: 内部中断:内部配置定时器. 4.优先级分为抢占优先级和响应优先级. 比如抢占优先级  0  1  2  3 响应优先级  0  1  2  3 同时

奶爸程序员的“育儿”心得

自我介绍一下,本人以前是.net程序员,去年下半年负责把项目从.net转到java,并且有跨机房迁移,亿级访问量,app服务端项目. 自我吐槽一下,工作了8年了,没有成为架构师,也没有进入管理层,没有成为技术大师,也没能成为分享大师.一直在做业务,并在这条路上越走越远.有的时候觉得很尴尬,但又有的时候觉得还蛮适合自己.过年之前,老婆生了一个小公举.宝宝饿了,"老婆快来喂奶!",宝宝又饿了,"老婆快来喂奶!",宝宝睡醒了又饿了,"老婆快来喂奶!"-

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m