题目:利用定时器ti产生定时时钟,由P1口控制8个发光二极管,使八个指示灯依次一个一个闪动,闪动频率为10次每秒(8个灯依次亮一遍为一个周期),循环。我写的程序是这样的,大家看下是什么问题(频率可能不对):
#include
#include
#define uchar unsigned char
#define uint unsigned int;
uint tt;
uint temp;
void main()
{
temp=0xfe;
TMOD=0x10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
P1=0xff;
}
}
void flash() interrupt 3
{
P1=temp;
if(tt%10==0)
{
temp=_irol_(temp,2);
tt=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
}
谢谢了。我做出的结果跟题目要求不一样。
乍一看你的程序,小灯可能根本就不会闪。要么全灭,要么全亮。额,好像是全灭。
没仔细看,也许说的不对。 本帖最后由 sjtitr 于 2014-4-11 18:56 编辑
while(1)
{
P1=0xff;
}
这段会战满P1状态.
P1=0xff;后加延时,再看temp的值得变化是否正确
while的时候不是会有定时器中断吗?中断的时候就进行移位了,还需要延时?
在沾满的时候不是有中断吗?就去执行中断了吧?中断的时候就移位亮灯了吧?
你给TH0 TL0赋值是定时器0 但是你打开的是TR1定时器1 把前面改为TH1 TL1 试试看
引用: ccc00 发表于 2014-4-11 20:20
你给TH0 TL0赋值是定时器0 但是你打开的是TR1定时器1 把前面改为TH1 TL1 试试看
是这样的谢谢啊,我是刚刚学习,好多地方不够完善,以后还得多多学习,积累经验,谢谢你啊
引用: ienglgge 发表于 2014-4-11 20:19
你不停的写 P1=0xff;
进入中断移位后,退出中断。P1又被你改回去了。
我要做的是闪的。是我太粗心了,那个定时器写错了,还是谢谢你
TMOD=0x10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
T0? T1?