Professional Documents
Culture Documents
Volvamos a lo nuestro, y analicemos el programa por partes o en mdulos, luego veremos si es necesario un
diagramadeflujo...
Primero el encabezado con nuestro archivo .inc para hablar en trminos de C, Z, W, F, etc. y la definicin de
variables...
Encabezado
LIST P=16F84
#include <P16F84luis.INC>
Variablesautilizar
ret1 equ
ret2 equ
rota equ
disp1equ
disp2equ
disp3equ
disp4equ
0x0d
0x0e
0x0f
0x10
0x11
0x12
0x13
registrospararetardos
reg.pararotacin(cambiodedisplay)
primerdatoamostrar
segundodatoamostrar
tercerdatoamostrar
cuartodatoamostrar
Recuerdaqueloqueharemosseraunasecuenciadedisplays,porloqueesnecesariounarutinaderetardo,y
sermuypequea,algocomoesto...
RETARDO
retardo
MOVLW
0x03
MOVWF
ret1
dos MOVLW
0x6E
MOVWF
ret2
uno NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ ret2,F
GOTO
uno
DECFSZ ret1,F
GOTO
dos
RETLW
0x00
Nomevoyagastarexplicandoelretardo(temavistoanteriormente),slolopuseparatenerloencuenta,loque
srescatodeaqu,eselusodelainstruccinNOP,quesignificanohacernada(aunqueloqueestamoslogrando
eshacertiempo).Unacosams,losregistrosreg1yreg2sonvariablesdefinidasanteriormente.
Laconfiguracindepuertostambinsersencillayaqueambospuertosserndesalidaunomanejalosdatos,y
elotroseleccionacadadisplay,entonces...
Configuracindepuertos
resetORG 0x00
GOTO
inicio
ORG 0x05
inicioBSF STATUS,RP0
CLRFTRISA
CLRFTRISB
BCF STATUS,RP0
configurandopuertos
portAessalida
portBessalida
eldatoquequeremosenviaraldisplay,ycomoson4displays,puesutilizamos4registrosylecargamosconla
direccindeesos4datos,as...
cargandodirecc.dedatosdelatabla
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
0x01
disp1
0x02
disp2
0x03
disp3
0x04
disp4
Yahoralatabla,sermuypequea,yaquesloquieromostrarminombreo))
TABLA
tablaADDWF
display
NOP
RETLW
RETLW
RETLW
RETLW
PCL,F
seincrementaelcontadordeprograma
.gfedcba
segmentosdelosledsdeldisplay
B'00111000'
B'00111110'
B'00000110'
B'01101101'
cdigoparalaL
cdigoparalaU
cdigoparalaI
cdigoparalaS
AqutambinincluunNOP,parapasarporencima,cuandoelprogramavengaabuscarelprimerdato,yasno
empezamosdesdecero.
Ahoravienelomsimportante,elcdigoprincipaldelprograma.PrimeroborramoselPuerto_Aparadesactivar
todoslostransistores(apagarlosdisplays)yluegocontinuamosconelcdigo.
Hayporall,unregistrollamado"rota",quelovamosautilizarenelsiguientecdigoparaactivarlostransistores
queestnconectadosaPORTA,detalmododeseleccionareldisplayquevamosaencender,puestoqueson4,lo
vamos a cargar con "00001000" 0x08 para seleccionar uno de los displays, y luego lo haremos rotar, para
seleccionarlostresrestantes.Enlasiguientelnea,hacemosqueelFSRapuntealprimerregistrodisp1, y nos
preparamosparaenviardatosalDisplay,todoestoenlasprimeras4lneas...
apagatransistores
CLRFPORTA
PROG.PPAL
ini
MOVLW
MOVWF
0x08
rota
rota='00001000'
MOVLW
MOVWF
disp1
FSR
CARGAFSRCONLADIRECC.DEdisp1
display
MOVLW
0x00
MOVWF
PORTB
PORTB=00000000
MOVF
MOVWF
PORTA=00001000
MOVF
INDF,W
leedatoalqueapuntaFSR(oseadisp1)
CALLtabla
llamaalatabla
MOVWF
PORTB
pasaeldatoalpuertoB
rota,W
PORTA
CALLretardo
BTFSC
rota,0
GOTO
ini
llamaminiretardo
rota=00000000???
siesas,seviotodo,reinicia
BCF STATUS,C
RRF rota,F
INCF FSR,F
GOTO
display
carry=0(paranoafectarrotaciones)
rotadisplay
apuntaalsiguientedisp_X
Enlasdosprimeraslneasdelaetiquetadisplayenviamos00000000aPORTB(puestoquelosdisplay'ssonde
ctodo comn, los 4 estarn apagados), y luego seleccionamos el transistor del display de la izquierda, esto lo
hacemosponiendo00001000enPORTA.
RecuerdaqueelFSRapuntabaadisp1,ycomoyasabemos,INDFtambin,ycuandoleamosINDF,estaremos
leyendo disp1, luego lo pasamos a W, para seguidamente llamar a la tabla, tomar el dato y mostrarlo en el
display seleccionado. Como disp1=1 estaremos tomando el cdigo para la letra L de la tabla, y lo estaremos
enviandoaldisplaydelaizquierda.
Bien, ahora hacemos un miniretardo, y al regresar, preguntamos si se termin de rotar, como recin
comenzamos...,anfalta...,Ahorabien,porunacuestindeprecaucinborramoselCarrydelregistroSTATUS,
as no se afecta la rotacin, de lo contario cuando terminemos de rotar apareceran cosas raras como un uno
dems, asi que lo borramos y hacemos la rotacin a la derecha del registro rota, luego incrementamos el FSR
(paraqueapuntealregistrodisp2)yregresamosadisplay
veamos como estan las cosas, rota=00000100, FSR=disp2=INDF, ok, eso significa que ahora, con rota
seleccionamoselsiguientedisplay,cuandotomemoseldatodeINDF,estaremostomandoeldatodedisp2,yde
la tabla tomaremos el cdigo para la letra U, haremos un retardo, verificamos la rotacin y si no termin,
seguiremosrotando,incrementamoselFSRparairporelsiguientedato,yrepetimoselciclo.
Estavez rota=00000010, FSR=disp3=INDF, es decir que esta vez mostraremos laI, y seguiremos as hasta
mostrarlaS,cuandoestoocurra,ylleguemosalapreguntadesiterminlarotacin,nosdaremosconqueS,y
entoncessaltaremosaini,pararepetirlasecuenciadedisplays.
Wowwww...!!!,terminamooooos...!!!,parecaqueseramsextenso,perono,claroqueesteprogramita,escon
laintensindemostrarusosyaplicacionesdelmicro,cadaunosabrlautilidadqueledar,yparaquelopongan
aprueba,lesdejoelprogramacompleto...