单片机定时器实验程序框图(单片机学习第六课)

上节说到决定计数,还是定时,由寄存器TMOD决定 具体请看这里计数器/定时器

如果要定时那么C/T=0,为定时器模式。

回顾上节的主要内容

1.TMOD决定计数还是定时以及 M1,M0工作方式的选择;

2.根据设定时间计算出高八位TH1/0,低八位TL1/0;

3.开启总控 EA=1;

4.开启定时器中断

5.启动定时器

这节内容主要用定时器控制I/O口输出一个方波

1.假设系统的时钟是12mhz,设计从P1.0引脚实现输出一个周期为2毫秒的方波,即占空比2:1

单片机定时器实验程序框图(单片机学习第六课)(1)

基本思路是:要在P1.0上产生周期为2MS的方波,定时器颖产生1ms的定时中断,定时时间到则中断服务程序中对P1.0去反。使用定时器T0方式1定时中断。因为 1ms=1000us 在P1.0引脚接示波器。通过Proteus软件中的虚拟数字示波器查看输出波形,判断输出是否正确。如下图

单片机定时器实验程序框图(单片机学习第六课)(2)

计算T0的初值,有65536-1000=X

X=64536 化为16进制数为0xfc18,那么高八位是 0xfc,低八位是0x18。

参考程序如下

注意P一定要大写 ,否则编译出错

#include<reg51.h>// 头文件 #include<intrins.h> //没有用到 #define uchar unsigned char #define achar signed char sbit P1_0=P1^0;//定义P1 void main() //主程序 { TMOD=0x01; EA=1;//开启总控 ET0=1;//定时中断允许 TR0=1; //启动定时器 while(1); { TH0=0xfc; //装入高八位 TL0=0x18; //装入低八位 do{}while(!TF0); P1_0=!P1_0;//去反 TF0=0; } }

单片机定时器实验程序框图(单片机学习第六课)(3)

仿真结果

注意:在仿真时,如果发现没有波形,马上右键单击示波器。点击“Digital oscilloscope”就可以了!!!并且调节周期时间旋钮

单片机定时器实验程序框图(单片机学习第六课)(4)

2.做如下设计

①要求

已知单片机系统时钟频率为12MHz,请利用T0和P1.0在Proteus中输出矩形脉冲,波形如下:

单片机定时器实验程序框图(单片机学习第六课)(5)

②仿真图

单片机定时器实验程序框图(单片机学习第六课)(6)

③参考源代码

#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define achar signed char sbit P1_0=P1^0; uchar i=0,j=3; void main() { TMOD=0x02; P1_0=0; TH0=0xce; TL0=0x206; ET0=1; EA=1; TR0=1; while(1); } void T0_int() interrupt 1 { if(i==0) { j--; if(j==0) { P1_0=!P1_0; i=!i; j=3; } } else { P1_0=!P1_0; i=!i; } }

④仿真结果

单片机定时器实验程序框图(单片机学习第六课)(7)

用一个if else 简单解决问题 大家注意练习哦!

获得更多源代码与教程请关注我!或者私信回复 单片机 获得免费资源获得更多源代码与教程请关注我!或者私信回复 单片机 获得免费资源获得更多源代码与教程请关注我!或者私信回复 单片机 获得免费资源

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页