历史上的今天
今天是:2025年05月13日(星期二)
2018年05月13日 | 51单片机定时器中断程序
2018-05-13 来源:eefocus
程序运行开始,A灯先亮5秒,然后灭了到B灯亮5秒,B再灭再到C灯亮5秒,C灭,程序结束,不再运行。这程序该怎么写?用定时器精确定时……晶振11.092MHZ。
#include "REG52.H"
/*
*
*/
sbit LED_A = P1^0;
sbit LED_B = P1^1;
sbit LED_C = P1^2;
unsigned char TIME_BASE;
unsigned char MACT_ENDB;
unsigned char Rece_Errp;
/*
* 定时器初始化
*/
void SystemInit(void)
{
TMOD = 0x01;
TH0 = (65536 - 45872) / 256; // 定时50ms //晶振:11.0592MHZ
TL0 = (65536 - 45872) % 256;
ET0 = 1;
TR0 = 1;
EA = 1;
}
int main(void)
{
SystemInit();
while(1)
{
/* 程序一开始上电Rece_Errp = 0 定时器5秒加一次 */
if(Rece_Errp == 0)
{
LED_A = 0; // A亮5秒
LED_B = 1; // B是灭
LED_C = 1; // C是灭
}
/* 判断是否5秒时间到 */
else if(Rece_Errp ==1)
{
LED_A = 1; // A是灭
LED_B = 0; // B亮5秒
LED_C = 1; // C是灭
}
else if(Rece_Errp == 2)
{
LED_A = 1; // A是灭
LED_B = 1; // B是灭
LED_C = 0; // C亮5秒
}
else
{
LED_A = 1; // A是灭
LED_B = 1; // B是灭
LED_C = 1; // C是灭
while(1); // 程序运行到这里停止
}
}
}
void Timer0_IRQ(void) interrupt 1
{
TH0 = (655365 - 45872) / 256;
TL0 = (655365 - 45872) % 256;
/* 进入中断50ms +1次 */
TIME_BASE++;
if(TIME_BASE == 20) // 20ms * 50ms = 刚好等于1000ms 也就是1秒
{
TIME_BASE = 0;
MACT_ENDB++; // 一秒加一次
if(MACT_ENDB == 5) // 等于刚好5秒时间到
{
MACT_ENDB = 0;
Rece_Errp++; // 用来切换LED A、B、C5秒灭
}
}
}
下一篇:中断及定时器实现时钟功能
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 本人不才 看了几个题目 有几个有点想法的 希望和大家能够相互交流 有问题的在这里问吧 我尽量回答 也有不会的 答不出来 别骂我就行 呵呵 … 查看全部问答> |
|
LPC1114中文手册,非周工版,是武汉理工大学UP团队翻译的,另一种风味,或许对你有用哦,来自COOCOX网站。 [ 本帖最后由 zhaojun_xf 于 2010-7-13 18:55 编辑 ]… 查看全部问答> |
|
网上找了很多资料,但是为什么都编译通不过,错误如: E:\\workplace\\evc2\\evc2Dlg.cpp(216) : error C2664: \'ActivateKBHook\' : cannot convert parameter 2 from \'long (int,unsigned int,long)\' to \'long (__cdecl *)(int,unsigned int, ...… 查看全部问答> |
|
本人新手,见笑了! .extern main .text .global _start _start: @****************************************************************************** @ 中断向量,本程序中,除Reset和HandleIRQ外,其它异常都没有使用 @****************** ...… 查看全部问答> |
|
我用PB5定制中文ce5.0,在platform/setting2选项中增加中文选项,并设为默认语言,添加中文字库到映像中,但是 不显示中文,只显示\"___\",用远程工具查看,可以看到中文显示,请问怎样解决,多谢.… 查看全部问答> |
|
在网上找了一下,似乎用GDB调试的话,需要用到TCP/IP。 但是我的目标机没有TCP/IP。 我有JTAG调试器 也有REALVIEW的 ULINK 调试器 不知道能不能在LINUX下用以上的调试器。… 查看全部问答> |
|
在看MCS51单片机原理与应用时,在ADC0809的接口部分,举了个例子,P2.7和RD与非后接的ADC0809的ALE和START,分配的口地址为7FFFH,即:0111111111111111B,只要2.7为0即可,那么0000111100000000B是不是呢?比如外部扩展了数据存储器,如果我执行的MO ...… 查看全部问答> |
|
iar442+st-link是否在xp的user账户权限下面不能使用? 我在用ek-stm32F那个板子时,发现在user权限账户下面好像不能连接成功。操作系统我用的是windows xp+sp3的,然后我转到了管理员权限的账户下面,就能正常的使用了。图片为出错提示:… 查看全部问答> |
|
各位大侠: 请教个问题,我使用WRB0505YMD-6W 把7.5V的锂电池转换成5V的电源给手机充电,输入端接一个10uF/16V的电容,输出端接一个100uF/16V的电容,空载时有38°左右,加载后有50°左右,是否正常?能不能 ...… 查看全部问答> |




