Sunteți pe pagina 1din 9

.

nolist
.include "C:\VMLAB\include\m8def.inc"
.list
.def instruccion=R16
.def dato=R17
.def PWM=r21
.dseg
.org $60
.cseg
.org 0
rjmp Inicio
Inicio:

ldi R16,high(RAMEND)

;Valor inicial del puntero de pila

out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16

;Configura puertos B (datos) y C (control)


Configura_puertos:

ldi R16,$7F
out DDRD,R16
ldi R16,0b00110000
out DDRC,R16
ldi R16,$02

;PC0, PC1 y PC2: lineas de control

;PC0=E PC1=RS PC2=R/W

out ddrb,r16
ldi r26,0b00010000
ldi r20,$00
ldi r16,$01
out PORTD,r16

; inicialmente el pin PD1 a 1

Pulsadorinicial:
in r17,pinc
andi r17,$01
cpi r17,0
breq Pulsadorinicial

Esperainicial:
in r17,pinc
andi r17,$01
cpi r17,0
brne Esperainicial

ldi r16,$02
out PORTD,r16

Cambiogiro:
out PORTC,r26

Pulsador:
in r19,pinc

andi r19,$07
mov r22,r19
cpi r19,0
breq Pulsador

Espera:
in r19,pinc
andi r19,$07
cpi r19,0
brne Espera

Espera2:
in r19,pinc
andi r19,$07
cpi r19,0
brne Espera2

; =============================
;
;

delay loop generator


10000 cycles:

; ----------------------------; delaying 9999 cycles:


ldi R29, $21
WGLOOP0: ldi R30, $64
WGLOOP1: dec R30
brne WGLOOP1

dec R29
brne WGLOOP0
; ----------------------------; delaying 1 cycle:
nop
; =============================

cpi r22,$01
breq velX
cpi r22,$02
breq cambio
cpi r22,$04
breq Continua
nop

cambio:
cpi r26,0b00010000
breq cambiarlo
ldi r27,0b00010000
sub r26,r27
andi r26,0b00110000
out portc,r26
rjmp Pulsador

cambiarlo:
ldi r26,0b00100000

andi r26,0b00110000
out portc,r26
rjmp Pulsador

Continua:
cpi r20,9
breq Pulsador
inc r20
cpi r20,0
breq vel0
cpi r20,1
breq vel1
cpi r20,2
breq vel2
cpi r20,3
breq vel3
cpi r20,4
breq vel4
cpi r20,5
breq vel5
cpi r20,6
breq vel4
cpi r20,7
breq vel3
cpi r20,8
breq vel2

ldi r20,1
rjmp vel1

velX:
ldi r23,high(0)
ldi r24,low(0)
ldi r25,0b00000001
out PORTD,r25
rjmp ConfigPWM2
vel0:
ldi r23,high(0)
ldi r24,low(0)
ldi r25,0b00000010
out PORTD,r25
rjmp ConfigPWM
vel1:
ldi r23,high(2000)
ldi r24,low(2000)
ldi r25,0b00000100
out PORTD,r25
rjmp ConfigPWM
vel2:
ldi r23,high(3000)
ldi r24,low(3000)
ldi r25,0b00001100
out PORTD,r25

rjmp ConfigPWM
vel3:
ldi r23,high(4150)
ldi r24,low(4150)
ldi r25,0b00011100
out PORTD,r25
rjmp ConfigPWM
vel4:
ldi r23,high(6000)
ldi r24,low(6000)
ldi r25,0b00111100
out PORTD,r25
rjmp ConfigPWM
vel5:
ldi r23,high(8000)
ldi r24,low(8000)
ldi r25,0b01111100
out PORTD,r25
rjmp ConfigPWM

ConfigPWM:
in r28,pinc
andi r28,0b00001000
cpi r28,0
breq ConfigPWM
out OCR1AH,r23

out OCR1AL,r24
ldi r16,high(8333)
out ICR1H,r16
ldi r16,low(8333)
out ICR1L,r16
ldi r16,(1<<COM1A1|0<<COM1A0|1<<WGM11|0<<WGM10)
out TCCR1A,r16
ldi r16,(1<<WGM13|1<<WGM12|0<<CS12|0<<CS11|1<<CS10)
out TCCR1B,r16
rjmp Pulsador

ConfigPWM2:
in r28,pinc
andi r28,0b00001000
cpi r28,0
breq ConfigPWM2
out OCR1AH,r23
out OCR1AL,r24
ldi r16,high(8333)
out ICR1H,r16
ldi r16,low(8333)
out ICR1L,r16
ldi r16,(1<<COM1A1|0<<COM1A0|1<<WGM11|0<<WGM10)
out TCCR1A,r16
ldi r16,(1<<WGM13|1<<WGM12|0<<CS12|0<<CS11|1<<CS10)
out TCCR1B,r16

rjmp inicio

S-ar putea să vă placă și