8051单片机中DPTR的扩展设计
发布时间:2008/5/26 0:00:00 访问次数:1027
    
    
    来源:单片机及嵌入式系统应用 作者:杨磊 张远洋 李峥 王少东
    
    摘要 首先对比分析在执行大规模数据转移时,传统8051单片机和进行dptr扩展后的8051单片机在数据转移执行效率上的差别。通过详细分析dptr操作所涉及的因素,具体实现对dptr的扩展,并进行实际仿真测试。
    
    关键词 8051单片机 dptr 数据转移执行效率
    
    单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位mcu架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针dptr),用于访问外接的64 kb数据存储器和i/o接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统8051的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文首先以数据转移执行效率为衡量标准,分析了dptr扩展的意义,并在oregano公司的mcs8051核[1]上实现了dptr扩展。
    
    1 dptr扩展意义
    
    为描述8051中的dptr扩展的意义,我们针对实现大规模数据转移,分别对dptr扩展前后作了对比。为使对比更加清晰明了,提出了数据转移执行效率的概念。
    
    数据转移执行效率v定义为进行单字节数据转移所耗费的机器周期数,即v=nt。其中,n表示所转移数据字节数;t表示所耗费的机器周期,可设定其单位为字节/机器周期。
    
    在未进行dptr扩展的8051中,可通过设置地址缓冲区的方法来实现大规模的数据转移。具体的例程如下:
    
    movpre:
    mov50h, #s_adrh
    mov51h, #s_adrl
    mov52h,#t_adrh
    mov53h,#t_adrl
    movr2, #64
    remove:mov dph, 50h
    mov dpl, 51h
    movx a, @dptr
    inc dptr
    mov 50h, dph
    mov 51h, dpl
    mov dph, 52h
    mov dpl, 53h
    movx @dptr,a
    inc dptr
    mov 52h, dph
    mov 53h, dpl
    djnz r2, remove
    
    在此例程中,50h、51h用于存放数据源地址s_adr(s_adrh为高字节, s_adrl为低字节),52h、53h用于存放数据目的地址t_adr(t_adrh为高字节, t_adrl为低字节),实现将源地址起始64字节数据转移至目的地址。在8051中,执行n字节数据移位操作耗费(14+28×n+2)个机器周期,数据转移执行效率为v=n/(14+28×n+2)。在本例程中,n为64,计算得出共需耗费1 808个机器周期,执行效率v约为0.035 4字节/机器周期,而且在此实现方法中需占用8051的4个片内存储器(ram)单元。
    
    如8051中拥有两组dptr,并可通过特殊指令来实现dptr选取。可设定setdptr0指令表示选取dptr0,setdptr1指令表示选取dptr1,#s_adr表示数据源地址,#t_adr表示数据目的地址,则程序可设计为:
    
    movpre:
    setdptr0
    movdptr,#s_adr
    setdptr1
    mov dptr,#t_adr
    mov r2,#64
    remove2:
    setdptr0
    movx a,@dptr
    inc dptr
    setdptr1
    movx @dptr,a
    inc dptr
    dj
    
    
    来源:单片机及嵌入式系统应用 作者:杨磊 张远洋 李峥 王少东
    
    摘要 首先对比分析在执行大规模数据转移时,传统8051单片机和进行dptr扩展后的8051单片机在数据转移执行效率上的差别。通过详细分析dptr操作所涉及的因素,具体实现对dptr的扩展,并进行实际仿真测试。
    
    关键词 8051单片机 dptr 数据转移执行效率
    
    单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位mcu架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针dptr),用于访问外接的64 kb数据存储器和i/o接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统8051的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文首先以数据转移执行效率为衡量标准,分析了dptr扩展的意义,并在oregano公司的mcs8051核[1]上实现了dptr扩展。
    
    1 dptr扩展意义
    
    为描述8051中的dptr扩展的意义,我们针对实现大规模数据转移,分别对dptr扩展前后作了对比。为使对比更加清晰明了,提出了数据转移执行效率的概念。
    
    数据转移执行效率v定义为进行单字节数据转移所耗费的机器周期数,即v=nt。其中,n表示所转移数据字节数;t表示所耗费的机器周期,可设定其单位为字节/机器周期。
    
    在未进行dptr扩展的8051中,可通过设置地址缓冲区的方法来实现大规模的数据转移。具体的例程如下:
    
    movpre:
    mov50h, #s_adrh
    mov51h, #s_adrl
    mov52h,#t_adrh
    mov53h,#t_adrl
    movr2, #64
    remove:mov dph, 50h
    mov dpl, 51h
    movx a, @dptr
    inc dptr
    mov 50h, dph
    mov 51h, dpl
    mov dph, 52h
    mov dpl, 53h
    movx @dptr,a
    inc dptr
    mov 52h, dph
    mov 53h, dpl
    djnz r2, remove
    
    在此例程中,50h、51h用于存放数据源地址s_adr(s_adrh为高字节, s_adrl为低字节),52h、53h用于存放数据目的地址t_adr(t_adrh为高字节, t_adrl为低字节),实现将源地址起始64字节数据转移至目的地址。在8051中,执行n字节数据移位操作耗费(14+28×n+2)个机器周期,数据转移执行效率为v=n/(14+28×n+2)。在本例程中,n为64,计算得出共需耗费1 808个机器周期,执行效率v约为0.035 4字节/机器周期,而且在此实现方法中需占用8051的4个片内存储器(ram)单元。
    
    如8051中拥有两组dptr,并可通过特殊指令来实现dptr选取。可设定setdptr0指令表示选取dptr0,setdptr1指令表示选取dptr1,#s_adr表示数据源地址,#t_adr表示数据目的地址,则程序可设计为:
    
    movpre:
    setdptr0
    movdptr,#s_adr
    setdptr1
    mov dptr,#t_adr
    mov r2,#64
    remove2:
    setdptr0
    movx a,@dptr
    inc dptr
    setdptr1
    movx @dptr,a
    inc dptr
    dj