C51中断程序,程序用Keil4编写,用Proteus仿真

这是一个显示时间的程序,用proteus仿真,不知道为什么,就是不发生中断。显示的时间一直卡在那里,动都不动。
#include <stdio.h>
#include <reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit LE = P3^6;
uint count = 0;//中断计数,40次中断为1秒
uchar Hour = 0, min = 0, sec = 0;//时,分,秒

void Delay (void);
void Display(void);
void Init(void);

void Delay(void) //延时程序
{
uchar i;
for (i = 255; i > 0; i--);
}

void Display(void) //4位数码管显示程序,显示小时和分钟,这个子函数应该没有问题
{
uchar i = 0;
uchar num[10] = {0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F/*9*/};
uchar wei[4] = {0xf7, 0xfb, 0xfd, 0xfe};
uchar timenum[4] = {0, 0, 0, 0};
timenum[0] = Hour / 10, timenum[1] = Hour % 10, timenum[2] = min/ 10, timenum[3] = min% 10;
LE = 1;
while(1)
{
for(i = 0; i < 4; i++)
{
P2 = wei[i];
P0 = num[timenum[i]];
Delay();
}
}
}

void Init (void) //中断初始化程序
{
EA = 0;
TMOD = 0x01; //模式1
TH0 = 0x3c; //初值15536,每25000us(25ms)产生一次中断,40次中断为1秒 (晶振24MHz)
TL0 = 0xb0;
TR0 = 1; //启动定时器0
ET0 = 1; //允许定时器0中断
TF0 = 0;
EA = 1;
}

int main (void)
{
Init();
while(1)
{
Display ();
}
return 0;
}

void TimeInterrupt(void) interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0;
count++;
if (count >= 40)
{
count = 0;
sec++;
if (sec >= 60)
{
sec = 0;
min++;
if (min >= 60)
{
min = 0;
Hour++;
if (Hour >= 24)
{
Hour = 0;
}
}
}
}
}
还有就是每次仿真的时候Keil都提示这个,不中断是不是因为这个2K的代码限制造成的?

补充:后来我已经注册了,但还是不行。

出现这个原因是因为你的软件没有完全破解所致,推荐使用如图的破解工具,。网上有很多,或者我也可以发给你

追问

就是用的这个工具

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-30
你的keil还是评估版,代码长度不能超过2KB,可以找一个注册机,将keil注册成完全版,如果需要注册机和具体使用方法请继续追问本回答被网友采纳
第2个回答  2013-07-30
你为什么把TF0 设置成 0 啊!你把定时器都关了!还怎么可以定时啊!把这一行删去! TF0 = 0;追问

我只是在程序初始化的时候把溢出标志TF0清0了而已,要是溢出了TF0还可以被置1啊。
我试了,去掉了TF0 = 0这一行还是不行!
要不你在仔细看看,谢谢咯

第3个回答  2013-07-30
从你的提示信息看,你的代码受2k的限制,也就是,你的软件是试用版的追问

那我的问题是不是这外原因造成的吗?

追答

应该就是这个问题,你先处理好软件吧

追问

注册了,还是不行

追答

这个错误还有吗

追问

没有了,但还是不行啊。已经注册了,keil那个license management显示我可以用到2020年。

追答

下一步就是找程序的问题了,你把仿真软件和代码工程发给我,我给你调试,给你私信

追问

用QQ吗,我QQ:617!203!109,(去掉!)谢谢了

怎么用proteus来仿真51
1、首先我们打开Proteus软件,点击左边菜单栏的P按钮,然后再搜索框里输入80c51,选择第一个就是80c51单片机;2、然后在搜索框里面输入led,找到Optoelectronics,然后再里面选择LED-RED,红色的led,当然其他颜色也可以;3、接着我们点击鼠标右键可以选择led为合适的方向,方便我们的绘图;4、然后我们放上re...

怎样把51单片机程序烧录进proteus里
1、首先在电脑上用proteus软件打开目标文件。然后用鼠标左键双击51单片机图标,如图所示。然后在出现的窗口中,点击下图中的文件夹图标。然后在电脑文件夹中找到编译好的HEX文件导入。2、keil里编译时,设置输出文件为.HEX文件格式。然后在proteus中打开CPU属性,在程序设定栏填入HEX文件路径及名称(也可以通...

使用Keil与Proteus联合仿真调试单片机程序
1. 从官网获取并安装Proteus,建议安装在D盘的install文件夹,按照指示进行,安装完成后桌面上会出现快捷方式。2. 同时下载Keil安装包和注册机,新建文件夹安装。在Keil安装时,注意填写个人信息,最后通过注册机破解并获取序列号。3. 为了将Proteus和Keil关联,打开TOOLS.INI文件,添加TDRV11相关驱动信息,...

keil编程用proteus中仿真外部中断问题
类似的用按钮作外部中断信号的,一定要用下降沿有效申请中断才行的,这样才保证按下按钮只中断一次。而你用电平中断,只要按钮不释放就会不断地中断,这样在主程序和中断程序之间不停的转换,当然主程序速度就要慢了。而在中断程序中加无限循环是削足适履的作法,肯定是不行的,这样会只执行一次中断,但...

在keil中写好程序怎么放在proteus中运行
keil 编译生成一个后缀名后hex的文件 在proteus里面 双击芯片 浏览hex文件的所在目录 将其加载

proteus和keil怎么连起来用
我们首先在Keil中编写控制LED闪烁的程序代码,并编译生成.hex文件。然后在Proteus中搭建包含8051单片机和LED的电路图,并将.hex文件加载到单片机的属性设置中。接下来,我们配置Proteus和Keil的调试选项,将两者连接起来。最后,在Proteus中运行仿真时,我们可以看到LED按照程序设定的方式闪烁,同时可以在Keil中...

如何利用Proteus和keil做四位一体数码管的仿真?
protues画原理图 keil编程 protues加载编译文件仿真。

单片机汇编程序在keil中编译成功,但是Proteus中却仿真不了
编译成功 只能证明语法正确 可能你的硬件有问题,也可能程序就不对,单步执行一下吧。。看看 ,也可能protus的问题 以前我做数码管的动态显示。。就不行。。。放在开发板上就行。

(keli和Protus仿真软件)单片机中断实验程序代码,小部分有错误,求...
二、下面是修改过的程序,并按照题目的要求添加了注释 ORG0000HSJMPSTARORG0003HSJMPINT0SORG0013HSJMPINT1SORG0030HSTAR:MOVIE,#85H \/\/中断允许MOVTCON,#05H \/\/低电平触发中断MOVP3,#0FFH \/\/P3口拉高,为两个按钮服务SETBPX1 \/\/提高 INT1 的优先级ST0:MOVA,#1 \/\/立即数 1 送 A,准备...

【keil 51单片机proteus 仿真】这是个“嘀、嘀、……”报警声程序:在中...
你使用的定时器模式(TMOD =1)不会自动重载初值的。如果不重新赋值则下次计65535。51定时器有4中模式:工作模式0是13位计数器,其由一个高8位(0~7)计数器(TH0或TH1)和一个具有32位分频的低8位计数器中的(TL0或TL1)的低5位(0~4)组合成。工作模式1与模式0的区别在于计数的位数不同...

相似回答