历史上的今天
今天是:2025年01月31日(星期五)
2019年01月31日 | PIC16F877A定时器1实验
2019-01-31 来源:eefocus
PIC16F877A单片机的Timer1是16位的,我们利用此定时器实现一个10ms的定时,在定时中断里我们再判断1s是否到了,到了之后将LED灯状态取反。
#include
#define u8 unsigned char
#define u16 unsigned int
__CONFIG(0xFF32);
#define LED PORTD
char Counter=0;
void timer1_init()
{
T1CKPS0=1; //1:8
T1CKPS1=1;
TMR1CS=0; //定时器模式
TMR1IE=1;
TMR1H=0xfb; //10ms@4MHz
TMR1L=0x1e;
TMR1ON=1;
PEIE=1;
GIE=1;
}
void main(void)
{
TRISD=0x00;
LED=0xff;
timer1_init();
while(1);
}
void interrupt ISR(void)
{
if(TMR1IF)
{
TMR1IF=0;
TMR1H=0xfb;
TMR1L=0x1e;
if(++Counter>100-1)
{
LED=~LED;
Counter=0;
}
}
}
程序还是比较简单的,这里有个需要特别说明就是定时器的初始值是怎么计算的问题:
系统时钟是经过4分配后才给外设的,所以Timer1的时钟就是1Mhz(单片机外接4Mhz晶振),
假设程序里配置为8分频,那么此时Timer1的时钟
是 : 1000000/8=125000Hz
所以要想实现10ms定时,可以这样计算, 10ms就是1s的百分之一,定时器1的百分之一时间内计数值就是1250,
由于定时器是从65535变成0的时候才会产生中断,所以我们要让初始值变成65536-1250=64286=0xFB1E
如果你觉得我说的很啰嗦那就直接看公式吧:

史海拾趣
|
PADS(POWERPCB) 几乎是高速电路板必备的电路板设计软件了. 很多方面比PROTEL优秀, 我找到了一个视频教程, 是BT的, 所以要下载人越多,速度越快, 附件是BT的种子文件, 大家一起下载学习吧.… 查看全部问答> |
|
是WINCE5的SDK,用IImagingFactory IImage接口, 报错是 dcdvDlg.obj : error LNK2001: unresolved external symbol _CLSID_ImagingFactory dcdvDlg.obj : error LNK2001: unresolved external symbol _IID_IImagingFactory 我已 ...… 查看全部问答> |
|
EE-FPGA-V1.0焊接和调试 今天终于完成了,赶紧上来发一下感受。 焊接 1. 根据版主chenzhufly 的提供的BOM表,代购的原件进行焊接。难焊接的还是那最大的IC,起初固定住四个角,然后一边焊接一边拖。焊接好两边,焊接第三边的时候发现其中两 ...… 查看全部问答> |
|
开关电源由于体积小、重量轻、效率高等优点,应用已越来越普及。MOSFET由于开关速度快、易并联、所需驱动功率低等优点已成为开关电源最常用的功率开关器件之一。而驱动电路的好坏直接影响开关电源工作的可靠性及性能指标。一个好的MOSFE ...… 查看全部问答> |
|
最近刚开始学习单片机,都是自学的,看看视频什么的,看看书,现在开始动手开发板了。刚开始就遇到麻烦了,本人笔记本没有com口,所以无奈之下淘宝了一个USB转com数据线,里面有驱动,回来就安装了,驱动从计算机设备管理显示正常,装完之后是com13 ...… 查看全部问答> |




