利用定时/计数器T0从P1.0输出周期为1s的方波,让发光二极管以1Hz闪烁,设晶振频率为12MHz。

2021-01-20,51单片机学习笔记

代码(精简注释):
/*********************************************************
利用定时/计数器T0从P1.0输出周期为1s的方波,
让发光二极管以1HZ闪烁,设晶振频率为12MHz
**********************************************************/
#include <reg52.h>
unsigned char num;
sbit LED1=P1^0;void main()
{num=0;//初始化计数变量EA=1;//打开特殊功能寄存器IE内的总开关EAET0=1;//打开特殊功能寄存器IE内的开关ET0TMOD=0X01;//0000 0001//低四位,GATE=0,C/T=0,M1M0=01;选用中断源T0,方式1,16位定时器TH0=(65536-50000)/256;//初始化,装填初值TL0=(65536-50000)%256;TR0=1;//启动定时器while(1){if(num==20){num=0;//中断函数每执行20次,初始化计数变量LED1=~LED1;//取反}}//中断函数每执行20次,led1取反一次,20*50ms=1s,即led1以1s的间隔交替点亮熄灭
}//中断函数 中断源:"定时/计数器0(T0)",代号1
void time0() interrupt 1
{TH0=(65536-50000)/256;//初始化,装填初值60(8进制)TL0=(65536-50000)%256;//初始化,装填初值176(8进制)num++;//计数变量自增/*方式1是对每一个机器周期进行计数,直到计满后,溢出,申请中断这里是从15536(=65536-50000)位置开始计数,逐次加1,直到65535位置即将溢出,再加1,回到0共50000次"加1",机器周期为1us时,每次加1耗时1us,全程耗时50ms*/
}
代码(详细注释):
/*********************************************************
利用定时/计数器T0从P1.0输出周期为1s的方波,
让发光二极管以1HZ闪烁,设晶振频率为12MHz
**********************************************************/#include <reg52.h>
unsigned char num;
sbit LED1=P1^0;void main()
{num=0;//初始化计数变量EA=1;//打开特殊功能寄存器IE内的总开关EAET0=1;//打开特殊功能寄存器IE内的开关ET0TMOD=0X01;//0000 0001/*TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能。低四位用于T/C0,高四位用于T/C1。自左向右:高四位:[GATE|C/T|M1|M0]低四位:[GATE|C/T|M1|M0]((这里选择T/C0,使用低四位,所以高四位设置0))‘0000 xxxx’GATE:门控位。GATE=0时,只要使TCON中的TR0或TR1为1,就可以启动定时/计数器(T/C)工作。(其中:TR0对应T/C0;TR1对应T/C1)GATA=1时,要满足两个条件,才能启动定时/计数器(T/C)工作:1.使TR0或TR1为1。2.同时外部中断引脚INT0/1也为高电平时。(INT0对应T/C0;INT1对应T/C1)((这里选择GATE=0,TR0=1))‘0000 0xxx’C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。((这里选择C/T=0,定时模式))‘0000 00xx’M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。M1M0=00,方式0,13位定时器/计数器M1M0=01,方式1,16位定时器/计数器M1M0=10,方式2,8位自动重装定时器/计数器M1M0=11,方式3,T0分成两个独立的8位定时器/计数器,T1此方式停止计数((这里选择M1M0=01,方式1))‘0000 0001’*/TH0=(65536-50000)/256;//初始化,装填初值,装填初值60(8进制)TL0=(65536-50000)%256;//初始化,装填初值,装填初值176(8进制)/*方式1(M1M0=01),定时器(C/T=0)模式方式1的计数位数是16位,由TL0作为低8位,TH0作为高8位,组成了16位加1计数器16位寄存器可以装填的范围是0~65535,共65536个数65535(10)=1111 1111 1111 1111(2)=FFFF(16)=177777(8)16位定时器0装初值的计算公式:假设要计的个数是n,TH0=(65536-n)/256;//高8位=差对256(2的8次方)求商TL0=(65536-n)%256;//低8位=差对256(2的8次方)求余*/TR0=1;//启动定时器/*TR0(TCON.4)T/C0运行控制位TR0置1时,T/C0开始工作;TR0置0时,T/C0停止工作.TR0由软件置1或清0.所以,用软件可控制定时/计数器的启动与停止.*/while(1){if(num==20){num=0;//中断函数每执行20次,初始化计数变量LED1=~LED1;//取反}}//中断函数每执行20次,led1取反一次,20*50ms=1s,即led1以1s的间隔交替点亮熄灭
}//中断函数 中断源:"定时/计数器0(T0)",代号1
/*5个中断源的代号分别是:
外部中断0(INT0)-->0
定时/计数器0(T0)-->1
外部中断1(INT1)-->2
定时/计数器1(T1)-->3
串行口-->4
它们的优先级从上到下由高到低递减*/
void time0() interrupt 1
{TH0=(65536-50000)/256;//初始化,装填初值60(8进制)TL0=(65536-50000)%256;//初始化,装填初值176(8进制)num++;//计数变量自增/*((这里要装填的个数为50000))((fosc=12MHz,震荡周期=1/12um,机器周期=1us))((50000*1us=50ms,单次执行延时50ms))振荡周期:为单片机提供振荡源的周期(是指振荡源的两个相邻同方向峰值之间的时间)机器周期:1个机器周期等于12个振荡周期方式1是对每一个机器周期进行计数,直到计满后,溢出,申请中断这里是从15536(=65536-50000)位置开始计数,逐次加1,直到65535位置即将溢出,再加1,回到0共50000次"加1",机器周期为1us时,每次加1耗时1us,全程耗时50ms*/
}

写在最后:
本文仅为个人学习笔记,诸多纰漏,欢迎斧正!

定时/计数器应用——从P1.0输出周期为1s的方波,让发光二极管以1Hz闪烁相关推荐

  1. 通过单片机定时器输出周期为1s的方波,驱动LED灯闪烁

    方波 方波的占空比固定是50%,即高电平和低电平的时间为1:1: 方波的周期:从一个上升沿(下降沿)到下一个上升沿(下降沿)的时间: 由此可得知周期为1s的方波就是高电平占0.5s,低电平占0.5s的 ...

  2. 利用定时/计数器TO从P1输入周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHZ

    #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar tt; sbit d1=P1^0 ...

  3. c语言延时变频1kHz和2kHz,用C语言实现:采用中断方式,P1.0输出脉冲宽度调制(PWM)信号,即脉冲频率为2kHz,占空比为...

    满意答案 qaz8140036 2014.11.04 采纳率:42%    等级:7 已帮助:309人 /*用keil3与proteus7.4联调,自己下载后开启联调设置,在proteus中画个最小单 ...

  4. 单片机c语言1ms 2ms 4ms方波,定时器使用:利用单片机内部定时器0通过P1.0端口输出一定周期的方波信号。 - 试题答案网问答...

    相关题目与解析 使用定时/计数器0以工作方式2实现定时,在P1.0输出周期为200s的连续方波.已知晶振频率fosc=6MHz. 已知单片机的晶振频率为6MHz,下面程序用单片机内部定时器T0工作在方 ...

  5. 【51单片机实验】4-单片机定时/计数器的应用(附Proteus电路)

    目录 一.实验目的 二.实验设备 三.实验内容 四.实验操作提示 五.实验总结 本实验对应实验报告 一.实验目的 1.掌握51单片机定时/计数器的应用设计 2.掌握查询方式和中断方式定时的设计和编程 ...

  6. 单片机_第6章 单片机的定时/计数器

    建议配合本专栏的文章"单片机_第6章 实验"一起使用 目录 6.1 定时/计数器的结构与工作原理 定时/计数的三种方式(不重要) 6.1.1 定时/计数器的基本原理 6.1.2 定 ...

  7. 单片机 -定时/计数器的初始化编程及应用

    定时/计数器的编程 1.根据要求选择方式,确定方式控制字,写入TMOD寄存器,配置好工作模式. 2.根据要求计算定时/计数器的计数值,在求得计数初值,写入初始化寄存器 . 3.根据需求,开放定时/计数 ...

  8. 实验6、8254定时/计数器实验

    实验内容 基础部分: 1.编写程序,是8254的计数器1分别工作在方式0.1.2.3下,在示波器上观察各工作方式下OUT1的输出波形. 拓展部分: 2.使用单脉冲开关手动生成8254的输入时钟,观察方 ...

  9. 用51单片机做信号发生器,同时输出四种频率的方波

    //编写51单片机程序,输出方波. //要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: //    P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = ...

最新文章

  1. Neo4J简介(2)
  2. Android7.1修改系统默认多媒体音量大小
  3. 《研磨设计模式》chap24 桥接模式bridge(2)场景应用
  4. 35岁之后程序员的认可度不是很高
  5. 区间数多属性决策matlab,区间数多属性决策的改进理想解法
  6. pandas隔行计算均值方差(相邻行或隔行的均值/方差)
  7. centos6.5 安装mono
  8. python difflib 源码_python difflib 模块
  9. rancher的使用感受以及与k8s的对比
  10. Mybatis中传参包There is no getter for property named 'XXX' in 'c
  11. Python 深度学习常用包汇总
  12. 2014恒生电子笔试题
  13. TCP AIMD Algorithm (copy)
  14. Qt 之 自定义窗口标题栏
  15. Mat类型中的CV_8UC3、CV_32FC3以及对应的迭代器模板参数Vec3b,Vec3f的一点自己的理解
  16. 嵌入式面试总结(持续更新)
  17. 顺序表和链表实现图书管理系统
  18. 什么是软件测试、软件测试是什么、软件测试的目的、软件测试的原则、软件测试的对象
  19. c语言函数指针的多种赋值方法
  20. Java8 Zip 压缩与解压缩

热门文章

  1. 我的世界java局域网存档位置_网易版我的世界局域网联机存档怎么转移 如何将局域网存档转到租赁服...
  2. 查询LOB字段的连接不释放导致的TEMP报错
  3. Android 搭建局域网服务器
  4. oss2罗列所有文件
  5. 网络空间搜索引擎及常用的端口漏洞
  6. 马云的“野心”,阿里的区块链布局
  7. 深入了解区块链的漏洞之1:介绍篇
  8. Altium Designer--如何将图片转成PCB logo
  9. python 已知三角形的三条边,通过反三角函数计算出三角形的三个角;其中用到math的引用;
  10. 浮点数存储方式理解,浮点数和整数之间的转换