Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Micro Resolucion
Micro Resolucion
INTERURTOR MOTOR
abierto paro
Resolución:
a)
+5V
R1
10k
16 8 U1
U2
1 4 2 3
MCLR RB0/CN4/RP0/AN2/EMUD1/PGD1 IN1 VSS VS OUT1
20 5 7 6
VDDCORE RB1/CN5/RP1/AN3/EMUC1/PGC1 IN2 OUT2
6 1
+5V RB2/CN6/RP2/AN4 EN1
7
RB3/CN7/RP3/AN5
11
RB4/CN1/RP4/SOSCI/EMUD3/PGD3
14 9 +88.8
RB5/CN27/RP5/ASDA1 EN2
28 15 10 11
AVDD RB6/CN24/RP6/ASCL1 IN3 OUT3
27 16 15 14
AVSS RB7/CN23/RP7/INT0 IN4 GND GND OUT4
17
RB8/CN22/RP8/SCL1/PWM2H1/TCK
18
RB9/CN21/RP9/SDA1/PWM2L1/TDO
21 L293D
RB10/CN16/RP10/PWM1H3/TDI
2 22
SWT2 SWT1 3
RA0/CN2/VREF+/AN0/EMUD2/PGD2RB11/CN15/RP11/PWM1L3/TMS
RA1/CN3/VREF-/AN1/EMUC2/PGC2 RB12/CN14/RP12/PWM1H2
23
9 24
RA2/CN30/CLKI/OSCI RB13/CN13/RP13/PWM1L2
10 25
RA3/CN29/CLKO/OSCO RB14/CN12/RP14/PWM1H1
0
12 26
RA4/CN0/T1CK/SOSCO/EMUC3/PGC3 RB15/CN11/RP15/PWM1L1
DSPIC33FJ12MC202
b) Programación
; Configuration bits:
;..............................................................................
;config __FBORPOR,PBOR_ON&MCLR_EN
.equ cont,#0x0810
.equ cont1,#0x0812
.equ nvuelta_H,#0x0814
.equ nvuelta_AH,#0x0816
.global xx
.global yy
.global zz
.global __reset
.text
__reset:
goto main
.org 100
main:
; mov #_SPLIM_init,W0
; mov W0,SPLIM
nop
;*******************************configuration de puertos**************
mov W0,TRISB
mov W1,TRISA
loop:
swt1:
swt2_A:
;*********** SUBPROGRAMAS***********
GIRO_HORARIO:
bra pausa_H
GIRO_ANTIHORARIO:
bra pausa_AH
mov #0x0000,W0
mov W0,PORTB
call delay
mov #0x000A, W0
call delay
mov #0x0009, W0
call delay
mov #0x0005, W0
call delay
mov #0x0006, W0
call delay
mov #0x0000,W0
mov W0,PORTB
call delay
BRA resta
mov #0x0000,W0
mov W0,PORTB
call delay
mov #0x0006, W0
call delay
mov #0x0005, W0
call delay
mov #0x0009, W0
call delay
mov #0x000A, W0
call delay
mov #0x0000,W0
mov W0,PORTB
call delay
bra resta1
DETENER:
mov W0,PORTB
call delay
mov #0x0000,W0
mov W0,PORTB
call delay
ENCLAVADO_H:
BTSS PORTA,#04
mov #0x0000,W0
mov W0,PORTB
call delay
ENCLAVADO_AH:
BTSS PORTA,#04
BRA loop ; se dirige a la rutina loop
mov W3,nvuelta_H
return
mov W3,nvuelta_AH
return
BTSS PORTA,#02
BRA OPCION_1
BRA OPCION_2
OPCION_1:
BTSS PORTA,#04
BRA loop
BRA XX
OPCION_2:
BTSS PORTA,#04
BRA XX
BRA loop
;*************************************************************
mov W2,cont
mov W1,cont1
bra NZ,XX
dec cont
bra NZ,YY
return
;****************************************************
.end
Solución del examen parcial
1.
a) .
b) .
c) Explicar cómo funciona el TIMER1 como contador
Para los temporizadores tipo A además de poner el valor de TCS=1, el
bit TSYNC (TxCON) <2> deberá igualmente tomar valor 1 para realizar
la sincronización con la señal de reloj externa.
Los temporizadores trabajando en modo contador síncrono no
funcionaran dentro del modo de reposo (SLEEP).
d) Como selecciona el TIMER1 en modo síncrono
Se lleva a cabo cuando el bit TCS del registro de control del
temporizador (TxCON) tiene valor ‘0’.
e) Cuál es la función del Preescaler y describa
El Preescaler es un circuito que permite modificar la frecuencia del reloj
de entrada del Timer0, dividiendo esta y generando una nueva señal de
menor frecuencia a la salida que será la señal de reloj de entrada al
registro TMR0. El Preescaler es una facilidad para cuando la señal de
entrada es demasiado rápida para nuestros propósitos y necesitamos
ralentizarla.
f) Cuál es la función del registro PR1
El registro PR1 por defecto vale 0xFFFF con lo que el periodo del
Timer1 será ese, pero podemos ajustarlo al valor que queramos, lo que
nos permite seleccionar una frecuencia de interrupción programable muy
útil.
R1
10k
16 8 U1
U2
1 4 2 3
MCLR RB0/CN4/RP0/AN2/EMUD1/PGD1 IN1 VSS VS OUT1
20 5 7 6
VDDCORE RB1/CN5/RP1/AN3/EMUC1/PGC1 IN2 OUT2
6 1
+5V RB2/CN6/RP2/AN4 EN1
7
RB3/CN7/RP3/AN5
11
RB4/CN1/RP4/SOSCI/EMUD3/PGD3
14 9 +88.8
RB5/CN27/RP5/ASDA1 EN2
28 15 10 11
AVDD RB6/CN24/RP6/ASCL1 IN3 OUT3
27 16 15 14
AVSS RB7/CN23/RP7/INT0 IN4 GND GND OUT4
17
RB8/CN22/RP8/SCL1/PWM2H1/TCK
18
RB9/CN21/RP9/SDA1/PWM2L1/TDO
21 L293D
RB10/CN16/RP10/PWM1H3/TDI
2 22
SWT2 SWT1 3
RA0/CN2/VREF+/AN0/EMUD2/PGD2RB11/CN15/RP11/PWM1L3/TMS
RA1/CN3/VREF-/AN1/EMUC2/PGC2 RB12/CN14/RP12/PWM1H2
23
9 24
RA2/CN30/CLKI/OSCI RB13/CN13/RP13/PWM1L2
10 25
RA3/CN29/CLKO/OSCO RB14/CN12/RP14/PWM1H1
0
12 26
RA4/CN0/T1CK/SOSCO/EMUC3/PGC3 RB15/CN11/RP15/PWM1L1
DSPIC33FJ12MC202
Ciclo de instrucción:
Para limitar la corriente del pin de Reset y el botón pulsador a
0.5mA, utilizar una resistencia de 10kΩ.
;..............................................................................
.equ cont,#0x0810
.equ cont1,#0x0812
.equ nvuelta_H,#0x0814
.equ nvuelta_AH,#0x0816
.global __reset
.text
;*************Programa principal *****************
__reset:
goto main
.org 100
;**************Configuracion de Puertos*****************************+
main:
mov #0x0000, W0
mov W0,LATB ; Limpio los valores de los latch
mov W0,TRISB ; Ponemos todos los pines de salida RB0-15
............................................
;Programa Principal
;..............................................................................
loop :
swt:
BTSS PORTD,#0 ; lee el estado del switch
BRA DETENER ; switch=0, se dirige a la rutina DETENER
BRA GIRO ; switch=1, se dirige a la rutina GIRO
;*********SUBRUTINAS********************************************
DETENER:
mov #0x0000,W0 ; se apaga el motor
mov W0,PORTB
call delay ; se dirige a la rutina delay
BRA swt ; se dirige a ala rutina swt
GIRO:
call GIRO_HORARIO ; se dirige a la rutina GIRO_HORARIO
call pausa_H ; se dirige a la rutina pausa_H
call GIRO_ANTIHORARIO ; se dirige a la rutina GIRO_ANTIHORARIO
call pausa_AH ; se dirige a la rutina pausa_AH
BRA swt ; se dirige a la rutina swt
GIRO_HORARIO:
call NUMERO_DE_VUELTAS_H; se dirige a la rutina numero de
vueltas_H
resta: dec nvuelta_H ; decrementa el numero de vueltas en 1
bra NZ, HORARIO ; si el numero de vuelta es diferente de 0 se va a
la rutina HORARIO, y si es 0 retorna donde fue llamado
return
GIRO_ANTIHORARIO:
call NUMERO_DE_VUELTAS_AH; numero de vueltas
resta1: dec nvuelta_AH; decrementa el numero de vueltas en 1
bra NZ, ANTIHORARIO; si el numero de vuelta es diferente de 0 se
va a la rutina ANTIHORARIO, y si es 0 retorna donde fue llamado
return
mov #0x000A, W0
mov W0, PORTB
call delay
mov #0x0009, W0
mov W0, PORTB
call delay
mov #0x0005, W0
mov W0, PORTB
call delay
mov #0x0006, W0
mov W0, PORTB
call delay
mov #0x0000,W0
mov W0,PORTB
call delay
BRA resta
mov #0x0000,W0
mov W0,PORTB
call delay
mov #0x0006, W0
mov W0, PORTB
call delay
mov #0x0005, W0
mov W0, PORTB
call delay
mov #0x0009, W0
mov W0, PORTB
call delay
mov #0x000A, W0
mov W0, PORTB
call delay
mov #0x0000,W0
mov W0,PORTB
call delay
bra resta1
pausa_H: ; rutina para detener el giro 0.5 seg despues de una vuelta el
sentido horario
mov #0x0000,W0
mov W0,PORTB
pausa_AH: ; rutina para detener el giro 0.5 seg despues de una vuelta
en sentido antihorario
mov #0x0000,W0
mov W0,PORTB
INICIO_DELAY:
bclr T1CON,#TON ; desabilito el timer
clr TMR1 ;TIMER 1=0
MOV #0x4CAB,W0 ;Cargo valor en PR1
MOV W0,PR1
mov #0x8030,W0; Configuracion del registro T1CON
mov W0,T1CON
BCLR IFS0,#T1IF ; T1IF=0
return
;**************** delay**********************
delay: ;Subrutina de Retardo en dos lazos
mov # 0x5000 ,W2
mov W2,cont
YY: mov # 0x0005, W1
mov W1,cont1
BTSS PORTD,#0 ; lee el estado del switch
BRA loop
XX: dec cont1
bra NZ,XX
dec cont
bra NZ,YY
return