Здравстуйте!
Продскажите пожалуйста где у меня ошибка. Я написал программу для ATtiny13A. В симуляторе AVR Studio все работает как надо, а как прошиваю ничего не горит. Пробывал прошить скачаную программу из инета, все заработала.
Это моя первая программа, опыта работы с AVR Studio нет. Программатор AVR Dragon, прошивку программатора обновил вчера через AVR Studio.
Код
.device ATtiny13A
.nolist
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\tn13Adef.inc"
.list
.def temp = r16
.def Delay1 = r17
.def Delay2 = r18
.def Delay3 = r19
.cseg
.org 0
rjmp RESET; Reset Handler
rjmp EXT_INT0; IRQ0 Handler
reti;rjmp PCINT0; PCINT0 Handler
reti;rjmp TIM0_OVF; Timer0 Overflow Handler
reti;rjmp EE_RDY; EEPROM Ready Handler
reti;rjmp ANA_COMP; Analog Comparator Handler
reti;rjmp TIM0_COMPA; Timer0 CompareA Handler
reti;rjmp TIM0_COMPB; Timer0 CompareB Handler
reti;rjmp WATCHDOG; Watchdog Interrupt Handler
reti;rjmp ADC; ADC Conversion Handler
;*******************************************************************************
*******
Reset:
;задержка запуска после сброса
ldi Temp,0
ldi Temp,0
;Назначаем входы и выходы портов (0-вход, 1-выход)
ldi temp, 0b111101
out DDRB, temp
;Включаем подтяжку и задаем начальное состояние выходов
ldi temp, 0b000010
out PORTB ,temp
;Настраиваем регистр MCUCR на разрешение прерываний с 0 на 1
;и устанавливаем режим Power-down
ldi temp, 0b00110011
out MCUCR, temp
;разрешаем внешние прерывания на INT0
ldi temp, 0b01000000
out GIMSK, temp
sei ;разрешить прерывания
EXT_INT0:
sei
ldi temp, 0b00110011
out MCUCR, temp
sbis PinB, 1;ждем нажатия кнопки (0-выполняем, 1-пропускаем)
sleep
puch:;ждем отпускания кнопки
sbic PinB, 1
rjmp puch
;Настраиваем разрешение прерываний с 1 на 0
ldi temp, 0b00110010
out MCUCR, temp
Loop:
sbi PortB, 4 ;включаем светодиод
;задержка 7 милисекунд
ldi Delay1, 0x78
ldi Delay2, 0x05
ldi Delay3, 0x00
rcall Delay
cbi PortB, 4 ;тушим светодиод
;задержка 1 милисекунда
ldi Delay1, 0xC8
ldi Delay2, 0x00
ldi Delay3, 0x00
rcall Delay
;если кнопка не нажата продолжаем гореть
sbis PinB, 1
rjmp Loop
puch1:;ждем отпускания кнопки
sbic PinB, 1
rjmp puch1
rjmp EXT_INT0
Delay:
subi Delay1,1
sbci Delay2,0
sbci Delay3,0
brcc Delay
ret
Вот схема всего устройства. Это фонарь с магнитным управлением, кнопку нажал светодиод загорелся, еще раз нажал потух и микроконтроллер ушол в спящий режим. Я на первом этапе поставил только геркон, 2 резистора и светодиод, вместо транзистора.