;7SEGasm LIST p=16F628 ;Decimos al ensamblador qué micro estamos usando include "P16F628.inc" ;Incluimos las definiciones de nuestro micro ERRORLEVEL 0, -302 ;suprime mensajes de "bank selection" al ensamblar __config 0x3D18 ;configuramos (oscilador, tipo etc.) cblock 0x20 ;Comienzo de los registros de proposito general ;RAM en el Bank0 MiNum ;Mi número contador count1 ;Usado en la rutina Delay counta ;idem countb ;idem endc SEG_PORT Equ PORTB ;Redefino Puerto donde conecto el Display 7Segmentos SEG_TRIS Equ TRISB org 0x0000 ;org coloca el programa en el origen, 0x0000 para el 16F628, ;Por aquí es por donde empieza el programa a ejecutarse movlw 0x07 movwf CMCON ;Deshabilito los comparadores bcf STATUS, IRP bcf STATUS, RP1 bsf STATUS, RP0 ;Selecciono el Bank 1 para poder acceder a SEG_TRIS movlw 0x00 movwf SEG_TRIS ;Configuro todo el SEG_PORT para que sea de salida bcf STATUS, RP1 bcf STATUS, RP0 ;Selecciono de nuevo el Bank 0 clrf SEG_PORT ;Limpio Display antes de empezar Inicio movlw 0x00 ;Inicializo MiContador movwf MiNum Main movfw MiNum ;Cargo en W Offset actual Call Display Call Del250 ;Espero 1/2 segundo Call Del250 incf MiNum, f ;Incremento MiNumero movf MiNum, w ;Cargo MiNum en W para testearlo y no pasarme de F sublw 0x10 ;Le resto 10 Hex btfss STATUS, Z ;Si el resultado es cero salto a Inicio goto Main ;En caso contrario a Main goto Inicio Display Call LED_Table ; Cargo W con el Pattern a dibujar movwf SEG_PORT ; Envío el Pattern al PORT_SEG retlw 0x00 LED_Table addwf PCL,f ;Sumo el Offset cargado al Program Counter (Low byte) ;para saltar al retorno que me interesa retlw b'00111111' ;0 retlw b'00000110' ;1 retlw b'01011011' ;2 retlw b'01001111' ;3 retlw b'01100110' ;4 retlw b'01101101' ;5 retlw b'01111101' ;6 retlw b'00000111' ;7 retlw b'01111111' ;8 retlw b'01100111' ;9 retlw b'01110111' ;A retlw b'01111100' ;B retlw b'00111001' ;C retlw b'01011110' ;D retlw b'01111001' ;E retlw b'01110001' ;F ;** Rutinas de Delay ************************************* Del250 movlw d'250' ;delay 250 ms goto Delay Delay movwf count1 d1 movlw 0xC7 ;delay 1mS movwf counta movlw 0x01 movwf countb Delay_0 decfsz counta, f goto $+2 decfsz countb, f goto Delay_0 decfsz count1 ,f goto d1 retlw 0x00 END