microcontroladores 3ra parte

Post on 15-Oct-2014

1.056 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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ña

TRANSCRIPT

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

top related