导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51中断函数在传递参数时候出错?谁能帮我看看,谢谢![qinr]

 *第26853篇: C51中断函数在传递参数时候出错?谁能帮我看看,谢谢!

  
楼 主:qinr 2004年10月19日10:56
 C51中断函数在传递参数时候出错?谁能帮我看看,谢谢!
下面的这个程序的外部中断响应函数里面调用printfNumber(16,220,x_zb);的时候
第一个传递参数16,到了printfNumber传递到函数里面的x就成0了,为什么?
谁能帮我看看?谢谢!
用keil模拟的

整个程序如下:


#include   <reg52.h>  
#include   <stdlib.h>  
#include   <intrins.h>  
#include   <stdio.h>  

#define Uchar unsigned char
#define Uint unsigned int

Uchar x_zb,y_zb;

void WriteData( Uchar dataW );
void WriteCommand( Uchar CommandByte );
void Delay( Uint );
void printfNumber(Uchar x,Uchar y,Uchar Number);
void Locatexy(Uchar,Uchar);
void EnableINT(void);
void DisableINT(void);

void interrupt0(void) interrupt 2 using 3   //定义外部中断1
{
    DisableINT();
    Delay(20);
    printfNumber(16,220,x_zb);
    printfNumber(21,220,y_zb);
    Delay(20);

    EnableINT();
}

void Main( void )
{
    DisableINT();
    Delay(30);
    EnableINT();
    while(1)
    {
    }
}

void EnableINT(void)
{
    EA=1;       //开所有中断
    IT1=1;  //外部中断1 边沿触发
    EX1=1;  //开外部中断1
}

void DisableINT(void)
{
//  EA=0;       //关所有中断
    EX1=0;  //关外部中断1
}

void Delay(Uint MS)
    {
        Uchar us,usn;
        while(MS!=0)
            { usn = 4;
                while(usn!=0)
                    {
                        us=0xf0;
                        while (us!=0){us--;};
                        usn--;
                    }
                MS--;
            }
    }

void WriteCommand( Uchar CommandByte ) {

    P1 = CommandByte;
}

void WriteData( Uchar dataW ) {

    P1 = dataW;
}

void Locatexy(Uchar x,Uchar y) {
    Uint temp;
    temp = (Uint)y*40+x;
    WriteCommand( 0x29 );
    WriteData( (Uchar)(temp & 0xff) );
    WriteData( (Uchar)(temp /256 ) );
}

void printfNumber(Uchar x,Uchar y,Uchar Number)
{
    Uchar a[3];
    Uchar i,j;

    a[0]=Number/100;
    a[1]=(Number%100)/10;
    a[2]=Number%10;

    WriteCommand( 0x14 );
    for(i=0;i  <3;i++)
    {
        Locatexy(x,y);
        WriteCommand( 0x47 );
        for(j=0;j  <16;j++)
            WriteData(a[j%3]);
        x++;


}

  
2楼:qinr 2004年10月19日10:59
 谁能帮我看看?谢谢!上面的帖子好长啊,一下子就沉了我的帖子
  
3楼:lenglianxi 2004年10月19日12:06
 printfNumber中使用寄存器组和中断中不一样
void interrupt0(void) interrupt 2 using 3   //定义外部中断1
{
...
}
void printfNumber(Uchar x,Uchar y,Uchar Number) using 3
{
...
}
  
4楼:qinr 2004年10月19日13:34
 多谢!
再请教一下,如果void pr

多谢!
再请教一下,如果void printfNumber(Uchar x,Uchar y,Uchar Number)这个函数需要多次调用,我的意思是除了中断里面调用,外面的函数也会调用的,函数重入的话,这样还可以设定using 3吗?

谢谢!


>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:请问大侠,冯诺曼与哈佛结构的单片机区别?!

[下一篇主题]:GPRS无线数据猫解决方案