microcontroladores 3ra parte
DESCRIPTION
TUTORIAL MICROCONTROLADORES!Bueno!, hola a todos...a continuacion un pequeño tutorial que me ha facilitado un profesor de mi universidad...esta pero BUENO. MIRENLO Y ME CUENTANGRACIAS ing. Leonardo mejia y Cesar augusto PeñaTRANSCRIPT
MICROCONTROLADORES
M.Sc. César Augusto Peña C.
Profesor de planta – Ingeniería mecatrónicaUniversidad de Pamplona
INSTRUCCIÓN ADDLW kW + k W
Ejm:
0 0 0 0 1 0 0 0W = 1 +7 = 8
0 0 0 0 0 0 0 1W =1
ADDLW .7
INSTRUCCIÓN ADDWF f,dW + f d
Ejm:
0 0 0 0 0 1 1 0REG1 = 1 + 5 = 6
0 0 0 0 0 1 0 1REG1 = 5
ADDWF REG1,1
0 0 0 0 0 0 0 1W = 1
INSTRUCCIÓN ANDLW kW AND k W
Ejm:
0 0 0 0 0 1 0 1W = 5 AND 7 = 5
0 0 0 0 0 1 0 1W =5
ANDLW b’00000111’
INSTRUCCIÓN ANDWF f,dW AND f d
Ejm:
0 0 0 0 0 0 0 1W = 3 AND 5 = 1
0 0 0 0 0 1 0 1REG1 = 5
ANDWF REG1,0
0 0 0 0 0 0 1 1W = 3
INSTRUCCIÓN CLRW 0 W
Ejm:
0 0 0 0 0 0 0 0W = 0
1 0 1 0 1 0 1 1W =171
CLRW
INSTRUCCIÓN CLRF f 0 f
Ejm:
0 0 0 0 0 0 0 0REG1 = 0
1 0 1 0 1 0 1 0REG1 =170
CLRF REG1
INSTRUCCIÓN COMF f,dcom(f) d
Ejm:
0 0 0 0 1 1 1 1W = 15
1 1 1 1 0 0 0 0REG1 =240
COMF REG1,0
INSTRUCCIÓN DECF f,df - 1 d
Ejm:
0 0 0 0 0 1 1 1REG1 = 7
0 0 0 0 1 0 0 0REG1 =8
DECF REG1,1
INSTRUCCIÓN INCF f,df + 1 d
Ejm:
0 0 0 1 0 0 0 0REG1 = 16
0 0 0 0 1 1 1 1REG1 =15
INCF REG1,1
INSTRUCCIÓN IORLW kW OR k W
Ejm:
0 0 0 0 1 1 1 1W = 9 OR 7 = 15
0 0 0 0 1 0 0 1W =9
IORLW b’00000111’
INSTRUCCIÓN IORWF f,dW OR f d
Ejm:
0 0 0 0 1 1 1 1W = 6 OR 9 = 15
0 0 0 0 1 0 0 1W =9
IORWF REG1,0
0 0 0 0 0 1 1 0REG1 =6
0 0 0 0 0 1 1 0REG1 =6
INSTRUCCIÓN NOP
Ejm: NOP
No hace nada
Se utiliza para crear retarnos muy cortos
INSTRUCCIÓN RLF f,d
0 1 0 0 1 1 1 1
RLF REG1,1
0
1 0 0 1 1 1 1 00
REG1C
REG1C
INSTRUCCIÓN RLF f,d
1 0 0 1 1 1 1 0
RLF REG1,1
0
0 0 1 1 1 1 0 01
REG1C
REG1C
INSTRUCCIÓN RLF f,d
0 0 1 1 1 1 0 0
RLF REG1,1
1
0 1 1 1 1 0 0 10
REG1C
REG1C
INSTRUCCIÓN RRF f,d
0 0 1 1 1 1 0 0
RRF REG1,1
1
1 0 0 1 1 1 1 00
REG1C
REG1C
INSTRUCCIÓN SUBLW kk - W W
EJEMPLO 1:
0 0 0 0 0 0 1 0W = 7 - 5 = 2
0 0 0 0 0 1 0 1W = 5
SUBLW .7
1C
POSITIVO
INSTRUCCIÓN SUBLW kk - W W
EJEMPLO 2:
0 0 0 0 0 0 0 0W = 15 - 15 = 0
0 0 0 0 1 1 1 1W = 15
SUBLW .15
1C
CERO
INSTRUCCIÓN SUBLW kk - W W
EJEMPLO 3:
1 1 1 1 1 1 1 1W = 3 - 4 = -1
0 0 0 0 0 1 0 0W = 4
SUBLW .3
0C
NEGATIVO
INSTRUCCIÓN SUBWF f,df - W W
EJEMPLO 1:
0 0 0 0 0 1 0 1REG1 = 6 - 1 = 5
0 0 0 0 0 1 1 0REG1 = 6
SUBWF REG1,1
1C
POSITIVO
0 0 0 0 0 0 0 1W = 1
INSTRUCCIÓN SUBWF f,df - W W
EJEMPLO 1:
0 0 0 0 0 0 0 0W = 7 - 7 = 0
0 0 0 0 0 1 1 1REG1 = 7
SUBWF REG1,1
1C
CERO
0 0 0 0 0 1 1 1W = 7
INSTRUCCIÓN SUBWF f,df - W W
EJEMPLO 1:
1 1 1 1 1 1 1 0REG1 = 10 - 12 = -2
0 0 0 0 1 0 1 0REG1 = 10
SUBWF REG1,1
0C
NEGATIVO
0 0 0 0 1 1 0 0W = 12
INSTRUCCIÓN SWAPF f,df<3:0> d<7:4>
Ejm:
1 0 0 1 0 0 0 0W
0 0 0 0 1 0 0 1REG1
SWAPF REG1,0
f<7:4> d<3:0>
INSTRUCCIÓN XORLW kW XOR k W
Ejm:
0 0 0 0 1 1 1 0W = 9 XOR 7 = 14
0 0 0 0 1 0 0 1W =9
XORLW b’00000111’
INSTRUCCIÓN XORWF f,dW XOR f d
Ejm:
0 0 0 0 1 0 0 1W = 15 XOR 6 = 9
0 0 0 0 0 1 1 0W = 6
XORWF REG1,0
0 0 0 0 1 1 1 1REG1 = 15
RUTINAS USUALES• Poner a CERO varios bits de W sin alterar el resto.
Ejm: Se desea poner a cero los bits 3, 4 y 5 del registro W sin alterar los demás
1 0 0 0 0 0 0 1W
ANDLW B’11000111’
1 0 1 0 1 0 0 1W
RUTINAS USUALES• Poner a UNO varios bits de W sin alterar el resto.
Ejm: Se desea poner a uno los bits 1,2,3 y 4 del registro W sin alterar los demás
1 0 1 1 1 1 1 1W
IORLW B’00011110’
1 0 1 0 1 0 0 1W
RUTINAS USUALES• Detectar si dos registros son iguales y en tal caso llama una subrutina
Ejm: Si REG1 = REG2 llamar la subrutina IGUAL
W
XORWF REG2,0
1 0 1 0 1 0 0 1REG2
0 0 0 0 0 0 0 0
1 0 1 0 1 0 0 1REG1 = WMOVF REG1,0 ;REG 1 W
XORWF REG2,0 ;W = REG2 XOR W
BTFSC STATUS,2 ;SI Z = 0 BRINCA
CALL IGUAL ;Z=1 Y LLAMA ;SUBRUTINA
CONTINUA PROGRAMA …1Z
RUTINAS USUALES• Detectar si un registro es mayor que otro
Ejm: Si REG2 >= REG1 llamar la subrutina MAYOR
W
SUBWF REG2,0
0 0 0 0 0 1 1 1REG2
0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 1REG1 = WMOVF REG1,0 ;REG 1 W
SUBWF REG2,0 ;W = REG2 – W(REG1)
BTFSS STATUS,0 ;SI C =1 BRINCA
CALL MENOR ;C = 0 si REG2<REG1
CALL MAYOR ;C = 1 si REG2>=REG1
CONTINUA PROGRAMA …
1C
PROGRAMA DE VERIFICACIÓN;AUTOR: CÉSAR AUGUSTO PEÑA C;PIC: 16F84A;FUNCION: PROGRAMA PARA CORROBORAR EL FUNCIONAMIENTO DE ALGUNAS SUBRUTINAS;CARACTERISTICAS: ;OSCILLATOR: XT;WATCHDOG TIMER: OFF;POWER UP TIMER: ON;CODE PROTECT: OFF
INCLUDE "P16F84.Inc";**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .12REG1, REG2
endc;****************************************************************************************
org 00goto INICIOorg 05
INICIO movlw .7 ;W = 7movwf REG1 ;REG1 = W = 7movlw .7 ;W = 7movwf REG2 ;REG2 = W = 7
PROGRAMA DE VERIFICACIÓN;Subrutina para comprobar igualdadesVERIF_IGUAL movf REG1,0 ;W = REG1
xorwf REG2,0 ;W = REG1 XOR REG2btfsc STATUS,2 ;Salta si Z = 0goto IGUAL ;llama Subrutina
;subrutina para comprobar que REG2 es mayor que REG1COM_REG movf REG1,0 ;W = REG1
subwf REG2,0 ;W = REG2 - REG1btfss STATUS,0 ;Salta SI C =1 (REG2>=REG1)goto NOgoto SI
;Subrutina en caso que REG2 >= REG1SI movlw .2 ;W = 2
movwf REG2 ;REG2 = W = 2goto COM_REG ;vuelve a comprobar que REG2>=REG1
;Subrutina en caso que REG2 < REG1NO goto INICIO
;Subrutina en caso que REG1 = REG2IGUAL movlw .8 ;W = 8
movwf REG2 ;REG2 = W = 8goto VERIF_IGUAL
end
MOTOR PAPMientras que un motor convencional gira libremente al aplicarle una tensión, el motor paso a paso gira un determinado ángulo de forma incremental (transforma impulsos eléctricos en movimientos de giro controlados), lo que le permite realizar desplazamientos angulares fijos muy precisos(pueden variar desde 1,8º hasta unos 90º)
MOTOR PAP
Están constituidos esencialmente por dos partes:
• Estator: parte fija construida a base de cavidades en las que van depositadas las bobinas.
• Rotor: parte móvil construida mediante un imán permanente. Este conjunto va montado sobre un eje soportado por dos cojinetes que le permiten girar libremente.
MOTOR PAP
Al excitar el estator, se crearan los polos N-S, provocando
la variación del campo magnético formado.
La respuesta del rotor será seguir el movimiento de dicho
campo (tenderá a buscar la posición de equilibrio
magnético), es decir, orientará sus polos NORTE-SUR
hacia los polos SUR-NORTE del estator, respectivamente.
SECUENCIAS MOTOR PAP UNIPOLAR
Paso simple:
Esta secuencia de pasos es la más simple de todas y consiste en activar cada bobina una a una y por separado, con esta secuencia de encendido de bobinas no se obtiene mucha fuerza ya que solo es una bobina cada vez la que arrastra y sujeta el rotor del eje del motor
SECUENCIAS MOTOR PAP UNIPOLAR
Paso doble:
Con el paso doble activamos las bobinas de dos en dos con lo que hacemos un campo magnético más potente que atraerá con más fuerza y retendrá el rotor del motor en el sitio. Los pasos también serán algo más bruscos debidos a que la acción del campo magnético es más poderosa que en lasecuencia anterior.
SECUENCIAS MOTOR PAP UNIPOLAR
Medio Paso:Combinando los dos tipos de secuencias anteriores podemos hacer mover al motor en pasos más pequeños y precisos y así pues tenemos el doble de pasos de movimiento para el recorrido total de 360º del motor.
INSTRUCCIÓN GOTO k
VECTOR RESET
VECTOR INTERRUPCIÓN
0000 H
0004 H
CONTINUA PROGRAMA
ETIQUETA 0034 H
13 0
PC = 34 h
GOTO ETIQUETA (34H)0011 H0012 H
03FF H
k PC
PC = 11 h
Goto 34h
ETIQUETA = 34h
INSTRUCCIÓN CALL k Y RETURN
VECTOR RESET
VECTOR INTERRUPCIÓN
0000 H
0004 H
SUBRUTINA0034 H
13 0
PC = 34 h
0012 hNIVEL 2
NIVEL 3
NIVEL 8
.
.
.
CALL SUBRUTINA
CONTINUA PROGRAMA0011 H0012 H
03FF H
RETURN
k PCPC+1 Pila
INSTRUCCIÓN RETLW k
VECTOR RESET
VECTOR INTERRUPCIÓN
0000 H
0004 H
SUBRUTINA0034 H
13 0
CALL SUBRUTINA
CONTINUA PROGRAMA0011 H0012 H
03FF H
RETLW d’7’
k WNivel 1 (pila) PC
W = 00000111
Funciona igual que el comando RETURN con la diferencia que carga el valor del literal “k” en W
PROG. MPAP USANDO TABLAS;AUTOR: CÉSAR AUGUSTO PEÑA c;PIC: 16F84A;FUNCION: Hace girar un motor PAP utilizando tablas (el Mpap se conecta a PORTB)
;CARACTERISTICAS:;OSCILLATOR: XT;WATCHDOG TIMER: OFF;POWER UP TIMER: ON;CODE PROTECT: OFF
INCLUDE "P16F84A.Inc";*******DEFINICION DE REGISTROS**********************************
CBLOCK .12REG1, REG2, REG3, MOTOR
ENDC;*******DEFINICION DE DATOS**************************************VALOR1 EQU .10VALOR2 EQU .40VALOR3 EQU .40
;*******PROGRAMA*************************************************ORG 00GOTO INICIOORG 05
INICIO bsf STATUS,RP0 ;PASA AL BANCO 1clrf TRISA ;CONFIGURA PUERTOS COMO SALIDASclrf TRISBbcf STATUS,RP0 ;PASA AL BANCO 0clrf PORTAclrf PORTB
PROG. MPAP USANDO TABLAS
CARGAR movlw d'4' ;W = 4movwf MOTOR
GIRAR movf MOTOR,0 ;W = MOTORcall TABLAmovwf PORTB ;PORTB = Wcall RETARDOdecfsz MOTOR ;MOTOR = MOTOR -1goto GIRARgoto CARGAR ;SI MOTOR = 0 LO RECARGA (4)
;*******TABLA DE LA SECUENCIA DEL MOTOR PAP*****************
TABLA addwf PCL,F ; PCL = PCL + Wnopretlw B'00000001'retlw B'00000010'retlw B'00000100'retlw B'00001000'
PROG. MPAP USANDO TABLAS
;*******SUBRUTINA DE RETARDOS***********************************
RETARDO movlw VALOR1movwf REG1
TRES movlw VALOR2movwf REG2
DOS movlw VALOR3movwf REG3
UNO decfsz REG3,Fgoto UNOdecfsz REG2,Fgoto DOSdecfsz REG1,Fgoto TRESreturn
END
INSTRUCCIÓN SLEEP
•La instrucción SLEEP introduce al procesador en un modo de funcionamiento que se llama de reposo o de bajo consumo.
•Detiene al oscilador y el procesador queda congelado, no ejecutando instrucciones y manteniendo el mismo valor en los puertos.
•Pone los bits PD# = 0 y TO# = 1.
•Borra el perro guardián y al divisor de frecuencia
INTERRUPCIONESVECTOR RESET
VECTOR INTERRUPCIÓN
PROGRAMA
0000 H
0004 H
0034 H
13 0
0012 H INICIO
03FF H
TRATAMIENTOINTERRUPCIÓN
RETFIE
CAUSAS DE INTERRUPCIONES
• Activación de la patita RB0/INT• Cambio de estado de uno de los pines
RB<4:7> del puerto B• Desbordamiento del temporizador TMR0• Finalización de la escritura en la EEPROM
de datos
REGISTRO DE CONTROL DE INTERRUPCIONES INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
GIE: Permiso global de interrupciones1 – Permite la ejecución de todas las interrupciones, cuyos bits de permiso
individuales también las permitan.0 – Prohíbe todas las interrupciones.
EEIE: Permiso de interrupción por fin de la escritura de la EEPROM de datos1 – Permite la Interrupción cuando finaliza la escritura de la EEPROM0 – No permite esta interrupción.
T0IE: Permiso de interrupción por sobrepasamiento del TMR01 – Permite interrupción al sobrepasarse el TMR00 – No permite esta interrupción.
INTE: Permiso de interrupción por activación de la patita RB0/INT1 – Permite interrupción al activarse RB0/INT0 – No permite esta interrupción.
REGISTRO DE CONTROL DE INTERRUPCIONES INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
T0IF: Señalizador de sobrepasamiento del TMR01 – Se pone en 1 cuando ha ocurrido sobrepasamiento0 – El TMR0 no se ha sobrepasado
INTF: Señalizador de activación de la patita RB0/INT1 – Se pone en 1 al activarse RB0/INT0 – Indica que RB0/INT aún no se ha activado
RBIF: Señalizador de cambio de estado en las patitas RB<7:4>1 – Se pone en 1 cuando cambia de estado alguno de estos pines0 – No han cambiado de estados ninguno de los pine RB<7:4>
INTERRUPCIÓN EXTERNA INT
Se utiliza para realizar subrutinas que necesiten ejecutarse inmediatamente.
Para llamar esta subrutina de interrupción es necesario activar el pinRB0/INT por medio de un flanco ascendente o descendente.
Si se desea trabajar con un flanco ascendente es necesario poner en 1 el bitINTDEG del registro OPTION y en caso contrario se pone un 0.
Para que esta interrupción pueda activarse es necesario poner en 1 los bitGIE e INTE del registro INTCON
1 x x 1 x 0 0 0GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
PROG. INTERRUPCIÓN RB0/INT;AUTOR: CÉSAR AUGUSTO PEÑA C ;PIC: 16F84A;FUNCION: USA INTERRUPCIONES (RB0), SI OCURRE UN FLANCO DE BAJADA EN EL PIN RB0;APAGA UN LED PUESTO EN RA0 DURANTE UN SEGUNDO Y VUELVE A DEJARLO PRENDIDO
;CARACTERISTICAS:;OSCILADOR: XT;WATCHDOG TIMER: OFF;POWER UP TIMER: ON;CODE PROTECT: OFF
INCLUDE "P16F84A.Inc"
;**************************** DEFINICION DE REGISTROS ***********************************CBLOCK .12
reg1,reg2,reg3endc
;**************************** DEFINICION DE DATOS ****************************valor1 equ d'8' ;DATOS PARA REATRDO DE 1 SEGUNDOvalor2 equ d'195'valor3 equ d'212'
LED equ 0 ;pin de entrada del interruptor
PROG. INTERRUPCIÓN RB0/INTorg 00goto inicio
;********************** TRATAMIENTO DE INTERRUPCIONES************************************ORG 04 ;ZONA DE TRATAMIENTO DE INTERRUPCIONESbtfss INTCON,INTFgoto NADAbcf PORTA,LEDcall RETARDObsf PORTA,LED
NADA bcf INTCON,INTFretfie
;_________________________________________________________________________________
inicio bsf STATUS,RP0 ;PASA A BANCO 1movlw b'00000000' ;CONFIGURA LOS PUERTOSmovwf TRISAmovlw b'00000001'movwf TRISBbcf OPTION_REG,NOT_RBPU ;RESISTENCIAS PULL-UP ACTIVASbcf OPTION_REG,INTEDG ;FLANCO DE BAJADA DE RB0bcf STATUS,RP0 ;VUELVE A BANCO 0clrf PORTAclrf PORTB
PROG. INTERRUPCIÓN RB0/INTbsf INTCON,INTE ;ACTIVA INTERRUPCION POR RP0bsf INTCON,GIE ;ACTIVA INTERRUPCIONES GLOBALESbcf INTCON,INTF ;PONE EN BAJO LA BANDERA DE INTERRUPCIONES POR RP0
ciclo bsf PORTA,LEDsleepgoto ciclo
;***********************subrutina para retardos***************
RETARDO movlw valor1 ;retardo de bit y mediomovwf reg1
tres movlw valor2movwf reg2
dos movlw valor3movwf reg3
uno decfsz reg3,fgoto unodecfsz reg2,fgoto dosdecfsz reg1,fgoto tresreturnend
PROG. INTERRUPCIÓN RB<7:4>;AUTOR: CÉSAR AUGUSTO PEÑA C ;PIC:16F84A;FUNCION: USA INTERRUPCIONES (RB<7:4>), SI OCURRE UN CAMBIO EN ALGUN PIN RB<7:4>;APAGA UN LED PUESTO EN RA0 DURANTE UN SEGUNDO Y VUELVE A DEJARLO PRENDIDO
;CARACTERISTICAS:;OSCILADOR: XT;WATCHDOG TIMER: OFF;POWER UP TIMER: ON;CODE PROTECT: OFF
INCLUDE "P16F84A.Inc";**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .12reg1,reg2,reg3
endc;**************************** DEFINICION DE DATOS ****************************valor1 equ d'8' ;DATOS PARA REATRDO DE 1 SEGUNDOvalor2 equ d'195'valor3 equ d'212'LED equ 0 ;pin de entrada del interruptor
PROG. INTERRUPCIÓN RB<7:4>org 00goto inicio
;********************** TRATAMIENTO DE INTERRUPCIONES************************************ORG 04 ;ZONA DE TRATAMIENTO DE INTERRUPCIONESbtfss INTCON,RBIFgoto NADAbcf PORTA,LEDcall RETARDObsf PORTA,LED
NADA bcf INTCON,RBIFretfie
;_________________________________________________________________________________________
inicio bsf STATUS,RP0 ;PASA A BANCO 1movlw b'00000000' ;CONFIGURA LOS PUERTOSmovwf TRISAmovlw b'11110000'movwf TRISBbcf OPTION_REG,NOT_RBPU ;RESISTENCIAS PULL-UP ACTIVASbcf STATUS,RP0 ;VUELVE A BANCO 0clrf PORTAclrf PORTB
PROG. INTERRUPCIÓN RB<7:4>bsf INTCON,RBIE ;ACTIVA INTERRUPCION POR CAMBIO EN EL PORTBbsf INTCON,GIE ;ACTIVA INTERRUPCIONES GLOBALESbcf INTCON,RBIF ;PONE EN BAJO LA BANDERA DE INTERRUPCIONES POR
;CAMBIO EN PORTB
ciclo bsf PORTA,LEDmovf PORTB,W ;TENER COMO BASE PARA COMPARAR EL CAMBIO EN SUS PINESsleepgoto ciclo
;***********************subrutina para retardos***************RETARDO movlw valor1 ;retardo de bit y medio
movwf reg1tres movlw valor2
movwf reg2dos movlw valor3
movwf reg3uno decfsz reg3,f
goto unodecfsz reg2,fgoto dosdecfsz reg1,fgoto tresreturnend