博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51单片机定时器实现LED闪烁
阅读量:7282 次
发布时间:2019-06-30

本文共 890 字,大约阅读时间需要 2 分钟。

要启用一个定时器,先要开启定时器,然后产生中断

系统中断:

 

初始化程序应完成如下工作:

对TMOD赋值,以确定T0和T1的工作方式。

计算初值,并将其写入TH0、TL0或TH1、TL1。

中断方式时,则对EA赋值,开放定时器中断。

使TR0或TR1置位,启动定时/计数器定时或计数。

 

#include 
/************ 定时器+中断控制led翻转 ***********/sbit LED = P0^0;typedef unsigned int u16;typedef unsigned char u8;void timer_init(){ TMOD |= 0x01; //定时器工作方式1,启用T0定时器, GATE位为0,用TCON的TR0控制T0定时器的启动 //设置定时器的初始计数值 //计算方法 //假设定时器为1ms,一个机器周期为 1/单片机的晶振频率 即: 1/12M = 1us //而1个机器周期 = 12个时钟周期 所以: n x 机器周期 = 1ms ===> n x 1us = 1ms //所以n = 1000,也就是经过1000个机器周期,定时器要溢出(从0开始计数) //所以定时器的初始值为65535 - 1000 + 1 = 64536 ===> 0xFC18 TH0 = 0xFC; TL0 = 0x18; EA = 1; //总中断开关 ET0 = 1; //T0中断 TR0 = 1;//启动T0定时器}void trigger_timer0() interrupt 1{ static u16 i = 0; TH0 = 0xFC; TL0 = 0x18; i++; if( i == 1000 ) { //1秒 i = 0; LED = ~LED; }}void main(){ timer_init(); while( 1 );}

 

转载地址:http://xykjm.baihongyu.com/

你可能感兴趣的文章
xtrabackup原理
查看>>
windows server 2012显示桌面图标
查看>>
pickle模块
查看>>
AWStats扩展GeoIP
查看>>
centos安装nagios服务(测试可用)
查看>>
Sharepoint 2013企业内容管理学习笔记(一) 半自动化内容管理
查看>>
httpd之apache服务器配置
查看>>
Redhat Linux配置samba服务
查看>>
深入分析Windows和Linux动态库应用异同
查看>>
apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
查看>>
在windows 2008/2012中配置RADIUS 客户端计算机上网WiFi 认证
查看>>
Windows 2008R2平台: Exchange 2010安装部署条件
查看>>
expect脚本与shell脚本相结合
查看>>
HA高可用的arp问题及ARP企业级故障案例介绍
查看>>
saltstack的探索-利用脚本增加用户
查看>>
linux磁盘分区2
查看>>
JQuery动画
查看>>
利用Toad for Data Analysts软件生成查询语句
查看>>
docker compose 基础
查看>>
Row Cache lock Problem
查看>>