Ai8H1K17T, P16 / P17口无法输入 | 原理图的管脚图搞错
请教一下大家有没有碰到 P16 / P17 口 无法输入问题?试了好多种方法都没办法读到IO状态。
是不是晶振口就不能用着输入呀???
P_SW2 |= 0x80;
P1IE = 0xff;
ADC_CONTR = 0;
// CMP_CR1=0;
P3M0 = 0x00;
P3M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
//P3M0 = 0xbc; P3M1 = 0x40;
//P3M0 = 0xbc; P3M1 = 0x43;
P1M0 = 0x00;
P1M1 = 0xc3;
// P1NCS = 0x00;
我所有的功能都关了,还有不能接收到输入。不知道是什么问题?
P_SW2 |= 0x80;
ADC_CONTR = 0;
// CMP_CR1=0;
I2CCFG &= ~0x03; // 释放I2C对P16/P17的控制
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
RTCCR =0;
X32KCR = 0;
XOSCCR =0;
P3M0 = 0xbc; P3M1 = 0x40;
//P3M0 = 0xbc; P3M1 = 0x43;
P16=0;
P17 =0;
P1M0 = 0x00;
P1M1 = 0xc3;
P1IE = 0xc3; 电路是正常的。在IO口端量是可以量到高低电平的,就是MCU读不到这个值。换成其他脚也是正常的 P_SW2 |= 0x80;
ADC_CONTR = 0;
CMPCR1=0;
CMPCR2=0;
SPCTL =0;
I2CCFG &= ~0x03; // 释放I2C对P16/P17的控制
P3M0 = 0x00;
P3M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
RTCCR =0;
X32KCR = 0;
XOSCCR =0;
所有的功能全关了还是不行。是不是P1617就不能作为输入使用呀?板子都做了一批,程序跑不起来{:4_167:}{:4_167:}
#include "stc8h.h" //包含STC8H的头文件
#include "intrins.h"
void Delay1ms(void) //@40.000MHz
{
unsigned char data i, j;
_nop_();
i = 52;
j = 240;
do
{
while (--j);
} while (--i);
}
void main(void)
{
P_SW2 |= 0x80; //允许访问扩展的特殊寄存器,XFR
//32位8051需要使用下面3句进行初始化
// EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
// WTST = 0; //设置取程序代码等待时间,赋值为0表示不等待,程序以最快速度运行
// CKCON = 0; //设置访问片内的xdata速度,赋值为0表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x38; P0M1 = 0x20; //设置P03、P04为推挽输出,P05为开漏输出,其余为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //设置 P1 口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //设置 P2 口为准双向口模式
P3M0 = 0x30; P3M1 = 0x3b; //P30、P31为高阻输入,P32为准双向口、P33为高阻输入、P34和P35为开漏输出
P3PU |= 0x38; //打开P33、P34、P35的内部上拉电阻,并且仅修改这三个I/O的上拉电阻打开状态
// P3M0 = 0x00; P3M1 = 0x00; //设置 P3 口为准双向口模式
// P3M0 = 0x00; P3M1 = 0x3c; //设置P32、P33、P34、P35为高阻输入,其余引脚为准双向口模式
// P3PU = 0x3c; //需要同时开启对应端口的上拉电阻
P4M0 = 0x00; P4M1 = 0x00; //设置 P4 口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //设置 P5 口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //设置 P6 口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //设置 P7 口为准双向口模式
Delay1ms(); //延时1ms,等待IO口电平稳定,因为前面刚改变了模式
//立刻读可能会读到错误的电平,所以需要先等待电平变化稳定后再读
EA = 1; //打开总中断
P40 = 0; //打开LED部分的供电
while(1)
{
if(P32 == 0)P62 = 0; //P32为低电平,则LED02亮
else P62 = 1; //P32为高电平,则LED02灭
if(P33 == 0)P63 = 0; //P33为低电平,则LED03亮
else P63 = 1; //P33为高电平,则LED03灭
if(P34 == 0)P64 = 0; //P34为低电平,则LED04亮
else P64 = 1; //P34为高电平,则LED04灭
if(P35 == 0)P65 = 0; //P35为低电平,则LED05亮
else P65 = 1; //P35为高电平,则LED05灭
}
}
参考下,另外把你 原理图的 PDF发上来,大家帮您分析
输入的口,设置为高阻输入,打开内部上拉/或外部有上拉为好
没起到作用,我在外部上拉。
找到问题了,被加立创的EDA给坑了。
立创的系统的元件库有问题。
页:
[1]
2