论坛风格切换切换到宽版
  • 3304阅读
  • 15回复

51启动混乱求解(已解决) [复制链接]

上一主题 下一主题
离线BG4UVR
 
发帖
11288
只看楼主 倒序阅读 0楼 发表于: 2006-06-17
近日做一个东西(和ham无关的),结构大体是这样的,分为两个部分,一部分是显示按键输入,另一部分是主板,上面有30多个i/o端口。两部分分别用了一块89c51,它们之间通过串口通信。

我先做好了显示按键板,写好了程序,并且调试完全通过了(用硬件仿真器)。现在又焊好了主板,准备调试主板的程序。但联机一试,问题来了:显示按键板很不正常。具体表现在,每次上电启动,约有1半以上的可能,是不成功的。显示乱跳,感觉是指针跳飞了。

经过排查,完全排除了主板的原因。原因就在显示按键板上,但同样这个板,用仿真插头插在cpu位置,则每次上电都启动正常。

仿真器和直接插cpu的区别在于,仿真时,没有使用目标板上的:1、复位电路。2、时钟电路。

复位电路检查过,没有问题。时钟电路,换过晶振,没有效果。电容用的是两只30pf的(晶振是11.0592的),没有换过。

现在问题是,用30pf的电容,过大或过小么?请老师们指导,谢谢。
离线bg5baw
发帖
698
只看该作者 1楼 发表于: 2006-06-17
89c51是很容量受干扰的,会不会是串口数据干扰时钟,或是显示干扰时钟?
离线BG4UVR
发帖
11288
只看该作者 2楼 发表于: 2006-06-17
'
89c51是很容量受干扰的,会不会是串口数据干扰时钟,或是显示干扰时钟?
'

只把显示按键板通电,不接主板,串口没有数据传送,一样
离线errjoin
发帖
105
只看该作者 3楼 发表于: 2006-06-17
89c51是很容量受干扰的吗?不会哟!你次序初使化怎么写的?
离线BG4UVR
发帖
11288
只看该作者 4楼 发表于: 2006-06-17
'
89c51是很容量受干扰的吗?不会哟!你次序初使化怎么写的?
'

用keil c语言写的,默认上电初始化程序。现在问题是仿真完全正常(cpu的位置接上信真头)。我想应该不是程序的问题,还是硬件的问题。
离线bd4vc
发帖
172
只看该作者 5楼 发表于: 2006-06-17
看看ea脚可靠接高电平了吗
离线BG4XCR
发帖
33381
只看该作者 6楼 发表于: 2006-06-17
楼上说得对。ea在不使用外部存储器时要接高。
离线BG4UVR
发帖
11288
只看该作者 7楼 发表于: 2006-06-17
'
看看ea脚可靠接高电平了吗
'

ea脚已经搞高电位了。

不过,原因已经找到了。

真是暴汗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

复位电路是好的没错,可忘记和cpu的reset脚接起来了,我晕死啊晕死800遍啊800遍……
离线BG6AGB
发帖
915
只看该作者 8楼 发表于: 2006-06-17
'
ea脚已经搞高电位了。
不过,原因已经找到了。
真是暴汗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
复位电路是好的没错,可忘记和cpu的reset脚接起来了,我晕死啊晕死800遍啊800遍…… [表情]
'





离线Sullivan
发帖
4817
只看该作者 9楼 发表于: 2006-06-18
兄弟,你附近应该有墙吧?
离线wycx
发帖
1497
只看该作者 10楼 发表于: 2006-06-18
用户被禁言,该主题自动屏蔽!
离线BG4UVR
发帖
11288
只看该作者 11楼 发表于: 2006-06-18
墙暂时先不撞了,因为程序还没写完。

再请教个问题,我的应用中,需要在内存中用几个字节来做端口缓冲。可问题又来了:

1、我需要这内存可以直接按字节操作,以便于和端口(p2)之间的传送。
2、我还需要这内存可以直接按位操作,以便于信号之间逻辑关系的处理。
3、不可以直接对端口进行位操作,必须使用缓冲,因为端口是扩展过的,在p2口上通过片选,接了30多个io。
4、直接的意思是:不需要进行字节和位的互相转换的运算,以提高效率。

于是我在可位寻址的区域,放了一个字节变量(希望用这个变量来进行整字节操作)。但再这个字节的地址上,再定义位变量的时候(希望用这些位变量来进行位操作),发现这个的地址,已经不能再定义位变量了。用什么办法可以实现我的要求呢?谢谢!(我不知道有没有表达清楚我的意思,如果看了几遍还明白我在说什么,那我就再发帖解释吧)
离线BG4UVR
发帖
11288
只看该作者 12楼 发表于: 2006-06-18
呵呵,等把这个程序全部写完,我再找墙去试试 :d
离线bd4vc
发帖
172
只看该作者 13楼 发表于: 2006-06-18
比如定义一个变量aa
unsigned char bdata aa;
然后再定义一个位变量:abit0
sbit abit0=aa^0;
这样应该是你想要得吧?
离线BG4UVR
发帖
11288
只看该作者 14楼 发表于: 2006-06-18
'
比如定义一个变量aa
unsigned char bdata aa;
然后再定义一个位变量:abit0
sbit abit0=aa^0;
这样应该是你想要得吧?
'

哇,真不敢相信我有这么幸运!我本来又请教了这个问题,可是想了想,这么烦的东西,还是别麻烦大家了,于是就把帖子给删了。

于是,这个问题又让我头疼了半天,但是还没有解决,比较郁闷。

又上来,竟然看到了你的解答指导,验证了一下,完全正确,100%合乎我的要求!

竟然在我删帖前这么短的时间,让您给看到了,并且告诉了我完美答案:

真是 10000 能 的 坛 啊

测试的程序如下:
#include <regx51.h>
unsigned char bdata aa;
     sbit abit0=aa^0;
     sbit abit1=aa^1;
main(){
     aa=0x32;
     p1_0=abit0;
     p1_1=abit1;
}

编译后是这样的:
  5: main(){
  6:       aa=0x32;
c:0x0003   752032   mov     aa(0x20),#0x32
  7:       p1_0=abit0;
c:0x0006   a200   mov     c,abit0(0x20.0)
c:0x0008   9290   mov     p1_0(0x90.0),c
  8:       p1_1=abit1;
c:0x000a   a201   mov     c,abit1(0x20.1)
c:0x000c   9291   mov     p1_1(0x90.1),c
  9: }

简直是完美至极!!

再次感谢bd4vc老师的指导!
离线bd4vc
发帖
172
只看该作者 15楼 发表于: 2006-06-19
好啊,不过不用这么客气