阅读:1965回复:11
d12读中断寄存器的问题!!
刚才不懂什么是给分,^_^,重来。系统默认我最多只能给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中断寄存器的内容 |
|
最新喜欢:![]() |
沙发#
发布于:2003-12-10 15:32
51才256字节的内存(连特殊功能寄存器也算在内),哪来的0xff03啊,呵呵,那块板子ALE的接法使得奇地址传送的是命令,偶地址传送的是数据。
|
|
板凳#
发布于:2003-12-10 15:32
不太懂为什么对51上的两个地址操作就可以读d12的中断寄存器呢?51和d12的传输过程怎样?还请多多指教啊
|
|
地板#
发布于:2003-12-10 15:40
51才256字节的内存(连特殊功能寄存器也算在内),哪来的0xff03啊,呵呵,那块板子ALE的接法使得奇地址传送的是命令,偶地址传送的是数据。 oxff03应该是指数据区吧,我想它指的是读出中断寄存器的状态放到数据区,但是我就不知道我的读出来为什么不对 |
|
地下室#
发布于:2003-12-10 15:47
找本周立功写的《PDIUSBD12USB固件编程与驱动开发》你就明白了!
|
|
5楼#
发布于:2003-12-10 16:13
数据传送的基本步骤是先给地址再传数据,你就这么认为吧,0xff03对应d12的命令寄存器,0xff02对应d12的数据寄存器。
|
|
6楼#
发布于:2003-12-10 16:30
这个地址跟你的接线有关,主要看你使用ALE\\A0?说白了就是高电平是写命令,低电平是读写数据。你的问题我看是没接好线路,或者51设置有错。
|
|
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); |
|
8楼#
发布于:2003-12-11 08:16
D12的A0接10K电阻到地。
资料上讲A0在多路地址/数据总线配置时可忽略,应将其接高电平,可是你讲你将此线通过电阻连接到地,是否有问题 |
|
9楼#
发布于:2003-12-11 08:23
第一次进中断程序,读出来的数据就是51里ff03里面的数值,不是d12中断寄存器的内容
可能是你的地址0XFF03是片选到到了外部数据区,书上只是例子用了0XFF02和0XFF03,你可能要根据你的系统选择合适的片选地址. |
|
10楼#
发布于:2003-12-11 10:02
谢谢各位指点,搞定了我的板子。
有所理解: 0xff03,0xff02只是后面两位是奇数,偶数有用,可以选定是数据还是命令,这个应该是d12内部自己完成的。 我昨天的问题出在用的是最新的keil c7.0的破解版,结果很不爽,编译出错了,死活程序不走,死循环。换了个6.10的就好了,失败 怎么给分,给大家每人5分吧,^_^,只有那么点,不好意思啊 |
|
11楼#
发布于:2003-12-11 12:13
没错,我都调试出来了!
|
|