AI8051U, P4口异常 始终就是0, 其他口正常
ai8051u P4口异常 始终就是0, 其他口正常,求帮忙找问题。#include "AI8051U.h"
#include "stdio.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
#define MAIN_Fosc 24000000UL
void main(void)
{
WTST = 0;
EAXFR = 1;
CKCON = 0;
P0M1 = 0x00; P0M0 = 0xff;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
P40 = 1;
P40 = 0;
P40 = 1;
while(1);
}
C51正常,C251就不行,换其他电脑也是一样的问题。 和硬件没有关系,软件仿真也不正常。
用下面这个程序来修改
#include <AI8051U.H> //包含AI8051U的头文件
#include "intrins.h" //使用_nop_()函数所必须要包含的头文件,
//否则延时函数中调用的_nop_()函数没有被头文件引用过来,
//会导致编译器找不到这个而函数而报错。
void Delay500ms(void) //延时函数,主频40MHz
{
unsigned long edata i; //定义变量
_nop_(); //空指令
_nop_();
i = 4999998UL; //变量初始化
while (i) i--; //循环等待
}
//上面延时函数部分代码可使用AIapp-ISP软件的“软件延时计算器”工具来生成。
void main(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//(32 位模式请使用这句,注释下一句)
//P_SW2 |= 0x80; //允许访问扩展的特殊寄存器,XFR
//(8位模式请使用这句,注释上一句)。
WTST = 0; //设置取程序代码等待时间,
//赋值为 0表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata速度,
//赋值为 0表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x00; P0M1 = 0x00; //设置P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //设置P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //设置P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //设置P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //设置P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //设置P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //设置P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //设置P7口为准双向口模式
//上面的将所有I/O口都初始化为准双向口工作模式的程序,
//可以使用AIapp-ISP软件的“I/O口配置工具”来生成。
P40 = 0; //打开LED部分的供电
while(1)
{ //LED循环自动闪烁部分
P0 = ~P0; //对P0端口取反
// P00 = ~P00; //对单个端口取反
Delay500ms(); //调用延时函数,延时0.5s
}
}
#include <AI8051U.H> //包含AI8051U的头文件
#include "intrins.h" //使用_nop_()函数所必须要包含的头文件,
//否则延时函数中调用的_nop_()函数没有被头文件引用过来,
//会导致编译器找不到这个而函数而报错。
void Delay500ms(void) //延时函数,主频40MHz
{
unsigned long edata i; //定义变量
_nop_(); //空指令
_nop_();
i = 4999998UL; //变量初始化
while (i) i--; //循环等待
}
//上面延时函数部分代码可使用AIapp-ISP软件的“软件延时计算器”工具来生成。
void main(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//(32 位模式请使用这句,注释下一句)
//P_SW2 |= 0x80; //允许访问扩展的特殊寄存器,XFR
//(8位模式请使用这句,注释上一句)。
WTST = 0; //设置取程序代码等待时间,
//赋值为 0表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata速度,
//赋值为 0表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x00; P0M1 = 0x00; //设置P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //设置P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //设置P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //设置P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //设置P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //设置P5口为准双向口模式
P6M0 = 0x00; P6M1 = 0x00; //设置P6口为准双向口模式
P7M0 = 0x00; P7M1 = 0x00; //设置P7口为准双向口模式
//上面的将所有I/O口都初始化为准双向口工作模式的程序,
//可以使用AIapp-ISP软件的“I/O口配置工具”来生成。
// P40 = 0; //打开LED部分的供电
while(1)
{ //LED循环自动闪烁部分
P40 = 1;
Delay500ms(); //调用延时函数,延时0.5s
P40 = 0;
Delay500ms(); //调用延时函数,延时0.5s
}
}
软件仿真BUG吧,用硬件仿真
一样的问题哦!P40口的值始终就是0
这里能发小视频吗?可以的话我发一个单步的小视频。
换C51就正常。
tgqoholu 发表于 2025-6-11 15:05
一样的问题哦!P40口的值始终就是0
看我上面硬件截图不一样噢
发视频可以用高级模式点这个:
页:
[1]
2