51单片机定时器实现LED闪烁
要启用一个定时器,先要开启定时器,然后产生中断
系统中断:
初始化程序应完成如下工作:
对TMOD赋值,以确定T0和T1的工作方式。
计算初值,并将其写入TH0、TL0或TH1、TL1。
中断方式时,则对EA赋值,开放定时器中断。
使TR0或TR1置位,启动定时/计数器定时或计数。
#include <reg52.h> /************ 定时器+中断控制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 ); }
作者:ghostwu, 出处:http://www.cnblogs.com/ghostwu
博客大多数文章均属原创,欢迎转载,且在文章页面明显位置给出原文连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架