AI8H1K28-32P的 P0端口没反应是什么原因
下面这个程序,为什么P0口的P0.2没反应呢?
#include <AI8H.h>
sbit LED1 = P1^2; // 第 3 脚 P1.2 指示灯 LED1
sbit LED2 = P1^3; // 第 4 脚 P1.3 指示灯 LED2
sbit LED3 = P1^4; // 第 5 脚 P1.4 提示灯 LED3
sbit LED4 = P1^5; // 第 6 脚 P1.5 指示灯 LED4
sbit LED5 = P1^6; // 第 7 脚 P1.6 提示灯 LED5
sbit KEY1 = P3^2; // 第 15 脚 P3.2 接按键 KEY1
sbit KEY2 = P3^3; // 第 16 脚 P3.3 接按键 KEY2
sbit KEY3 = P3^4; // 第 17 脚 P3.4 接按键 KEY3
sbit KEY4 = P3^5; // 第 18 脚 P3.5 接按键 KEY4
sbit KEY5 = P3^7; // 第 20 脚 P3.7 接按键 KEY5
sbit KEY6 = P2^0; // 第 21 脚 P2.0 接按键 KEY6
sbit KEY7 = P2^1; // 第 22 脚 P2.1 接按键 KEY7
sbit KEY8 = P2^2; // 第 23 脚 P2.2 接按键 KEY8
sbit KEY9 = P2^3; // 第 24 脚 P2.3 接按键 KEY9
sbit OUT_P26 = P2^6; // 第 27 脚 P2.6 默认输出低电平
sbit OUT_P27 = P2^7; // 第 28 脚 P2.7 默认输出低电平
sbit OUT_P00 = P0^0; // 第 29 脚 P0.0 默认输出低电平
sbit OUT_P01 = P0^1; // 第 30 脚 P0.1 默认输出低电平
sbit OUT_P02 = P0^2; // 第 31 脚 P0.2 默认输出低电平
sbit ADC_PIN = P0^3; // 第 32 脚 P0.3 默认输出低电平
// ADC 初始化
void ADC_Init() {
P0M1 |= 0x08; // 设置 P0.3 为高阻输入模式
ADCCFG = 0x0F;// 设置 ADC 时钟和结果右对齐
ADC_CONTR = 0x80; // 使能 ADC 模块
}
// 读取 ADC 值
unsigned int ADC_Read() {
ADC_CONTR = 0x8B; // 选择 P0.3 通道并启动转换
_nop_(); // 短暂延时
while (!(ADC_CONTR & 0x20)); // 等待转换完成
ADC_CONTR &= ~0x20; // 清除转换完成标志
return (ADC_RES << 8) | ADC_RESL; // 返回 10 位 ADC 结果
void main()
{
// 初始化
P1M0 = 0xFC; P1M1 = 0x00; // 设置 P1.2 - P1.6 为推挽输出
P2M0 = 0xC0; // 设置 P2.6 - P2.7 为推挽输出
P0M0 = 0x00; // 设置 P0.0 - P0.2 为
while(1)
{
// 如果 KEY1 按下且 KEY5 未按下
if (!KEY1 && KEY5)
{
LED2 = ~LED2; // 点亮 LED2
OUT_P02 = ~OUT_P02; //
}
}
}
您所谓P0没反应是如何得出的结论,是通过什么方法测量或者指示的? 8H的引脚模式预设是高阻
即P0M0=0;P0M1=0xFF;
你的代码只写了P0M0=0;
等于没有初始化
晓飛飛 发表于 2025-2-12 14:28
您所谓P0没反应是如何得出的结论,是通过什么方法测量或者指示的?
在焊的板子上测量这几个脚位都没有反应,一直低电平 Lkck8210 发表于 2025-2-12 15:02
8H的引脚模式预设是高阻
即P0M0=0;P0M1=0xFF;
你的代码只写了P0M0=0;
ADC初始化哪里写了P0M1 |= 0x08; // 设置 P0.3 为高阻输入模式,,这样写不行吗? Wddz 发表于 2025-2-13 08:13
ADC初始化哪里写了P0M1 |= 0x08; // 设置 P0.3 为高阻输入模式,,这样写不行吗? ...
你看看你贴子开头第一句问的是什么 Lkck8210 发表于 2025-2-13 09:31
你看看你贴子开头第一句问的是什么
大佬,P0,P2口是不是要加上拉电阻 Wddz 发表于 2025-2-13 20:03
大佬,P0,P2口是不是要加上拉电阻
试了,不能加上拉 你这个肯定不能工作。while循环。KEY1按下 一秒钟循环执行上万次。你的LED能来得及不。必须加判断。比如key1 停止按下后开始执行一次。 zhang32568 发表于 2025-2-14 08:26
你这个肯定不能工作。while循环。KEY1按下 一秒钟循环执行上万次。你的LED能来得及不。必须加判断。比如key ...
按键按下,LED2 能控制亮灭,但是P0.2这几个口都没反应,也不知是IC挂了,还是没有配置好
Desktop/ymj-
页:
[1]
2