guidong
驱动牛犊
驱动牛犊
  • 注册日期2002-10-31
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1964回复:11

d12读中断寄存器的问题!!

楼主#
更多 发布于:2003-12-10 15:19
刚才不懂什么是给分,^_^,重来。系统默认我最多只能给20,就这么多了,大家就凑合凑合吧^_^

周立功的固件上是
#define D12_COMMAND 0xff03
#define D12_DATA 0xff02
unsigned char b1;
unsigned int j;

outportb(D12_COMMAND, 0xF4);

b1 = inportb(D12_DATA);
j = inportb(D12_DATA);

j <<= 8;
j += b1;
return j;
我现在就是读中断寄存器不对,第一次进中断程序,读出来的数据就是51里ff03里面的数值,不是d12中断寄存器的内容

最新喜欢:

lhaihlhaih
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-10 15:32
51才256字节的内存(连特殊功能寄存器也算在内),哪来的0xff03啊,呵呵,那块板子ALE的接法使得奇地址传送的是命令,偶地址传送的是数据。
guidong
驱动牛犊
驱动牛犊
  • 注册日期2002-10-31
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-10 15:32
不太懂为什么对51上的两个地址操作就可以读d12的中断寄存器呢?51和d12的传输过程怎样?还请多多指教啊

guidong
驱动牛犊
驱动牛犊
  • 注册日期2002-10-31
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-10 15:40
51才256字节的内存(连特殊功能寄存器也算在内),哪来的0xff03啊,呵呵,那块板子ALE的接法使得奇地址传送的是命令,偶地址传送的是数据。


oxff03应该是指数据区吧,我想它指的是读出中断寄存器的状态放到数据区,但是我就不知道我的读出来为什么不对
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-10 15:47
找本周立功写的《PDIUSBD12USB固件编程与驱动开发》你就明白了!
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-10 16:13
数据传送的基本步骤是先给地址再传数据,你就这么认为吧,0xff03对应d12的命令寄存器,0xff02对应d12的数据寄存器。
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-10 16:30
这个地址跟你的接线有关,主要看你使用ALE\\A0?说白了就是高电平是写命令,低电平是读写数据。你的问题我看是没接好线路,或者51设置有错。
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-10 16:51
硬件连接如下:
      D12的ALE连接到MCU的ALE,D12的A0接10K电阻到地。
说明:在这种连接方式下,D12地命令口地址必须为奇地址如0xFF03,D12的数据口地址必须为偶地址如0xFF02。
固件操作如下:
      #define D12_COMMAND 0xff03
      #define D12_DATA 0xff02
      unsigned char j;
      outportb(D12_COMMAND, 0xF4);
      j=inportb(D12_DATA);
danyehua
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-11 08:16
D12的A0接10K电阻到地。


资料上讲A0在多路地址/数据总线配置时可忽略,应将其接高电平,可是你讲你将此线通过电阻连接到地,是否有问题
danyehua
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2005-03-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-11 08:23
第一次进中断程序,读出来的数据就是51里ff03里面的数值,不是d12中断寄存器的内容

可能是你的地址0XFF03是片选到到了外部数据区,书上只是例子用了0XFF02和0XFF03,你可能要根据你的系统选择合适的片选地址.
guidong
驱动牛犊
驱动牛犊
  • 注册日期2002-10-31
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-11 10:02
谢谢各位指点,搞定了我的板子。
有所理解:
0xff03,0xff02只是后面两位是奇数,偶数有用,可以选定是数据还是命令,这个应该是d12内部自己完成的。
我昨天的问题出在用的是最新的keil c7.0的破解版,结果很不爽,编译出错了,死活程序不走,死循环。换了个6.10的就好了,失败

怎么给分,给大家每人5分吧,^_^,只有那么点,不好意思啊
hoosyman
驱动小牛
驱动小牛
  • 注册日期2002-10-31
  • 最后登录2006-07-14
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-11 12:13
没错,我都调试出来了!
游客

返回顶部