Вот составил я программу, но почему то не получается: Помогите пожалуйста. Светодиод подключен к PD2.
Код: Выделить всё
; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************
;Define here the variables
.def temp=r16
.def temp1=r17
.def temp2=r18
.def temp3=r19
.def temp4=r20
.cseg
.org 0
; Define here Reset and interrupt vectors
rjmp RESET ; Reset
rjmp INT0 ; INT0
rjmp INT1 ; INT1
rjmp INT2 ; INT2
rjmp PCINT0 ; PCINT0
rjmp PCINT1 ; PCINT1
rjmp $000C ; PCINT2
rjmp $000E ; PCINT3
rjmp $0010 ; Watchdog Timeout
rjmp $0012 ; Timer2 CompareA
rjmp $0014 ; Timer2 CompareB
rjmp $0016 ; Timer2 Overflow
rjmp $0018 ; Timer1 Capture
rjmp $001A ; Timer1 CompareA
rjmp $001C ; Timer1 CompareB
rjmp $001E ; Timer1 Overflow
rjmp $0020 ; Timer0 CompareA
rjmp $0022 ; Timer0 CompareB
rjmp $0024 ; Timer0 Overflow
rjmp $0026 ; SPI Transfer Complete
rjmp $0028 ; USART0 RX Complete
rjmp $002A ; USART0,UDR Empty
rjmp $002C ; USART0 TX Complete
rjmp $002E ; Analog Comparator
rjmp $0030 ; ADC Conversion Complete
rjmp $0032 ; EEPROM Ready
rjmp $0034 ; 2-wire Serial
rjmp $0036 ; SPM Ready
rjmp $0038 ; USART1 RX Complete
rjmp $003A ; USART1,UDR Empty
rjmp $003C ; USART1 TX Complete
;****************************************************
;******************************
;RESET:
INT0:
INT1:
INT2:
PCINT0:
PCINT1:
PCINT2:
PCINT3:
WDT:
TIM2_COMPA:
TIM2_COMPB:
TIM2_OVF:
TIM1_COMPA:
TIM1_COMPB:
;TIM1_OVF:
TIM0_COMPA:
TIM0_COMPB:
TIM0_OVF:
SPI_STC:
USART0_RXC:
USART0_UDRE:
USART0_TXC:
ANA_COMP:
;ADC:
EE_RDY:
TWI:
SPM_RDY:
USART1_RXC:
USART1_UDRE:
USART1_TXC:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset: ldi r16,0b01111111 ;настройка PORTD
out 0x0A,r16
ldi r16,0b00000100 ;загрузка указателя стека
out $3E,r16
ldi r16,0b10111111 ;загрузка указателя стека
out $3D,r16
ldi r18,0b00100111 ;разрешить прерывание компаратора (TIMSK1)
sts 0x6F,r18
ldi Temp,0b00000101 ;тактовый сигнал = CK/1024 (TCCR1B)
sts 0x81,Temp
ldi Temp,0x4E ;инициализация компаратора
sts 0x89,Temp ;(OCR1AH)
ldi Temp,0x20
sts 0x88,Temp ;(OCR1AL)
ldi Temp1,0b00000100 ;инициализация индикатора
ldi Temp,0 ;обнуление таймера
sts 0x85,Temp ;(TCNT1H)
sts 0x84,Temp ;(TCNT1L)
sei ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf:
rjmp Inf ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************
TIM1_OVF:
ldi Temp,0 ;обнуление таймера
sts 0x85,Temp
sts 0x84,Temp
Shift: cpi Temp1,0b00000000 ;сравнить с 0
breq Init ;если равно - загрузка нач. знач.
ldi Temp1,0b00000000
rjmp Output ;перейти на вывод в порт
Init: ldi Temp1,0b00000100 ;загрузить нач. значение
Output: out 0x2B,Temp1 ;вывод в порт D
reti ;выход из обработчика
Последний раз редактировалось
Valek87 Пт сен 09, 2011 12:03:00, всего редактировалось 2 раза.