Académique Documents
Professionnel Documents
Culture Documents
INTERURTOR MOTOR
abierto paro
Resolucin:
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) Programacin
; 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
Solucin del examen parcial
1.
a) .
b) .
c) Explicar cmo funciona el TIMER1 como contador
Para los temporizadores tipo A adems de poner el valor de TCS=1, el
bit TSYNC (TxCON) <2> deber igualmente tomar valor 1 para realizar
la sincronizacin con la seal de reloj externa.
Los temporizadores trabajando en modo contador sncrono no
funcionaran dentro del modo de reposo (SLEEP).
d) Como selecciona el TIMER1 en modo sncrono
Se lleva a cabo cuando el bit TCS del registro de control del
temporizador (TxCON) tiene valor 0.
e) Cul es la funcin 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 seal de
menor frecuencia a la salida que ser la seal de reloj de entrada al
registro TMR0. El Preescaler es una facilidad para cuando la seal de
entrada es demasiado rpida para nuestros propsitos y necesitamos
ralentizarla.
f) Cul es la funcin 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 interrupcin 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 instruccin:
Para limitar la corriente del pin de Reset y el botn 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