La cuestion es que tengo mi programa listo, pareciera estar todo bien, pero cuando lo simulo en proteus no corre bien. Ya lo he puesto en la realidad y hace lo mismo que en el proteus...
Les dejo mi programa y la simulacion en proteus.
.list
.include "usb1286def.inc"
.nolist
.def temp = r21
.equ ocl = 0x0100
.equ och = 0x0101
.org $0000
rjmp reset
reset:
ldi temp, high(RAMEND)
sts SPH, temp
ldi temp, low(RAMEND)
sts SPL, temp
ldi temp, 0x07
out DDRD, temp
ldi temp, 0xFF
out DDRC, temp
ldi temp, 0x20
out DDRB, temp
cbi PinD,1
sbi PinD,2
ldi temp, 0x00
out PinC, temp
ldi temp, 0x00;
sts och, temp
sts ocl, temp
rcall confReloj
revisar:
sbic PinD,3
rcall mas
sbic PinD,4
rcall menos
ldi r17, byte3(70000)
ldi r18, high(70000)
ldi r19, low(70000)
rcall delay
rjmp revisar
confReloj:
ldi temp, high(15625)
sts ICR1H, temp
ldi temp, low(15625)
sts ICR1L, temp
ldi temp,0b10000010
sts TCCR1A, temp
ldi temp,0b00011011
sts TCCR1B,temp
ldi temp,0b00000000
sts TCCR1C,temp
ldi temp, high(0)
sts OCR1AH, temp
ldi temp, low(0)
sts OCR1AL, temp
ret
mas:
lds r16, ocl
lds r17, och
ldi temp, high(15624)
cpi r16, low(15624)
cpc r17, temp
breq finma
ldi temp, low(1953)
add r16, temp
ldi temp, high(1953)
adc r17, temp
sts ocl, r16
sts och, r17
sts OCR1AL, r16
sts OCR1AH, r17
in temp, PinC
inc temp
out PortC, temp
finma: ret
menos:
lds r16, ocl
lds r17, och
ldi temp, high(0)
cpi r16, low(0)
cpc r17, temp
breq finme
subi r16, low(1953)
sbci r17, high(1953)
sts ocl, r16
sts och, r17
sts OCR1AL, r16
sts OCR1AH, r17
in temp, PinC
dec temp
out PortC, temp
finme: ret
delay:
subi r19, 1
sbci r18, 0
sbci r17, 0
brcc pc-3
ret
Para programar use el avr studio. Lo debug ahi y me parecio que corria bien. no se si tengo algo mal configurado en el avr.. o si realmente soy malo para esto..
Adjunto: la simulacion en proteus
Les dejo mi programa y la simulacion en proteus.
.list
.include "usb1286def.inc"
.nolist
.def temp = r21
.equ ocl = 0x0100
.equ och = 0x0101
.org $0000
rjmp reset
reset:
ldi temp, high(RAMEND)
sts SPH, temp
ldi temp, low(RAMEND)
sts SPL, temp
ldi temp, 0x07
out DDRD, temp
ldi temp, 0xFF
out DDRC, temp
ldi temp, 0x20
out DDRB, temp
cbi PinD,1
sbi PinD,2
ldi temp, 0x00
out PinC, temp
ldi temp, 0x00;
sts och, temp
sts ocl, temp
rcall confReloj
revisar:
sbic PinD,3
rcall mas
sbic PinD,4
rcall menos
ldi r17, byte3(70000)
ldi r18, high(70000)
ldi r19, low(70000)
rcall delay
rjmp revisar
confReloj:
ldi temp, high(15625)
sts ICR1H, temp
ldi temp, low(15625)
sts ICR1L, temp
ldi temp,0b10000010
sts TCCR1A, temp
ldi temp,0b00011011
sts TCCR1B,temp
ldi temp,0b00000000
sts TCCR1C,temp
ldi temp, high(0)
sts OCR1AH, temp
ldi temp, low(0)
sts OCR1AL, temp
ret
mas:
lds r16, ocl
lds r17, och
ldi temp, high(15624)
cpi r16, low(15624)
cpc r17, temp
breq finma
ldi temp, low(1953)
add r16, temp
ldi temp, high(1953)
adc r17, temp
sts ocl, r16
sts och, r17
sts OCR1AL, r16
sts OCR1AH, r17
in temp, PinC
inc temp
out PortC, temp
finma: ret
menos:
lds r16, ocl
lds r17, och
ldi temp, high(0)
cpi r16, low(0)
cpc r17, temp
breq finme
subi r16, low(1953)
sbci r17, high(1953)
sts ocl, r16
sts och, r17
sts OCR1AL, r16
sts OCR1AH, r17
in temp, PinC
dec temp
out PortC, temp
finme: ret
delay:
subi r19, 1
sbci r18, 0
sbci r17, 0
brcc pc-3
ret
Para programar use el avr studio. Lo debug ahi y me parecio que corria bien. no se si tengo algo mal configurado en el avr.. o si realmente soy malo para esto..
Adjunto: la simulacion en proteus