本帖最后由 乘风飞扬 于 2023-4-7 18:17 编辑
你的初始化方法有问题,像以下这些方法是不行的,还是老老实实把固定值写入寄存器。
- // P0M1 &=~E240_BUS, P0M0 |= E240_BUS; //推挽输出
-
- P3M1 |= AD_BUSY, P3M0 &=~AD_BUSY; //浮空输入 AD_BUSY
- P3PU |= AD_BUSY; //P3^3(AD_BUSY) 开启内部上拉4.1K
-
- // P4M1 &=~(E240_RS|E240_WR|E240_RD), P4M0 |=(E240_RS|E240_WR|E240_RD); //推挽输出
- // P7M1 &=~E240_CS, P7M0 |= E240_CS; //推挽输出
- P4PU |=(E240_RS|E240_WR|E240_RD); //P4口开启内部上拉4.1K
- P7PU |= E240_CS; //P7口开启内部上拉4.1K
复制代码
例如:
- P4PU |=(E240_RS|E240_WR|E240_RD); //P4口开启内部上拉4.1K
复制代码
前面定义:
- sbit E240_CS =P7^5; //CS片选
- sbit E240_RS =P4^5; //RS数据/指令
- sbit E240_RD =P4^4; //RD读
- sbit E240_WR =P4^2; //WR写
复制代码
应该是期望 P4PU = 0x34; 这样才能将P4.5,P4.4,P4.2的内部上拉打开。
然而 E240_RS,E240_RD,E240_WR,它们代表的是一个个脚位,取值是0或者1,而非 0x20,0x10,0x04。
此外内部上拉寄存器是扩展寄存器,设置前应先开启扩展寄存器访问使能:P_SW2 |= 0x80; 或者 EAXFR = 1;
|