求助:定时器中断的写法!!在线等

lzzqh 2007-04-28 06:22:09
题目:用定时器0实现 1个LED 灯 2秒钟 亮一次,然后熄灭,循环。 亮和灭 间隔都是2秒。 时钟 12MHZ。
...全文
418 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
comeng 2007-05-15
  • 打赏
  • 举报
回复
#include<reg51.h>
#define uchar unsigned char

uchar counter=0;
sbit P1_0=P1^0;

/*定时器0方式1定时10ms,每次中断计数200次再让灯反相*/
time0() interrupt 1
{ TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
if(++counter==200)
{ P1_0=!P1_0;
counter=0;
}
}

main()
{ TMOD=0X01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
do{}while(1);
}

调试过,没问题。
karlzheng 2007-05-14
  • 打赏
  • 举报
回复
楼上的能不能用C改写一下。汇编难懂啊
cxj2008 2007-04-30
  • 打赏
  • 举报
回复
用定时器0实现 1个LED 灯 2秒钟 亮一次,然后熄灭,循环。 亮和灭 间隔都是2秒。 时钟 12MHZ。
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTERR
ORG 0060H
MAIN: MOV R0,#28H ;设置循环40次,中断在0.05S时产生,用R0循环40次 得到题目所要时间 2S
MOV TMOD,#01H
MOV TH0,#3CH ;设置产生0.05S的中断初值
MOV TL0,#0B0H
MOV P2,#0FEH ;(实验LED为共阳极)先点亮P2.0的LED 2S
SETB EA ;允许中断
SETB ET0
SETB TR0 ;定时器起动寄存器开启,定时器开始工作
SJMP $

;中断子程序实现在P2.0口输出周期为4S的方波用于点亮LED
;子程序名为:INTERR
;程序清单:
ORG 0100H
INTERR: MOV TH0,#3CH
MOV TL0,#0B0H ;赋初值
DJNZ R0,LP ;当循环40次 延时达到2S时,对P2.0取反
CPL P2.0
LP: RETI
END

实验过了,没问题 !!!!
lbing7 2007-04-29
  • 打赏
  • 举报
回复
这种问题自己看书去!!!

StudyBoy_3w 2007-04-28
  • 打赏
  • 举报
回复
是不是要非常准确的啊 1us也不能差?? 如果不是 我觉得可以用一个定时器0 好像做时钟那样做就可以了把 2s后LED=!LED
wantieee 2007-04-28
  • 打赏
  • 举报
回复
自己计算一下啊!不够就把一个计时器输入设为外部,这个外部输入可以在另一个计时器的中断里通过CPL指令产生,就可以了!

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧