dalaba
驱动小牛
驱动小牛
  • 注册日期2001-09-12
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望11点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:4312回复:7

求教:怎样在一个keil c工程中加一个int0中断处理函数?

楼主#
更多 发布于:2005-01-10 09:53
怎么用c51声明int0的中断函数?中断向量怎么写?

最新喜欢:

hanwlhanwl
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-10 13:45
中断分配:
 编号:   中断名称    中断地址    
  0        INT0       0003h
  1         T0        000Bh
  2        INT1       0013h
  3         T1        001Bh
  4        TI、RI     0023h
中断函数编写以T0为例
void Timer0(void) interrupt1 using1//用第一组寄存器

{
    th0=.....;
    tl0=.....;
     .
     .
     .
}

l=z=l 我听说,灌水是使分数快速增长的有效方法
dalaba
驱动小牛
驱动小牛
  • 注册日期2001-09-12
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望11点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-14 04:34
谢谢关注,还是有点不清楚,

中断分配:
编号: 中断名称 中断地址
0 INT0 0003h
1 T0 000Bh
2 INT1 0013h
3 T1 001Bh
4 TI、RI 0023h

这样的格式不符合c51语法吧?
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-14 12:13
void Timer0(void) interrupt1 using1//用第一组寄存器

{
th0=.....;
tl0=.....;
.
.
.
}
interrupt 1 using 1
就说中断号为1 即 T0中断,采用第一组寄存器!
l=z=l 我听说,灌水是使分数快速增长的有效方法
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-14 12:15
void Int0(void) interrupt0 using1
不就是int0中断吗!
l=z=l 我听说,灌水是使分数快速增长的有效方法
lsn_061
驱动老牛
驱动老牛
  • 注册日期2002-05-09
  • 最后登录2006-10-06
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望261点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-14 14:38
这个啥意思:


void serial () interrupt 4 using 3
{
    if(RI)
    {
        unsigned char ch;
        RI = 0;
        ch=SBUF;
        if(ch>127)
        {
             count3=0;
             inbuf1[count3]=ch;
             checksum= ch-128;
        }
        else
        {
             count3++;
             inbuf1[count3]=ch;
             checksum ^= ch;
             if( (count3==(INBUF_LEN-1)) && (!checksum) )
             {
                 read_flag=1;  //如果串口接收的数据达到INBUF_LEN个,且校验没错,
                               //就置位取数标志
             }
        }
    }
}
[img]http://bbs.zndev.com/image/medal/5.gif[/img]
lzl
lzl
驱动大牛
驱动大牛
  • 注册日期2001-09-11
  • 最后登录2010-06-22
  • 粉丝1
  • 关注0
  • 积分127分
  • 威望48点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-15 09:14
这个啥意思:


void serial () interrupt 4 using 3 /*4号中断,即串口,
                      第四组寄存器(RS0=1,RS1=1)*/
{
    if(RI)             //sbuf满数据
    {
        unsigned char ch;
        RI = 0;
        ch=SBUF;
        if(ch>127)
        {
             count3=0;
             inbuf1[count3]=ch;
             checksum= ch-128;
        }
        else
        {
             count3++;
             inbuf1[count3]=ch;
             checksum ^= ch;
             if( (count3==(INBUF_LEN-1)) && (!checksum) )
             {
                 read_flag=1;  //如果串口接收的数据达到INBUF_LEN个,且校验没错,
                               //就置位取数标志
             }
        }
    }
}
 
l=z=l 我听说,灌水是使分数快速增长的有效方法
nibblebit
驱动牛犊
驱动牛犊
  • 注册日期2004-07-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-04 13:15
在.h文件里定义:
/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR 0  /* 0x03 External Interrupt 0 */
#define TF0_VECTOR 1  /* 0x0B Timer 0 */
#define IE1_VECTOR 2  /* 0x13 External Interrupt 1 */
#define TF1_VECTOR 3  /* 0x1B Timer 1 */
#define SIO_VECTOR 4  /* 0x23 Serial port */

#define TF2_VECTOR 5  /* 0x2B Timer 2 */
#define EX2_VECTOR 5  /* 0x2B External Interrupt 2 */

在.C文件里用到:
void int0_isr(void) interrupt IE0_VECTOR

详细的说明可在Keil C51编程手册里找到。
游客

返回顶部