新手请教AT89S52

[复制链接]
2675|12
 楼主| zmmhmily 发表于 2008-12-23 10:30 | 显示全部楼层 |阅读模式
我用以下语句置P3口&nbsp;为什么不为0啊??<br />同样置P0口的话,可以实现,我看了一下硬件,P0口有上拉,P3没有,就这点区别<br /><br />请各位帮忙,是怎么回事,谢谢!<br /><br />while(1)<br />{<br />&nbsp;&nbsp;P3=0;<br />}&nbsp;
lyjian 发表于 2008-12-23 12:55 | 显示全部楼层

楼主搞错了吧

P0口没有上拉,P3有<br />这才是对的<br />不过不管有没上拉,&nbsp;执行P3=0后输出肯定是低的。<br />
 楼主| zmmhmily 发表于 2008-12-23 12:58 | 显示全部楼层

谢谢楼上

可是我现在怎么都置不了低&nbsp;找不到问题出在哪里啊
orangelxlf 发表于 2008-12-23 20:10 | 显示全部楼层

太少了

把整个源程序贴出来看下。
 楼主| zmmhmily 发表于 2008-12-24 16:03 | 显示全部楼层

源程序如下

//-----------------------------------------------------------------------------<br />//&nbsp;AT89S52:&nbsp;&nbsp;16864.c<br />//-----------------------------------------------------------------------------<br />//<br />//&nbsp;Program&nbsp;Description:<br />//&nbsp;--------------------<br />//-----------------------------------------------------------------------------<br /><br />#include&nbsp;&ltreg52.h&gt<br /><br />sbit&nbsp;RS&nbsp;=&nbsp;P3^4;&nbsp;&nbsp;&nbsp;//H=data;&nbsp;L=&quot;command&quot;;<br />sbit&nbsp;RW&nbsp;=&nbsp;P3^3;&nbsp;&nbsp;&nbsp;//H=read;&nbsp;L=&quot;write&quot;;<br />sbit&nbsp;&nbsp;E&nbsp;=&nbsp;P3^5;&nbsp;&nbsp;&nbsp;//input&nbsp;enable;<br />sbit&nbsp;CS1=&nbsp;P3^0;&nbsp;&nbsp;<br />sbit&nbsp;CS2=&nbsp;P3^1;<br />sbit&nbsp;RST=&nbsp;P3^2;&nbsp;&nbsp;&nbsp;//Reset&nbsp;Signal&nbsp;低电平有效<br /><br />#define&nbsp;right_on&nbsp;&nbsp;CS1_low<br />#define&nbsp;right_off&nbsp;CS1_high<br />#define&nbsp;left_on&nbsp;&nbsp;&nbsp;CS2_low<br />#define&nbsp;left_off&nbsp;&nbsp;CS2_high<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br />uchar&nbsp;p;<br /><br />main()<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P3=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}
orangelxlf 发表于 2008-12-24 20:49 | 显示全部楼层

hehe

这个程序看着没什么语法问题,但是前面的宏定义都没有用,是你改别人的程序吧.如果真是单给P3口赋值,可以这么写:<br />#include&ltreg52.h&gt<br />void&nbsp;main()<br />{<br />&nbsp;&nbsp;P3=0;<br />&nbsp;&nbsp;while(1);<br />}<br />
 楼主| zmmhmily 发表于 2008-12-25 00:01 | 显示全部楼层

回楼上

本来宏定义是为了用来控制点屏用的,&nbsp;可是发现点不亮,&nbsp;然后把其它删了,试一下IO口,&nbsp;结果发现IO口都不受自己控制,&nbsp;不知道怎么回事啊
E007 发表于 2008-12-25 00:03 | 显示全部楼层

这个都点不亮,只能说明程序没运行,呵呵......

  
orangelxlf 发表于 2008-12-25 10:41 | 显示全部楼层

?

点不亮的原因有很多,还真不好分析,如硬件没接好、时序不对等等。建议你好好看看那个点屏的操作说明。<br />如果只说这个程序的话,while(1){P3=0;},这句话不是一个很好的赋值操作,这样会导致CPU不停的个P3口赋0,建议安我写的那条语句给P3口赋值看看怎么样。如果输出还是不对的话,可以考虑换个片子,或者把P3口从电路里面断开,不要让别的电路影响到它。
E007 发表于 2008-12-25 19:39 | 显示全部楼层

我说的是P3口

就一条指令怎么可能拉不低口线呢?所以只能是程序没运行,一是晶体没起振,二是芯片GP了.楼主说对P0口有效,能拉低,其实是假象,因为P0口内部没有上拉电阻,即使输出一直是1,外面没有上拉电阻时用表测也还是0V,因为这时相当于高阻态.
ybdesire 发表于 2008-12-27 22:08 | 显示全部楼层

换芯片

1、楼主说的“P0口有上拉,P3没有,就这点区别”是指P0口有外部上拉,P3外部没有上拉吧。<br />2、换一块芯片试试吧。我以前写过s52的,就是进不了中断,其它一切正常。后来换一个片子,好了
jato 发表于 2008-12-28 22:45 | 显示全部楼层

试验一下P3

用6楼的方法试试就知道硬件还是软件坏了<br /><br />
llx04 发表于 2009-1-5 23:10 | 显示全部楼层

LCD1602

看哪些宏定义,应该是LCD1602的驱动程序是吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

205

主题

698

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部