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

[复制链接]
3992|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 | 显示全部楼层

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

 楼主| chen1018 发表于 2007-3-13 17:23 | 显示全部楼层

没理解楼上的意思

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

1

我说的是2楼
xwj 发表于 2007-3-13 17:40 | 显示全部楼层

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

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

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

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


调试时可以打开反正界面的串口窗口,然后在键盘上按键即可发出数据给单片机的接收端,当然,这个也是需要传送一个字节(10位或11位)的时间的,和正式情况时一致的
lenglx 发表于 2007-3-13 18:22 | 显示全部楼层

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

在COMMAND窗口直接输入SBUF=XX可以模拟串口的输入
 楼主| chen1018 发表于 2007-3-14 09:06 | 显示全部楼层

额额

按照7楼说,我在这款单机上,初始化的时候,禁止双缓冲的了,那不是不该出现这现象?
ayb_ice 发表于 2007-3-14 10:51 | 显示全部楼层

随便说说

  可以是被优化掉了,你可以把SBUF的数据送到某一全局变量中.
hkap 发表于 2007-3-14 16:30 | 显示全部楼层

--

7楼的说的对,发送SBUF和接收SBUF是两个在物理上完全独立的寄存器,而且发送寄存器只能实现写操作,接收寄存器只能实现读操作,只不过两个SBUF的地址是一样的.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

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