打印

请教个弱问题

[复制链接]
1586|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
she0800|  楼主 | 2007-8-15 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在在学习C51,自己搭了个小板子
定时器0,1,2都可以使用,中断服务程序可以执行
现在想使用89C52的外部中断0,却无法执行中断程序,
烧写至单片机和使用软件模拟均无法进入中断程序(俺没仿真机55)

相关程序如下
谢谢!!

#include<AT89X52.H>
#define uchar unsigned char
#define uint  unsigned int

sbit    tk = P3^6;
sbit    sk = P3^2;

uint    show_time,hide_time;
bit    flag;

void delay(uchar); 

void main(void)
{
    

    IT0=0;                //边沿触发方式
    IE0=1;                //使能外部中断INT0
    
    IT1=0;                //电平触发方式
    IE1=1;                //使能外部中断INT0        

    EA=1;                //全局中断使能

    while(1)
    {
        delay(10);
    }
    
 
}

void delay(uchar z)
{
    uchar x,y;
    while(z--!=0)
    { 
        for(x=0;x<10;x++)
        for(y=0;y<100;y++);
    }
}


void inte0_service(void) interrupt 0        //外部中断0中断服务程序
{
    

    IT0=0;                //边沿触发方式
    IE0=1;                //使能外部中断INT0
    delay(100);    
    tk=!tk;

}



相关帖子

沙发
she0800|  楼主 | 2007-8-15 14:40 | 只看该作者

主要问题

要使用外部中断0的
除了IT0,IE0和EA要设置外,还有什么东西需要设置的吗?

使用特权

评论回复
板凳
农民讲习所| | 2007-8-15 14:41 | 只看该作者

你可以自己用KEILC的模拟调试先调试下

自己模拟条件的产生。

使用特权

评论回复
地板
ayb_ice| | 2007-8-15 14:44 | 只看该作者

"IE0=1; //使能外部中断INT0"有问题吧...

使能外部中断INT0应该是EX0 = 1;IE0是中断标志吧...

使用特权

评论回复
5
zhaohe2001| | 2007-8-15 14:47 | 只看该作者

在中断程序中加EA=1

使用特权

评论回复
6
农民讲习所| | 2007-8-15 14:56 | 只看该作者

中断程序中不要家EA=0,1之类的废话。

“IT0=0;                //边沿触发方式
IE0=1;                //使能外部中断INT0”
之类都是废话。因为不可能发生改变。

类似常见废话还有在中断中:
ES = 0;
....
ES = 1;
因为进入中断自身不能再重入了。

使用特权

评论回复
7
she0800|  楼主 | 2007-8-15 14:58 | 只看该作者

试了,

我现在就是用keil模拟,
在中断程序中加EA=1,
然后在Peripherals的IO Ports里面改P3.2的端口电平
程序仍然运行不到中断服务程序中的断点,
昏,这到底是什么原因

四年以前我用汇编的时候用的挺好,可惜当时程序早不知道到哪去了

使用特权

评论回复
8
she0800|  楼主 | 2007-8-15 15:00 | 只看该作者

呵呵,这两条本来就是废话程序

这两条语句相当于空操作
“IT0=0;                //边沿触发方式
IE0=1;                //使能外部中断INT0”


主要用于我放一个断点看程序有没有运行到这个地方来的

使用特权

评论回复
9
农民讲习所| | 2007-8-15 15:01 | 只看该作者

EX0 = 1;

使用特权

评论回复
10
gjg191| | 2007-8-15 15:08 | 只看该作者

dd

应该是EX0=1;才对
#include<AT89X52.H>
#define uchar unsigned char
#define uint  unsigned int

sbit    tk = P3^6;
sbit    sk = P3^2;

uint    show_time,hide_time;
bit    flag;

void delay(uchar); 

void main(void)
{
    

    IT0=0;                //边沿触发方式
    IE0=1;                //使能外部中断INT0
    
    IT1=0;                //电平触发方式
    //IE1=1;                //使能外部中断INT0        
    EX0=1;
    EA=1;                //全局中断使能

    while(1)
    {
        delay(10);
    }
    

}
void delay(uchar z)
{
    uchar x,y;
    while(z--!=0)
    { 
        for(x=0;x<10;x++)
        for(y=0;y<100;y++);
    }
}


void inte0_service(void) interrupt 0        //外部中断0中断服务程序
{
    

    IT0=0;                //边沿触发方式
    IE0=1;                //使能外部中断INT0
    delay(100);    
    tk=!tk;

}这样就ok拉!!

使用特权

评论回复
11
she0800|  楼主 | 2007-8-15 15:08 | 只看该作者

感谢农民讲习所大哥!!

偶把IE0=1;误当做中断使能了,失误!!

感谢大家!!

使用特权

评论回复
12
she0800|  楼主 | 2007-8-15 15:09 | 只看该作者

同感谢gjg191和ayb_ice!

使用特权

评论回复
13
zhushuping| | 2007-8-15 15:18 | 只看该作者

同意4楼的

EX0可以不写

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

19

帖子

0

粉丝