单片机和PC操作双口RAM方法的问题

topcool99 2005-12-01 11:34:28
作了一个单片机和Pc机访问双口RAM的程序。
单片机把采集到的数据传送到PC
PC发出相应指令控制单片机操作。
如下图。
遇到的问题是,如PC机 写RAm经常都是在操作B1区,所以B2区放的是比较旧的指令,这样是很危险的,一不小心读错指令会使设备损坏。
采取的临时办法是,每次都给B1B2 区写数据,判等后再执行,但是这样的话,就改变了设计的初衷:提高效率。
1,应该怎么解决?
2,有没有其它更好的访问方法?

//------------------------------------------------------------------------------
//双口RAM访问程序
//为了避免与PC机的读写冲突,设计一种结构,每次读状态单元。如下图所示:
// | _____________________|000H
// | |
// | A1 | 000H~0FEH: AVR_W/PC_R
// | |0FEH
// |___状态信息,REG-A1___|0FFH
// | |100H
// | A2 |
// | |1FEH
// |====状态信息REG-A2 ===|1FFH
// | |200H PC_W/AVR_R
// | B1 |
// | | PC_W/AVR_R
// |____状态信息REG-B1 _ |2FFH
// | |300H
// | B2 |
// | |3FEH
// |____状态信息REG-B2____|3FFH
//-----------------------------------------------------------------------------
//A1、A2为单片机写、 PC机读数据区域?
//状态信息A1定义:1AH表示单片机写A1区域允许,单片机初始化时写入1AH
//状态信息A2定义:2AH表示单片机写A2区域允许,单片机初始化时写入2AH

//B1、B2为PC机写、 单片机读数据区域?
//状态信息B1定义:B1H表示PC写B1区域允许,PC机初始化时写入B1H
//状态信息B2定义:B2H表示PC写B2区域允许,PC机初始化时写入B2H

//A1区访问控制
// 1AH、2AH表示单片机可写操作;A1H、A2表示PC机可读操作;
// REG-A1=1AH时,单片机可写A1区,PC机禁止读A1区;单片机A1区写完成后,置REG-A1为A1H;
// REG-A1=A1H时,PC机可读A1区,单片机禁止写A1区; PC机A1区读完成后,置REG-A1为1AH;
// 为保证状态信息的可靠,对状态信息寄存器的信息读应进行多次,且均正确和相等时引用。

//B1区访问控制
// B1H、B2H表示PC机可写操作;1BH、2B表示单片机可读操作;
// REG-B1=B1H时,PC机可写B1区,单片机禁止读B1区; PC机B1区写完成后,置REG-B1为1BH;
// REG-B1=1BH时,单片机可读B1区,PC机禁止写B1区; 单片机B1区读完成后,置REG-A1为B1H;
// 为保证状态信息的可靠,对状态信息寄存器的信息读应进行多次,且均正确和相等时引用。
...全文
323 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
topcool99 2006-02-26
  • 打赏
  • 举报
回复
一是用硬件保证;
二是尽量用软件弥补。
topcool99 2005-12-30
  • 打赏
  • 举报
回复
第一点:

为了提高读取效率,我们把发送和接收数据包都分成两块地址存放,如当PC正在读取第一个区时,单片机可以向第二个区写数据。

第二点:
是我们规定的任务周期
tyj_3 2005-12-13
  • 打赏
  • 举报
回复
1.所以在数据严重堵塞时 才会用到第二个区 ,随着时间的积累,第二个区 往往是旧指令.
2.速率周期20ms
----------------------------------------------------------------------------
没有明白这两句的意思
第一句是不是一区存储不下单片机的发送的数据了,再借用第二区存储
请解释一下第二句,我以前写过类似的程序,也许能帮忙
topcool99 2005-12-05
  • 打赏
  • 举报
回复
大家帮帮忙,我都等几天了。
flowercity 2005-12-01
  • 打赏
  • 举报
回复
up
没搞过
topcool99 2005-12-01
  • 打赏
  • 举报
回复
我开始也是那样作的,才出现问题.
因为: 单片机速率周期20ms pc同样是20ms 他们一般情况是单片机写一个区 ,pc就可以读走了(反之也是这样).所以在数据严重堵塞时 才会用到第二个区 ,随着时间的积累,第二个区 往往是旧指令.
tyj_3 2005-12-01
  • 打赏
  • 举报
回复
在B1区和B2区分别置开辟一单元存储标志,比如PC写完新指令后将该标志单元写为0x55,单片机读指令时首先判断该标志单元,如果为0x55读取并将其写为0xAA,否则放弃,读另一区

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧