您的位置 首页 报告

一个关于单片定时器中止的典型过错

分析一下以下程序以下程序为什么会间断的现实40(本想编成40S倒计时)提示:问题出在延时子程序#includereg51.h>#defineucharunsigned…

剖析一下以下程序以下程序为什么会连续的实际40(本想编成40S倒计时)提示:问题出在延时子程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit p14=P1^4;
sbit p13=P1^3;
uint i,t,z=50;
void delay()
{
while(z–); }
unsigned char code tab[] =
{
0XC0,//;0
0XF9,//;1
0XA4,//;2
0XB0,//;3
0X99,//;4
0X92,//;5
0X82,//;6
0XF8,//;7
0X80,//;8
0X90,//;9
};
void main()
{i=40;
t=0;
TMOD=1;//设置守时器0为工作方式1
TH0=(65536-46080)/256;//守时50ms高8位求模
TL0=(65536-46080)%256;//守时50ms低8位求余
EA=1;//开总中止
ET0=1;//守时器0中止
TR0=1;//发动守时器0
while(1)
{
if(t==20)//50ms中止20次
{
t=0;
i–;//倒计时总数每秒减1
}
if(i>0)
{
p14=0;//数码管个位位选封闭
p13=1;//数码管十位位选选通
P0=tab[i/10];//显现十位数据
delay();
P0=0xff;//封闭数码管段选
p14=1;//数码管个位位选选通
p13=0;//数码管十位位选封闭
P0=tab[i%10];//显现个位数据
delay();
P0=0xff;//封闭数码管段选
}
else{i=40;}
}
}

void timer0() interrupt 1//守时器0中止进口
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/266612.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部