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);
}
在P13、P14上加5KΩ上拉电阻, P13、P14换成高阻、OC开路方式,也不能当输入用,更换不同批次买的芯片,效果一样的。
Debu***:谢谢你,按照你说的,改了一下,就正常了。谢谢你了
页:
[1]