aiioli..... para aprender assembler, y con un ejemplo tan sencillo como un led parpadeante, es mucho mejor que lo hagas sólo.
poco a poco. vete escribiendo el codigo desde el principio y simulalo viendo los registros para que compruebes como van cambiando, etc...
aqui ademas encontrarás un programa muy muy similar. Lo he modificado un poco para que lo apliques con tu pic 16f886, ya que en el ejemplo hay instrucciones que no corresponden con pic (ddrb,....).
aqui lo tienes, no tienes mas que copiarlo, ensamblarlo y probarlo con tu pic.
pero lo dicho: mejor empezar tu solito...
un saludo!
*******************************
list P=16F886 ; indicamos el modelo de PIC que tenemos
#include "P16F886.inc"
__CONFIG _CONFIG1, _MCLRE_OFF & _PWRTE_ON & _LVP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _IESO_OFF
; registros
; constantes del programa
TIEMPO equ 0x30 ; posicion de memoria
;TICKS equ 20 ; Ticks entre parpadeo
#define K_TICKS .20
org 0
; Accedemos al segundo banco de RAM de Datos
bsf STATUS,RP0
; Configuración puertos
movlw 0
movwf TRISC ;
; configuracion del timer
movlw b'01010111' ; divisor = 256, timer
movwf OPTION_REG
; Accedemos al primer banco de RAM
bcf STATUS,RP0
; Pongo a cero el puerto C
clrf PORTC
; empieza el programa principal
inicio
bsf PORTC,3 ; enciende led
call pausa
bcf PORTC,3 ; apaga led
call pausa
goto inicio
; RUTINA DE ESPERA
pausa
movlw K_TICKS ; tiempo_espera = TICKs * t_tic
movwf TIEMPO ; guarda valor en memoria
otro_tic
movlw 0xB2
movwf TMR0 ; t_tic = 20 mseg
sigue
clrwdt
btfss INTCON,2 ; ¿desbordamiento ?
goto sigue ; no
bcf INTCON,2 ; si -> repongo flag
decfsz TIEMPO,1
goto otro_tic
return
END