51单片机c语言程序代码分析。本人是初学者,程序是自己写的,一直有错误。求高手赐教。还望能多给我介绍点 20
还望能多给我介绍点这方面的经验或建议。谢谢了。主要是定时的那部分整不明白啊。在哪设定定时器的中断介入。#include<reg52.h>#defineuintunsign...
还望能多给我介绍点这方面的经验或建议。谢谢了。
主要是定时的那部分整不明白啊。在哪设定定时器的中断介入。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dux=P2^6;
sbit wex=P2^7;
uint a,z,numw,numd;
void init();
void delay (uint z);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,};
//0x7f,0x6f,0x77,0x7c,
//0x39,0x5e,0x79,0x71};
uchar code tablew[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
void main()
{
init();
while(1)
{
//delay(z=500);
//a++;
if(a==20)
{
a=0;
wex=1;
P0=tablew[numw];
wex=0;
numw++;
if(numw==8)
{
numw=0;
}
dux=1;
P0=table[numd];
dux=0;
numd++;
if(numd==8)
{
numd=0;
}
}
}
}
void init()
{
a=0;
numd=0;
numw=0;
//wex=0xfe;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;//开定时器中断
TR0=1;
TR1=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
} 展开
主要是定时的那部分整不明白啊。在哪设定定时器的中断介入。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dux=P2^6;
sbit wex=P2^7;
uint a,z,numw,numd;
void init();
void delay (uint z);
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,};
//0x7f,0x6f,0x77,0x7c,
//0x39,0x5e,0x79,0x71};
uchar code tablew[]={
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
void main()
{
init();
while(1)
{
//delay(z=500);
//a++;
if(a==20)
{
a=0;
wex=1;
P0=tablew[numw];
wex=0;
numw++;
if(numw==8)
{
numw=0;
}
dux=1;
P0=table[numd];
dux=0;
numd++;
if(numd==8)
{
numd=0;
}
}
}
}
void init()
{
a=0;
numd=0;
numw=0;
//wex=0xfe;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;//开定时器中断
TR0=1;
TR1=1;
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
} 展开
4个回答
展开全部
没看到定时中断子函数?你写成外中断了。
void t0int() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}
还有,你的显示部分好像也写得不对,1秒钟才显示一位,应该是闪一下就没了。
void t0int() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}
还有,你的显示部分好像也写得不对,1秒钟才显示一位,应该是闪一下就没了。
追问
谢谢你回答我的问题,我想细问一下那个显示的问题。怎么利用定时器中断延时显示啊?
追答
为什么 要用定时中断延时显示呢?显示延时只要1ms就够了,还是用循环延时就好了吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
中断号没搞对
void exter0() interrupt 0
如果是定时器中断的话要改为:
void exter0() interrupt 1
void exter0() interrupt 0
如果是定时器中断的话要改为:
void exter0() interrupt 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚才拿keil debug了一下你的程序。因为你在主函数里注释了delay和a++,以造成了a一直为0啊。我不知道你的硬件是什么,还有你写的这个程序是要实现什么功能呢?我编译了你上面的那个程序,能通过啊,就是只有1个warning。 如果把注释去了,warning 消失,注释了delay(),就是没用上该函数,所以才有一个警告的。你说说你程序的具体表现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询