#define LIB_CFG_DISK_IO 1 /* 磁盘读写的数据的复制方式,1为"单DPTR复制",2为"双DPTR复制",3为"单DPTR和P2+R0复制" */ 程序里有这个预处理,不知这三个有什么区别,请教各位大虾
拿我们的375操作U盘的例子来说, 1,使用单DPTR的方式,在进行往U盘里面写数据的时候,实际操作的汇编代码为: loop: mov dptr,#BUFFER(这里面是BUFFER的首地址) movx a,@dptr mov r7,dpl mov r6,dph mov dptr,#CH375_DAT_PORT(这个是375的数据端口的地址) movx @dptr,a mov dpl,r7 mov dph,r6 inc dptr jmp loop//这里只是示意下,实际根据写的字节数做循环 2,使用双DPTR的话,实际是有的单片机有2个硬件的DPTR,在复制数据的时候可以直接的切换数据就可以了: loop: mov dptr,#BUFFER(这里面是BUFFER的首地址) movx a,@dptr inc auxr1(这个是DPTR寄存器的切换的地址) mov dptr,#CH375_DAT_PORT(这个是375的数据端口的地址) movx @dptr,a inc auxr1(这个是DPTR寄存器的切换的地址) inc dptr jmp loop//这里只是示意下,实际根据写的字节数做循环 3,对于使用P2+R0以及DPTR的复制方式的,实际就是利用一个器件的地址是不需要改变来进行数据: loop: mov dptr,#BUFFER(这里面是BUFFER的首地址) movx a,@dptr mov a,#HIGH(CH375_DAT_PORT) xch a,p4 mov r0,#LOW(CH375_DAT_PORT) movx @R0,a inc dptr jmp loop//这里只是示意下,实际根据写的字节数做循环
谢谢,再好好研究下