;************************************************* www.x-robotics.com ******* ; PROGRAMA : X-LCD3310.lib ; Funcion : Libreria Control LCD grafico NOKIA 3310 ; ; ; En la variable "rotulo" debemos definir la etiqueta que contiene ; el rotulo que queremos mostrar por ejemplo: ; ; mensaje1 dt "HOLA MUNDO", 0xFD ; ; el byte 0xFD indica el final del rotulo y es del todo necesario. ; ; movlw mensaje1 ;<---- esto define la posicion del rotulo ; movwf rotulo ;y la guardamos en la variable "rotulo" ; ; call lee_rotulo ;llamada a la subrutina de lectura ; ;e impresion en el display. ; ; INI_LCD -Inicializa SPI y LCD con la configuracion por defecto ; ; RST_LCD -Resetea el LCD ; ; CLR_LCD -Limpia toda la ram del LCD ; ; X_address -define cursor X en el display para empezar a pintar ; Y_address -define cursor Y en el display para empezar a pintar ; ; Invert_video -Invierte los colores de la pantalla ; ; normal_video -colores normales ; ; TX_SPI_C -Envia comando al LCD ; TX_SPI -Envia dato al LCD ; ;--------------------------------------------------------------------------- ; Revision : 2.00 Fecha: 8/10/2005 Programa para : PIC16F876 ; CPU Clock : 4 MHz Tiempo instruccion : 1uS ; WDT : OFF Tipo de reloj : XT ; Code Prot : OFF cfg USART rs232 ; none ; Autor : Daniel C. Martin " ionitron@x-robotics.com " ;************************************************* www.x-robotics.com ******* PDel0 EQU 0x21 PDel1 EQU 0x22 PDel2 EQU 0x23 BUFFER EQU 0x24 INNER EQU 0x25 ;delay variable mS OUTER EQU 0x26 ;delay variable mS BucleExt EQU 0x27 BucleInt EQU 0x28 SCE EQU d'0' ;lineas de protocolo en PORTC DC EQU d'1' ; " RST EQU d'2' ; " caracter EQU 0x30 offset_caractr EQU 0x31 puntero_msg EQU 0x32 ;puntero usado para leer las matrices ;que contienen mensajes (max. 255 caracteres) rotulo EQU 0x33 ;indicara la posicion PCL donde esta hubicado el mensaje ProgramCounter EQU 0x32 ;var temporal para sumas con carry de PCL DATAL EQU 0x33 DATAH EQU 0x34 ACCaLO equ 0x61 ;Variables de calculos ACCaHI equ 0x60 ACCbLO equ 0x63 ACCbHI equ 0x62 ACCcLO equ 0x65 ACCcHI equ 0x64 ACCdLO equ 0x67 ACCdHI equ 0x66 temp equ 0x68 Flags equ 0x69 ;############# lectura de la flash de programa en tiempo de ejecucion ####################### lee_rotulo movf rotulo,W ;carga el vector donde apunta la etiqueta del mensaje bsf STATUS, RP1 ; bcf STATUS, RP0 ;Banco 2 movwf EEADR movlw 0x00 ;util si los mensajes estan en otra pagina de memoria movwf EEADRH bsf STATUS, RP0 ;banco 3 bsf EECON1,EEPGD ;puntero a codigo de programa bsf EECON1,RD ;inicia la lectura nop ;espera 2 nops para concluir la lectura nop ;(obligatorio) bcf STATUS, RP0 ;banco 2 movf EEDATA, W ;byte bajo bcf STATUS, RP1 ;banco 0 movwf caracter bsf STATUS, RP1 ;banco 2 ; movf EEDATH, W ;byte alto ; movwf DATAH bcf STATUS, RP1 ;banco 0 movlw 0xFD subwf caracter,W btfsc STATUS,Z return ;finaliza la lectura call pinta_letra incf rotulo goto lee_rotulo ;############## pinta un caracter compuesto por 6 columnas de 8 bits o pixels ######### pinta_letra clrf offset_caractr call Tabla_ascii ;devuelve columna 1 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna call Tabla_ascii ;devuelve columna 2 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna call Tabla_ascii ;devuelve columna 3 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna call Tabla_ascii ;devuelve columna 4 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna call Tabla_ascii ;devuelve columna 5 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna call Tabla_ascii ;devuelve columna 6 del caracter call TX_SPI ;manda el dato al LCD para visualizarlo incf offset_caractr,F;incrementa la columna return ;retorna el control ;############################################################################ ;############### RUTINAS CONTROL LCD NOKIA 3310 Y PUERTO SPI ################ ;############################################################################ ;_______________________Inicializacion del LCD_______________________________ INI_LCD call CFG_SPI ;configura puerto SPI movlw d'30' call delay call RST_LCD ;primer reset de LCD antes de inic. call SET_LCD ;inicializacion del LCD call CLR_LCD ;puesta a cero de la matriz. movlw d'10' call delay return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;_____________________Configuracion puerto serie SPI________________________ CFG_SPI bsf STATUS,RP0 ;banco 1 >>>> movlw b'01000000' movwf SSPSTAT bcf STATUS,RP0 ;banco 0 >>>> movlw b'00100000' ;divisor de frecuencia /4 movwf SSPCON return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;_____________Generacion primer Reset para inicializacion LCD3310____________ RST_LCD bcf PORTC,RST ;activa reset a nivel bajo nop ;retardo bsf PORTC,RST ;desactiva reset- inic. completa return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;_______________________Inicializacion del LCD_______________________________ SET_LCD movlw b'00100001' ;chip activo, V Addres, H=1 call TX_SPI_C movlw b'11001011' ;comando valor de Vout call TX_SPI_C movlw b'00010011' ;bias System call TX_SPI_C movlw b'00100000' ;chip activo, H=0 call TX_SPI_C ;'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' movlw b'00001001' ;mode [Pantalla negra] call TX_SPI_C movlw d'100' ;espera 100mS call delay movlw b'00001100' ;mode [Normal mode] call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;______________________LIMPIA MEMORIA RAM del LCD____________________________ CLR_LCD movlw b'00001000' ;mode [Pantalla Blanca] call TX_SPI_C ;para que no se vea el borrado. movlw d'2' movwf BucleExt Bint movlw d'252' ;carga 252 vueltas que seran x2=504 movwf BucleInt ;para borrar todo el LCD movlw b'00000000' call TX_SPI decfsz BucleInt ;espera 252 vueltas goto $-3 decfsz BucleExt ;da 2 x 252 = 504 vueltas goto Bint movlw b'00001100' ;mode [Normal mode] call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;___________________________ posicion X _____________________________________ X_address iorlw b'10000000' ;aņade bit de comando call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;___________________________ posicion Y _____________________________________ Y_address iorlw b'01000000' ;aņade bit de comando call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;_________________________video invertido____________________________________ Invert_video movlw b'00001101' ;mode [Inverse video mode] call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;_________________________video normal____________________________________ normal_video movlw b'00001100' ;mode [normal mode] call TX_SPI_C return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;________________Transmision de datos por puerto serie SPI___________________ TX_SPI_C bcf PORTC,DC ;Modo COMANDO TX_SPI bcf PORTC,SCE ;enable display!!!!!!!!!!!!!!!!!!!!!! movwf SSPBUF ;Transmision por puerto SPI espera btfss PIR1,SSPIF ;espera a que se envie el dato goto espera bcf PIR1,SSPIF ;borra flag interrupcion bsf PORTC,SCE ;display OFF bsf PORTC,DC ;Modo DATO (por defecto) return ;"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ;########################################################################### del_1ms movlw d'199' ;delay 1mS movwf INNER in_lp nop nop decfsz INNER,F goto in_lp return delay movwf OUTER ;vueltas de 1mS out_lp call del_1ms decfsz OUTER,F goto out_lp return ;########################################################################### ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> org 0x3FF ;posicion de la tabla en memoria de programa ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;TABLAS DE CARACTERES ASCII Tabla_ascii movf caracter,W movwf ACCaLO ;carga el ascii en el primer operando para la multiplicacion movlw .0 ;A ;ResultHHI movwf ACCaHI movwf ACCbHI ;como el operando b alto tb sera 0 aprovecha... movlw .6 movwf ACCbLO ;carga el segundo operando para la multiplicacion call D_mpyS ;multiplica ascii*6 para encontrar datos en las tablas ;------------------------------------ movlw .4 ;posicion actual de la tabla en pagina 4 movwf PCLATH movlw ini_tabla ;carga dato temporal para comprobar mas tarde el acarreo movwf ProgramCounter ;sin saltar realmente. movf ACCcHI,W addwf PCLATH,F movf ACCcLO,W addwf offset_caractr,W;suma el desplazamiento de columna para lcd grafico btfsc STATUS,C ;comprueba acarreo de la suma incf PCLATH,F ;si se genero acarreo incrementa PCLATH addwf ProgramCounter,F;suma aqui primero para comprobar si hay acarreo ;y una vez comprobado lo hace realmente en PCL para saltar btfsc STATUS,C ;comprueba acarreo de la suma incf PCLATH,F ;si se genero acarreo incrementa PCLATH ini_tabla addwf PCL,F ;tanto si hubo carry como si no.. suma el byte bajo dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x00 'configurable........ dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x01 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x02 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x03 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x04 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x05 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x06 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x07 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x08 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x09 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0A dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0B dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0C dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0D dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0E dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x0F dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x10 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x11 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x12 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x13 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x14 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x15 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x16 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x17 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x18 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x19 dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1A dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1B dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1C dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1D dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1E dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x1F 'configurable........ dt 0x0,0x0,0x0,0x0,0x00,0x00 ; 0x20 space dt 0x0,0x0,0x5F,0x0,0x00,0x00 ; ! 0x21 dt 0x0,0x7,0x0,0x7,0x00,0x00 ; " 0x22 dt 0x14,0x7F,0x14,0x7F,0x14,0x00 ; # 0x23 dt 0x24,0x2A,0x7F,0x2A,0x12,0x00 ; $ 0x24 dt 0x26,0x16,0x8,0x34,0x32,0x00 ; % 0x25 dt 0x76,0x49,0x55,0x22,0x50,0x00 ; & 0x26 dt 0x0,0x0,0x5,0x3,0x0,0x00 ; ' 0x27 dt 0x0,0x1C,0x22,0x41,0x0,0x00 ; ( 0x28 dt 0x0,0x41,0x22,0x1C,0x0,0x00 ; ) 0x29 dt 0x14,0x8,0x3E,0x8,0x14,0x00 ; * 0x2A dt 0x8,0x8,0x3E,0x8,0x8,0x00 ; + 0x2B dt 0x0,0x50,0x30,0x0,0x0,0x00 ; , 0x2C dt 0x8,0x8,0x8,0x8,0x8,0x00 ; - 0x2D dt 0x0,0x60,0x60,0x0,0x0,0x00 ; . 0x2E dt 0x20,0x10,0x8,0x4,0x2,0x00 ; / 0x2F dt 0x3E,0x51,0x49,0x45,0x3E,0x00 ; 0 0x30 dt 0x0,0x42,0x7F,0x40,0x0,0x00 ; 1 0x31 dt 0x42,0x61,0x51,0x49,0x46,0x00 ; 2 0x32 dt 0x21,0x41,0x45,0x4B,0x31,0x00 ; 3 0x33 dt 0x18,0x14,0x12,0x7F,0x10,0x00 ; 4 0x34 dt 0x27,0x45,0x45,0x45,0x39,0x00 ; 5 0x35 dt 0x3C,0x4A,0x49,0x49,0x30,0x00 ; 6 0x36 dt 0x1,0x1,0x79,0x5,0x3,0x00 ; 7 0x37 dt 0x36,0x49,0x49,0x49,0x36,0x00 ; 8 0x38 dt 0x6,0x49,0x49,0x29,0x1E,0x00 ; 9 0x39 dt 0x0,0x36,0x36,0x0,0x0,0x00 ; : 0x3A dt 0x0,0x56,0x36,0x0,0x0,0x00 ; ; 0x3B dt 0x0,0x8,0x14,0x22,0x41,0x00 ; < 0x3C dt 0x14,0x14,0x14,0x14,0x14,0x00 ; = 0x3D dt 0x41,0x22,0x14,0x8,0x0,0x00 ; > 0x3E dt 0x2,0x1,0x51,0x9,0x6,0x00 ; ? 0x3F dt 0x3E,0x41,0x49,0x55,0x5E,0x00 ; @ 0x40 dt 0x7E,0x11,0x11,0x11,0x7E,0x00 ; A 0x41 dt 0x7F,0x49,0x49,0x49,0x36,0x00 ; B 0x42 dt 0x3E,0x41,0x41,0x41,0x22,0x00 ; C 0x43 dt 0x7F,0x41,0x41,0x22,0x1C,0x00 ; D 0x44 dt 0x7F,0x49,0x49,0x49,0x41,0x00 ; E 0x45 dt 0x7F,0x9,0x9,0x9,0x1,0x00 ; F 0x46 dt 0x3E,0x41,0x49,0x49,0x3A,0x00 ; G 0x47 dt 0x7F,0x8,0x8,0x8,0x7F,0x00 ; H 0x48 dt 0x0,0x41,0x7F,0x41,0x0,0x00 ; I 0x49 dt 0x20,0x41,0x41,0x3F,0x0,0x00 ; J 0x4A dt 0x7F,0x8,0x14,0x22,0x41,0x00 ; K 0x4B dt 0x7F,0x40,0x40,0x40,0x40,0x00 ; L 0x4C dt 0x7F,0x2,0xC,0x2,0x7F,0x00 ; M 0x4D dt 0x7F,0x4,0x8,0x10,0x7F,0x00 ; N 0x4E dt 0x3E,0x41,0x41,0x41,0x3E,0x00 ; O 0x4F dt 0x7F,0x9,0x9,0x9,0x6,0x00 ; P 0x50 dt 0x3E,0x41,0x51,0x21,0x5E,0x00 ; Q 0x51 dt 0x7F,0x9,0x19,0x29,0x46,0x00 ; R 0x52 dt 0x46,0x49,0x49,0x49,0x31,0x00 ; S 0x53 dt 0x1,0x1,0x7F,0x1,0x1,0x00 ; T 0x54 dt 0x3F,0x40,0x40,0x40,0x3F,0x00 ; U 0x55 dt 0x1F,0x20,0x40,0x20,0x1F,0x00 ; V 0x56 dt 0x3F,0x40,0x3C,0x40,0x3F,0x00 ; W 0x57 dt 0x63,0x14,0x8,0x14,0x63,0x00 ; X 0x58 dt 0x7,0x8,0x70,0x8,0x7,0x00 ; Y 0x59 dt 0x61,0x51,0x49,0x45,0x43,0x00 ; Z 0x5A dt 0x0,0x7F,0x41,0x41,0x0,0x00 ; [ 0x5B dt 0x2,0x4,0x8,0x10,0x20,0x00 ; \ 0x5C dt 0x0,0x41,0x41,0x7F,0x0,0x00 ; ] 0x5D dt 0x4,0x2,0x1,0x2,0x4,0x00 ; ^ 0x5E dt 0x40,0x40,0x40,0x40,0x40,0x00 ; _ 0x5F dt 0x0,0x1,0x2,0x4,0x0,0x00 ; ` 0x60 dt 0x20,0x54,0x54,0x54,0x78,0x00 ; a 0x61 dt 0x7F,0x48,0x44,0x44,0x38,0x00 ; b 0x62 dt 0x38,0x44,0x44,0x44,0x20,0x00 ; c 0x63 dt 0x38,0x44,0x44,0x48,0x7F,0x00 ; d 0x64 dt 0x38,0x54,0x54,0x54,0x18,0x00 ; e 0x65 dt 0x8,0x7E,0x9,0x1,0x2,0x00 ; f 0x66 dt 0x8,0x54,0x54,0x54,0x3C,0x00 ; g 0x67 dt 0x7F,0x8,0x4,0x4,0x78,0x00 ; h 0x68 dt 0x0,0x44,0x7D,0x40,0x0,0x00 ; i 0x69 dt 0x20,0x40,0x44,0x3D,0x0,0x00 ; j 0x6A dt 0x7F,0x10,0x28,0x44,0x0,0x00 ; k 0x6B dt 0x0,0x41,0x7F,0x40,0x0,0x00 ; l 0x6C dt 0x7C,0x4,0x18,0x4,0x78,0x00 ; m 0x6D dt 0x7C,0x8,0x4,0x4,0x78,0x00 ; n 0x6E dt 0x38,0x44,0x44,0x44,0x38,0x0 ; o 0x6F dt 0x7C,0x14,0x14,0x14,0x8,0x0 ; p 0x70 dt 0x8,0x14,0x14,0x18,0x7C,0x0 ; q 0x71 dt 0x7C,0x8,0x4,0x4,0x8,0x0 ; r 0x72 dt 0x48,0x54,0x54,0x54,0x20,0x0 ; s 0x73 dt 0x4,0x3F,0x44,0x40,0x20,0x0 ; t 0x74 dt 0x3C,0x40,0x40,0x20,0x7C,0x0 ; u 0x75 dt 0x1C,0x20,0x40,0x20,0x1C,0x0 ; v 0x76 dt 0x3C,0x40,0x38,0x40,0x3C,0x0 ; w 0x77 dt 0x44,0x28,0x10,0x28,0x44,0x0 ; x 0x78 dt 0xC,0x50,0x50,0x50,0x3C,0x0 ; y 0x79 dt 0x44,0x64,0x54,0x4C,0x44,0x0 ; z 0x7A dt 0x0,0x8,0x36,0x41,0x0,0x0 ; { 0x7B dt 0x0,0x0,0x7F,0x0,0x0,0x0 ; | 0x7C dt 0x0,0x41,0x36,0x8,0x0,0x0 ; } 0x7D dt 0x8,0x8,0x2A,0x1C,0x8,0x0 ; ->0x7E dt 0x8,0x1C,0x2A,0x8,0x8,0x0 ; <-0x7F ;================================================================================= ;================================================================================= ;================================================================================= ;******************************************************************* ; Double Precision Multiplication ; ; ( Optimized for Code Size : Looped Code ) ; ;*******************************************************************; ; Multiplication : ACCb(16 bits) * ACCa(16 bits) -> ACCb,ACCc ( 32 bits ) ; (a) Load the 1st operand in location ACCaLO & ACCaHI ( 16 bits ) ; (b) Load the 2nd operand in location ACCbLO & ACCbHI ( 16 bits ) ; (c) CALL D_mpy ; (d) The 32 bit result is in location ( ACCbHI,ACCbLO,ACCcHI,ACCcLO ) ;*******************************************************************; ; ; ;******************************************************************* ; Double Precision Multiply ( 16x16 -> 32 ) ; ( ACCb*ACCa -> ACCb,ACCc ) : 32 bit output with high word ; in ACCb ( ACCbHI,ACCbLO ) and low word in ACCc ( ACCcHI,ACCcLO ). ; D_mpyS ;results in ACCb(16 msb's) and ACCc(16 lsb's) call setupmult bcf STATUS,C mloop rrf ACCdHI,F ;rotate d right rrf ACCdLO,F btfss STATUS,C ;need to add? goto No_add movf ACCaLO,W ; Addition ( ACCb + ACCa -> ACCb ) addwf ACCbLO,F ;add lsb btfsc STATUS,C ;add in carry incf ACCbHI,F movf ACCaHI,W addwf ACCbHI,F ;add msb No_add rrf ACCbHI,F rrf ACCbLO,F rrf ACCcHI,F rrf ACCcLO,F decfsz temp,F ;loop until all bits checked goto mloop goto end1 ; Double Precision Addition ( ACCb + ACCa -> ACCb ) ; D_add bcf Flags,C ;Clear temp Carry bit movf ACCaLO,W ; Addition ( ACCb + ACCa -> ACCb ) addwf ACCbLO,F ;add lsb btfsc STATUS,C ;add in carry incf ACCbHI,F btfsc STATUS,C bsf Flags,C movf ACCaHI,W addwf ACCbHI,F ;add msb btfsc Flags,C bsf STATUS,C return ; ; ;******************************************************************* ; setupmult movlw .16 ; for 16 shifts movwf temp movf ACCbHI,W ;move ACCb to ACCd movwf ACCdHI movf ACCbLO,W movwf ACCdLO clrf ACCbHI clrf ACCbLO return ; ;**************************************************************** end1 return END ;************************************************* www.x-robotics.com *******