打印

请大家帮忙(用Keil uVision2不解)

[复制链接]
2864|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chen1018|  楼主 | 2007-3-13 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    在调试单片机P89LPC932时候,自己编了一个小程序,看看串口是否能通,结果程序是正确的,下到单片机里也运行也是正确的.但是我想通过软仿真,却不行,感觉很奇怪.
下面是程序的一个小小部分
JNB RI,$
MOV A,SBUF
CLR  RI
    这只是单机收到的数据存到累加器A里.在软仿真调试的时候,当然是不可能有数据收了,我在串口(serial)设置项把SBUF的值改成0xFF,当然可以随便改成什么,并把RI置位,单步调试,走过MOV A,SBUF时候,我发现不论怎么样都没法把SBUF的值赋到累加器A中,A一直保持0X00.
    于是我又怕这样改不行,又在程序中直接MOV SBUF,#0FFH.发现这样也不能把缓冲区的数据读到A中.真是百思不得其解.难道是KEIL UVISION2这个C编译器的问题.不知道各位是否遇到过这种情况,本人也是刚上手,期待各位帮忙解答.

相关帖子

沙发
huangqi412| | 2007-3-13 15:17 | 只看该作者

调试时设备菜单串口窗口,

不过不会显示你输入的东西。不太方便,

使用特权

评论回复
板凳
syacedc| | 2007-3-13 15:31 | 只看该作者

在KEIL里可以复制到电脑的串口上面调试

在KEIL里可以复制到电脑的串口上面调试

使用特权

评论回复
地板
XZL| | 2007-3-13 17:17 | 只看该作者

软件仿真还不完善,不要太依赖软件仿真

使用特权

评论回复
5
chen1018|  楼主 | 2007-3-13 17:23 | 只看该作者

没理解楼上的意思

    简单的说就是我把在KEIL里,对SBUF进行设置,赋值后,在想把SBUF的数据读出来.发现不论怎么都读不出来.比如说读到寄存器或者累加器中,都不行.程序是正确的,下到单机里运行是正常的,只是在KEIL中发现问题,不知道怎么解决.
   如果是这样的话,以后有关串口收程序,都没法进行软仿真了.

使用特权

评论回复
6
chen1018|  楼主 | 2007-3-13 17:25 | 只看该作者

1

我说的是2楼

使用特权

评论回复
7
xwj| | 2007-3-13 17:40 | 只看该作者

呵呵,这个是初学者常有的疑问,因为你们都没仔细看过51的

51的串口是双缓冲,读和写SBUF寄存器访问的实际上是不同的寄存器!

用来读的那个SBUF寄存器的值只能有外部RX收到的数据来改变,
写SBUF只会从TR端发出数据,

因此,除非把外部TXD和RXD管教连接起来,然后等待10个位的时间,才可以自己收到!


调试时可以打开反正界面的串口窗口,然后在键盘上按键即可发出数据给单片机的接收端,当然,这个也是需要传送一个字节(10位或11位)的时间的,和正式情况时一致的

使用特权

评论回复
8
lenglx| | 2007-3-13 18:22 | 只看该作者

在COMMAND窗口直接输入SBUF=XX可以模拟串口的输入

在COMMAND窗口直接输入SBUF=XX可以模拟串口的输入

使用特权

评论回复
9
chen1018|  楼主 | 2007-3-14 09:06 | 只看该作者

额额

按照7楼说,我在这款单机上,初始化的时候,禁止双缓冲的了,那不是不该出现这现象?

使用特权

评论回复
10
ayb_ice| | 2007-3-14 10:51 | 只看该作者

随便说说

  可以是被优化掉了,你可以把SBUF的数据送到某一全局变量中.

使用特权

评论回复
11
hkap| | 2007-3-14 16:30 | 只看该作者

--

7楼的说的对,发送SBUF和接收SBUF是两个在物理上完全独立的寄存器,而且发送寄存器只能实现写操作,接收寄存器只能实现读操作,只不过两个SBUF的地址是一样的.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

粉丝