电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> RAM ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

winbond w77e58扩展RAM以及双数据指针的编程方法演示


类别:技术文章
来源:未知
作者:未知
关键字:w77e58
加入日期:2010-8-3

//////////////////////////////////////////////////////////////////
// winbond w77e58扩展RAM以及双数据指针的编程方法演示。 //
// -- xiaoqi //
// ----------------------------------------------------------- //
// 片内有1K的扩展RAM,并且有两个数据指针,dptr/dptr1,但是在实际 //
// 操作中,dptr1并不明显地出现,采用另外一个指针选择器DPS进行选 //
// DPS=0选择dptr,DPS=1选择dptr1,选择了dptr1以后表面上所用的符号 //
// 依然是dptr, 并没有dptr1这个指针出现,所以要知道当前所用的究 //
// 竟是哪一个,就必须查询DPS. //
// 外部ram扩展部分将与内部扩展ram重叠了前面的第一K空间,但可以 //
// 通过设定DME0(PMR.0)进行内外选择,所以RAM不会被浪费。当DME0 //
// =1时,内部扩展RAM被打开,在内部扩展RAM空间范围内操作时,外部 //
// 总线P0/P2上不会出现选址和数据信号;当DME0 =0时,内部扩展RAM //
// 被关闭,所有与xdata操作有关的指令都建立在外部扩展ram上。 //
//--------------------------------------------------------------//
// 在较大批量的数据传递的时候,还是用汇编比较爽 //
// PMR不支持位寻址操作,只能用数据对PMR进行与或操作 //
// 头文件选用在winbond目录下的头文件W77C32.H //
//////////////////////////////////////////////////////////////////
//中国电子网 www.EC66.com
#include
#include
#define uchar unsigned char

// 搞了半天,还是编一段汇编来得爽快
extern void xdatamov(uchar xdata *ptr1,uchar xdata *ptr2,uchar len);

uchar xdata nxTemp[128]; // 服从系统分配地址
uchar xdata nxTemp1[128] _at_ 0x300; // 自定义数据地址

void main()
{
register uchar i; // 必须是unsigned..,否则无限循环
PMR |= 1; // 片内SDRAM打开
for(i=0;i<128;i++) // 赋初值
{
nxTemp[i] = i+128;
}
xdatamov(nxTemp1,nxTemp,128); // 使用双数据指针进行数据传递汇编代码
_nop_(); // 软件仿真时察看数据传递结果
while(1);
}


asm文件:
#include"77e58.inc"
?PR?_xdatamov?DATAMOV SEGMENT CODE
?DT?_xdatamov?DATAMOV SEGMENT DATA OVERLAYABLE
PUBLIC _xdatamov

RSEG ?DT?_xdatamov?DATAMOV
?_xdatamov?BYTE:
ptr1?040: DS 2
ptr2?041: DS 2

; C语言调用格式:
; void xdatamov(uchar xdata *ptr1,uchar xdata *ptr2,uchar len)

RSEG ?PR?_xdatamov?DATAMOV
_xdatamov:
USING 0

; R3 = len
MOV DPH1,R6 ;ptr2
MOV DPL1,R7
MOV DPH,R4 ;ptr1
MOV DPL,R5

CLR A
MOV R7,A

?C0001:
MOV A,R7
CLR C
SUBB A,R3
JNC ?C0004
MOV DPS,#0 ; dps = 0指向dptr
MOVX A,@DPTR ; 读取数据
INC DPTR
INC DPS ; dps = 1指向dptr1
MOVX @DPTR,A ; 实际上它就是dptr1
INC DPTR
INC R7
SJMP ?C0001
?C0004:
RET
; END OF _xdatamov
END

您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号