关于51单片机定时器问题

/利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,一秒钟内,使8个指示灯依次一个一个闪动,(8个灯依次亮一遍为一个周期,即1秒钟),此时,P2口接静态数码管... /利用定时/计数器T1产生定时时钟,由P1口控制8个发光二极管,一秒钟内,使8个指示灯依次一个一个闪动,(8个灯依次亮一遍为一个周期,即1秒钟),此时,P2口接静态数码管,1秒计一个数,计到F从0 再开始。下面是我写的程序,达不到要求,数码管计数特别快,LED8一直是亮的,不知道什么原因。(PS:我说清楚没?)希望大神指出错误,应该如何改正 谢谢了!
#include<reg51.h>
#include <intrins.h>

#define uchar unsigned char

uchar temp;a ; b;
b=0;
uchar code table[ ]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void main()
{
TMOD=0x01;
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
EA=1;ET1=1;TR1=1;
temp=0x01;//二极管高电平点亮
P1=temp;
while(1)
{
}
}

void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)/256;
a++;
if (a==20)
{
a=0;
temp=_crol_(temp,1);
P1=temp;
P0=~table[b];//数码管是共阳极的
b++;
if (b>15)
b=0;
}
}
展开
 我来答
烟火夜空
2014-09-05 · TA获得超过6623个赞
知道大有可为答主
回答量:1678
采纳率:93%
帮助的人:563万
展开全部
第一 ,变量 定义 uchar temp;a;b; 中间的 2个 冒号 应该是 逗号(uchar tmep,a,b;),使用 分号的俺还真没 试过;
第二,定时器的 2处 初始化值 均错误,TL1=(65536-50000)%256,是 % 运算,不是 / 运行,TH1 是正确的。
第三,按12MHz 晶振计算,定时器为 50ms 中断,程序 的内容 是 1s 数码管 更新一个数0-F,1s 流动 一个 LED灯,一个周期 是 8s 而不是 1s。想要 周期为 1s 的话,定时器的时间应该 是 125ms,一次性 都 定时不到,就只能是 定时 25ms,分5次,为一 颗灯 的时间,40次 为一个数码管 数值 的时间。
更多追问追答
追问
前两条是我粗心了,谢谢指出来!
第三条是,我是想让8个灯亮一遍为1秒,可能我上面表达的不清楚,谢谢啦!
我刚刚改了,可是还是达不到我要的效果,发光管闪的更快,数码管也变快了,哪里出问题了呢
追答
LZ 修改了,是不是 该把修改 部分的 程序 贴出来啊??
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天命9t渨L
2014-09-05 · 超过56用户采纳过TA的回答
知道答主
回答量:102
采纳率:100%
帮助的人:102万
展开全部
只要TRX为1计数不会停止?

不会停。

执行中断服务程序后,各定时器是否继续计数?
不受影响。

在执行T0中断服务程序时,T1定时器溢出,由于优先级,不能执行T1中断服务程序,此时T1定时器各位如何变化?
继续。

定时器溢出后是否自动清零?
清。
希望能解决您的问题。
追问
我使用的是定时计数器T1,没有用T0啊!能找到什么错误吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式