导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→紧急求助[guest]

 *第14991篇: 紧急求助

  
楼 主:guest 2003年7月29日15:42
 紧急求助
各位大家好,小弟近期遇到一个有关C51的问题,望各位高手赐教。程序稍微有点长,对不住了。希望您保持一点耐心,因为实在有点即急。
程序的任务是在89C51的p0口输出0xf0,以响应键盘中断。一旦键盘中断被响应,数码管输出有所改变(从p2口输出代码)。
现在的问题是如果斜体语句加入(其中3,4只能加一句),则在p0口输出信号不是所预期的0xf0,而是全为高电平,键盘中断也因此无法响应。如果只加入1,2句,问题依旧。
但如果将这几句去掉,则一切正常,实在费解。
我怀疑是否与dispnum的类型有关,是否不能取为全局变量,但无法应证。恳请各位哥哥姐姐帮帮忙,小弟先此谢过。
谢谢!谢谢!


#include   <reg51.h>  
#include   <absacc.h>  
#define uchar unsigned char
bit flag;                                  //设置中断标志位,键盘按下则flag=1
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;                             //p10、p12在该段程序中没起作用,但应该对程序的运行无影响
sbit led1=P1^3;                            //数码管的片选信号输出端
sbit led2=P1^4;
sbit led3=P1^5;
[U][I]uchar dispnum;     //1[/I][/U]
uchar code table[11]={0x08,0x3b,0x14,0x11,0x23,0x41,0x40,0x1b,0x00,0x01,0x7f};
void prodisp(void);
void disp(void);
void dlms(uchar);
void keyinterrupt(void);

void main(void)
{    
    P0=0xf0;                           //在p0口送11110000
    p10=0;
    p11=0;
    p12=0;
    EA=0;
    EX0=0;
   [U][I] dispnum=0;   //2[/I][/U]   
   flag=0;
    EX0=1;
    EA=1;
    while(1)
    {
     p11=!p11;                     //不断输出喂狗信号
     dlms(5); 
     if(flag)
     {
  [U][I][B]  POST     
     disp();
     }
     else prodisp();
    }    
}

void dlms(uchar thetime)                 //延时程序
{
    uchar i;
    while(thetime!=0){
                      for(i=0;i  <113;i++){}
                      thetime--;
                     }
}

void prodisp(void)                      //初始显示值000
{
    led1=1;led2=0;led3=0;
    P2=0x08;dlms(10);
    led1=0;led2=1;led3=0;
    P2=0x08;dlms(10);
    led1=0;led2=0;led3=1;
    P2=0x08;dlms(1);
}

void disp(void)                        //由主函数看出若有中断,则显示此处值:234
{

//    if(sel=0) prodisp();
//   else{
    led1=1;led2=0;led3=0;
    P2=0x11;dlms(10);
    led1=0;led2=1;led3=0;
    P2=0x23;dlms(10);
    led1=0;led2=0;led3=1;
    P2=0x41;dlms(1);
//       } 
            
}

void keyinterrupt(void) interrupt 0 using 0
{
    EX0=0;
    flag=1;
    p12=flag;
   [U][I] dispnum++;    //4[/I][/U]
EX0=1;
}

  
2楼:zhengjl 2003年7月29日16:08
 回复 标题:紧急求助
哈哈!!!!!告诉你很简单,在89c51 p0口(8根口线)接一个10k上拉电阻排。试试看。
  
3楼:guest 2003年7月29日19:06
 但是我的键盘就是用的10K排阻接VCC,
但是我的键盘就是用的10K排阻接VCC,
问题是为何对变量的操作会引起I/O口线电平变化
奇怪中

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

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


[上一篇主题]:ic卡卡座的封装尺寸?或者封装库

[下一篇主题]:对面的朋友看过来