单片机高电平输出4.9V,低电平输出3.6V左右,什么情况!?求教
你照片中明显可以看出来芯片是STC,怎么可能是AT89C52RC?虽然STC芯片是51核心,但在实际使用中还是有些许区别。PxM0、PxM1是I/O口模式寄存器,如果你的芯片是STC89C52RC,44个引脚,那么I/O口从P0~P4共有39个.你在程序中用STC官网头文件就不会报错了。如果仍用reg52.h头文件,只要声明一下I/O口模式寄存器地址也就不会报错了。
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
P0口一般是要接上拉电阻的。
有的,10K。
看一下你的程序有没有问题?或者是硬件有什么错误的地方
程序会影响电压吗?硬件也没多少,触摸模块,触摸后3.6V给到P1.0口,至高电平,程序swhitc case 0x80之后,P0=0xFE,程序很简单,给P0.0口至低电平,(当然还有其他IO口)。上拉电阻10K,单片机系统内置的。
你的照片不清楚,不能确定芯片什么型号,STC好多15系列的芯片P0和P1的部分引脚默认是高阻或推挽,建议程序初始化时把所有I/O口设为准双向口:
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
while(1)
{
;
}
}
AT89C52RC,P1M0 的M0是什么意思?我放进去会出错。这个和设置初始值有什么区别吗?
while(1)
? ? ? ? {
? ? ? ? ? ? ? ? ;
? ? ? ? }
请问这句是什么意思?
恩恩,对,是STC89C52RC,把代码加进去了,还是没效果呢,P1.0口3.6V输入,P0.0口高电平有4.9V,变至低电平还有3.8V,有10K的上拉电阻。P1.0口从低电平至高电平,P0.0口从高电平至低电平。试了一下,改了程序,把输出换成了P2口,高电平5V,低电平可以有0.6V左右,就好了,这是什么情况?大神指教
为了准确表示在程序中什么位置设置I/O口模式寄存器,while(1)这里表示主循环,花括号里内容省略为;
加代码进去,还是不行,怎么办
吧发光二极管拆下来看看电平怎么样,有可能是i的负载过大。你也可以测测这个io口的的电流,看看是不是很大啊!
再有你用的是stc的芯片,建议你去官方下载手册看看,吧io口设置为强推挽模式。
谢谢
看手册上说,P0口上电复位后是开漏输出,当P0管脚作IO口时,需要外加10K—4.7K的电阻,当P0口管教做为地址/数据复用线使用时,不用加外加电阻。
我把程序按你说的改,也没有反应呢。
看手册上说,P0口上电复位后是开漏输出,当P0管脚作IO口时,需要外加10K—4.7K的电阻,当P0口管教做为地址/数据复用线使用时,不用加外加电阻。
没有接负载电压也是那样,电流不大,有10K电阻在那,怎么设置为强推挽模式呢?
好帖,必须支持一下!
没有原理图,不好给你分析啊。