编程采用定时器T0定时中断,使LED0~LED7间隔60毫秒逐个循环点亮 fosc=8MHZ

2024-11-04 07:47:50
推荐回答(5个)
回答1:

你不觉得60ms太短了吗?

org 0h
ljmp 0300h

org 000bh
ajmp time0

org 0300h

mov a,#0feh
mov p1,a

mov th0,#063h
mov tl0,#0c0h ;晶振8Mhz 每周期1.5us,60ms需要40000个周期,65536-40000=63c0h

mov tmod,#00000010b
setb ea
setb et0
setb tr0

ajmp $

time0:
clr tf0
rl a
mov p1,a
mov th0,#063h
mov tl0,#0c0h
reti
end

回答2:

#include
#deifne uchar unsigned char
#define uint unsigned int
uchar temp = 0xfe;
void init_timer0() // 初始化定时器
{
TMOD = 0x01; // 设置为每50ms中断一次
TH0 = 0x63;
TL0 = 0xc0;
ET = 1;
EA = 1;
}
void main()
{
init_timer0();
while(1);
}
void timer0() interrupt 1 using 1
{
TH0 = 0x63;
TL0 = 0xc0;
P1 = temp;
temp <<= 1;
temp |= 0x01; // 包含这行的话是逐个点亮,前一个熄灭.
}

回答3:

有些不明白:
60毫秒,是显示LED0~LED7中的一个位,还是把LED0~LED7都显示一遍?
另外:
60毫秒,这个时间,长、短不合适,一秒钟,有16遍,这将会闪烁的受不了。
再长一些,就看到流水灯的效果;
再短一些,就看到8个LED同时稳定显示。

回答4:

这个很简单,在定时中断处理函数中实现将LED0~LED7逐个点亮的功能就行了

回答5:

写这分太少,哈哈