bueno en ASM puedes usar ese DS, para saltar de una direccion a otra solo tienes q ejecutar la rutina LoadAddr_8 de nuevo con la nueva direccion, estoy seguro q deben existir al menos 3 registros para el control de dispositivo (en este caso la memoria), una de control, otra de direccion y una de datos (o mas de esta ultima depende si es de 8 o 16 bit), de hecho leyendo el DS tenemos estos registros:
MY_ADDRESS <----- Direccion de dispositivo/control
SlavAddr(Hi) <------- Direccion interna del dispositivo (o direccion de memoria)
DataByte <------- Datos a leer/escribir
solo es cosa de implementar la rutina y escribir los datos en cada registro, como no se en q memoria estas escribiendo t dire q deberas cargar los registros de esta forma:
MY_ADDRESS debera ser igual a b"1010MAAA"
M es el modo (lectura escritura)
A es la direccion A2, A1, A0 seleccionada mediante pines externos (y antes de q me cuelguen; esto tb pueden ser slectores de pag B2, B1, B0 si estas usando memorias 24XX16 o mayores)
SlavAddr(Hi) debera ser igual a la direccion de memoria q kieres leer o escribir, nota q estos son 2 registros y es para direccionar hasta 1K de memoria (1024 posiciones de acuerdo al DS a 10 bits, con arreglos adecuados podrias direccionar 64K sin problemas). SlavAddr contiene la direccion baja mientras SlavAddrHi contiene 2 bits para la direccion alta.
DataByte no necesita explicacion, escribe en el si vas a enviar datos, lee si vas a recibir (usando las rutinas necesarias claro!!)
MY_ADDRESS es una constante, por lo q su valor debera ser definido al principo del programa:
Codigo:
#define _MY_ADDRESS 0xD6 ; This slave’s address
Los demas los haces con los conocidos movlw K o movf file, 0 y movwf file, las rutinas en el DS estan mas o menos bien explicadas pero si se entiendn por lo q se pueden escribir directament en el programa (teniendo cuidado con las direcciones) incluso algunas macros son eliminables (por ejemplo las de 10bit si no las vas a usar)
Las macros t permiten pasar el valor directamente como argumento asi q es posible q ni necesites los movf y movxx q t escribi arriba, solo llama a la rutina con el valor q necesitas escribir y ya.