王世凯 发表于 2025-11-25 09:31:32

AI8051-34k48-LQFP48部分IO无法当输入用,是啥原因?

//本软件在Ai8051-34K48上运行,外部晶振频率40Mhz
//问题:P13、P14无法做输入口?
#include "comm\AI8051U.h"
sbitLrun= P3^3; //指示灯
sbitLerr= P0^4; //指示灯
sbitD1    = P1^3; //输入端
sbitD2    = P1^4; //输入端
void flash(char);
void init_Io(void);
void delay4u(void);
void delay100us(unsigned char ns);   
void delay1ms(unsigned int ms);   
void main(void)
{   init_Io();   //接口初始化
          flash(10);   //跑马灯10次,运行正常
        D1=1;         D2=1;       //P13、P14置高电平
g:Lrun=D1;       //P13输入高、低电平,检测灯不变
        Lerr=D2;       //P14输入高、低电平,检测灯不变
        goto g;
}
void flash(char a) //闪灯34k36
{       
          char i;
          Lrun   = 1;
          Lerr   = 1;
        for(i=0;i<a;i++){
                Lerr   = 0;delay1ms(50);Lerr   = 1;delay1ms(50);       
          Lrun   = 1;delay1ms(50);Lrun   = 0;delay1ms(50);
          }
}       
void init_Io(void)
{
    WTST = 0;//设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

          P0M1 = 0x00;      //0 0 0 0   0 0 0 0      00   准双向
    P0M0 = 0x00;      //1 0 1 1   1 0 0 0      01   推挽                        
    P0PU = 0x00;      // p05=ad4p04=ad3
          P0PD = 0x00;   
    P0IE = 0x00;      //x0xx 0000    0 模拟量输入,1数字量输入
       
          P1M1 = 0x00;   //x x x 1   1 0 0 0         10   高阻                           
    P1M0 = 0x00;   //x x x 0   0 0 0 0         11   开漏
          P1PU = 0x00;   //        0 0 0 0   0 0 0 0
    P1PD = 0x00;   // p14=ad1p11=ad2
    P1IE = 0x00;   //111x x001    0 模拟量输入,1数字量输入       
          P1SR = 0x00;
          P1DR = 0xFF;       
       
    P2M1 = 0x00;   // x x 0 0   0 0 0 0                                    
    P2M0 = 0x00;   // x x 1 0   0 0 0 0
          P2PU = 0x00;   // 0 0 0 0   0 0 0 0
    P2PD = 0x00;
               
          P3M1 = 0x00;   //0 0 0 0   0 0 0 0                                 
    P3M0 = 0x00;   //1 0 1 0   1 0 1 0
          P3PU = 0x00;   // 0 0 0 0   0 0 1 0         P3.1上拉4kΩ
    P3PD = 0x00;   // 0 0 0 0   0 1 0 1         P3.2下拉47kΩ
       
          P4M1 = 0x00;   // x 0 x 0   x 0 0 x                                    
    P4M0 = 0x00;   // x 0 x 0   x 0 1 x
    P4PU = 0x00;
                P4PD = 0x00;
       
          P5M1 = 0x00;   //1 0 x x   0 0 0 0                                    
    P5M0 = 0x00;   //0 1 x x   1 0 0 1       
          P5PU = 0x00;   // 0 0 0 0   0 1 0 1
    P5PD = 0x00;
    XOSCCR = 0x80 ;         //100x 00x0启动外边频率源40Mhz               
          while(!(XOSCCR & 0x01));//
          CLKDIV = 0x01;            //时钟不分频
          CLKSEL = 0x01;            // 0000 0001 选择外边晶振位系统时钟
}
       
void delay4u(void)       //delay time 4us
{                                       //32 MHz晶体
    int i;
    for (i=0; i<26; i++) {;}
}

void delay100us(unsigned char ns)   //1=100us;00100=10ms
{
unsigned char i,j;          
for(i=0;i<ns;i++) {
    for(j=0;j<24;j++) {
      delay4u();
          }
        }
}
void delay1ms(unsigned int ms)   //1=1ms;100=100ms 无中断
{                                                               //1=2.8ms;100=280ms 无中断
unsigned int i;
for(i=0;i<ms;i++) delay100us(10);
}


王世凯 发表于 2025-11-25 09:37:46

在P13、P14上加5KΩ上拉电阻, P13、P14换成高阻、OC开路方式,也不能当输入用,更换不同批次买的芯片,效果一样的。

DebugLab 发表于 2025-11-25 10:09:17


王世凯 发表于 2025-11-25 10:17:30

Debu***:谢谢你,按照你说的,改了一下,就正常了。谢谢你了
页: [1]
查看完整版本: AI8051-34k48-LQFP48部分IO无法当输入用,是啥原因?