历史上的今天
今天是:2025年10月11日(星期六)
2022年10月11日 | 89C52单片机 计时器 中断的使用
2022-10-11 来源:csdn
1.计时器
因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12×10^6)=1us,也就是说计数器没1us计数一次。
一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65.536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒。
那么T=1/(X/12)就是一个机器周期 ,(65536-Z(初值))*T就是定时的时间
比如是12M的晶振那么 设置TMOD=0x01, 计时器模式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;就是设置了50ms的定时
2、计时器中断 1S 闪光灯
我们使用计时器中断来设置 1S 闪光灯
#include sbit LED1 = P1^0; //位定义 LED1硬件接口 int num = 0; //中断服务特殊功能寄存器配置 void init() { TMOD = 0x01; //定时器16为计数工作模式 TH0 =(65536-50000)/256;; TL0 =(65536-50000)%256; //50ms 定时 ET0 = 1; //开定时器0中断 TR0 = 1;//启动定时器0 EA = 1; //开总中断 } //定时器0中断服务程序 不用软件延时 void timer0() interrupt 1 { TH0 =(65536-50000)/256;; TL0 =(65536-50000)%256; //50ms 定时 模式1非自动重装需要手动重装再次定时 num++; if (num == 20) { // 20 * 50ms 为 1s num = 0; LED1 = ~LED1; } } void main() { LED1 = 0; //拉低IO点亮LED1 init();//初始化定时器0 while(1);//程序停留 } 文档参考: 关于51单片机的定时器T0、T1总结 http://www.51hei.com/bbs/dpj-103111-1.html 
上一篇:89C52单片机 独立按键 示例
史海拾趣
|
程序要实现的功能: 1.按下case 0X0E对应的按键后(不松开按键,按住时间>5S),要M1启动5S后,M2再启动,松开按键后M1,M2同时停止 2.按下case 0X0E对应的按键后(不松开按键,按住时间… 查看全部问答> |
|
程序中有两个任务,分别是收和发,收的优先级高。在接收到特写的数据后,用msgQSend()转向发任务进行相关处理。但是在发任务中又需要收任务提供一些支持,比如发了一定的数据包后需要对方回应,而这个回应是收任务处理的,收到回应后发任务才能 ...… 查看全部问答> |
|
聘PC机驱动开发 (与硬件进行通讯,最好嵌入式方面也有一定基础) 开发WINDOWS 2000/xp/vista 串口 USB 虚拟网卡等驱动开发。要求比较高,入门级的勿尝试。 有意者可留下联系方式,我会与你联系。 散点分,^_^。… 查看全部问答> |
|
以下是我写的一个用timer2做串口波特率触发器的程序。 与PC通讯,接收回来的数据和发送的不一样,好象根本没执行中断发送部分。 struct SEND_STRUCT{ &n ...… 查看全部问答> |
|
呵呵,如果哪位见识过DSP Builder高级库的朋友想必会它的功能折服!大概提供了几十个demos涵盖很多领域,几乎每个例子都可以自动生成一个用户IP下面是利用DSP Builder自动生成NCO设计的IP… 查看全部问答> |
|
【连载】【ALIENTEK 战舰STM32开发板】STM32开发指南--第三十八章 PS2鼠标实验 第三十八章 PS2鼠标实验 PS/2作为电脑的标准输入接口,用于鼠标键盘等设备。PS/2只需要一个简单的接口(2个IO口),就可以外扩鼠标、键盘等,是单片机理想的输入外扩方式。ALIENTEK战舰STM32开发板也自带了一个PS/2接口,可以用来驱动标 ...… 查看全部问答> |




