|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
用74hc373打算扩展51芯片的IO口驱动多路继电器,结果输出很乱,搭了个试验板,发现运行结果和仿真完全不同。 试验思路:
两片373芯片Q1和Q2的QE(低电平有效)接地,LE分别接P3.1和P3.0,P1口输出数据。Q1和Q2LE初始为0,P1输出一个字节使能Q1,关Q1;输出下一个字节,使能Q2,关Q2。理论上Q1和Q2的输出应该分别是输出的这两个不同的字节,结果完全不是!
程序:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit s=P3^5;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
uchar mm,st,bc;//mm用于定时
void time(void);
//void delay(void);
void main()
{
mm=0;
st=0;
bc=0;
TCON=0x00;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;
bc=st+1;
P30=0;
P31=0;
P1=0x00;
P30=1;//Q1接收数据0
for(;mm<80;)
P1=0x01;//Q1变为1,我在Q1输出端低2位接了LED灯,应该亮一个。循环体定时,time函数每执行一次定时0.1s(12M晶振),共定时8s
P30=1;
mm=0;
P30=0;
P1=0x03;//Q2输出3,输出端低2位的LED灯应该全亮
P31=1;
while(1);
}
void time(void) interrupt 1
{
mm++;
if(mm>95)
mm=85;
TH0=0x3c;
TL0=0xb0;
TR1=1;
}
/* void delay(void)
{
int y;
for(y=0;y<10000;y++) ;
}
*/
仿真结果:
实际电路运行结果4灯全亮
请教大家什么原因??????
不会是51芯片复位IO口全高的问题,因为后面IO重写了数据
file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\254713912\QQ\WinTemp\RichOle\LI16IZF0RL68E`%72NYO)@N.jpg |
|