Модель светофора. Сделана на микроконтроллере AVR
Текст программы на асме
.include "tn2313def.inc"
.list
.def mode=R16
.def temp=R17
.def i =R18 ; счетчик для таймера
.def j =R19 ; код картинки
.def temp1=R20
.cseg
.org 0
rjmp start
reti ;rjmp EXT_INT0 ; IRQ0 Handler
reti ; rjmp EXT_INT1 ; IRQ1 Handler
reti ; rjmp TIM2_COMP ; Timer2 Compare Handler
reti ; rjmp TIM2_OVF ; Timer2 Overflow Handler
reti ; rjmp TIM1_CAPT ; Timer1 Capture Handler
reti ; rjmp TIM1_COMPA ; Timer1 CompareA Handler
reti ; rjmp TIM1_COMPB ; Timer1 CompareB Handler
reti ; rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
reti ; rjmp SPI_STC ; SPI Transfer Complete Handler
reti ; rjmp USART_RXC ; USART RX Complete Handler
reti ; rjmp USART_UDRE ; UDR Empty Handler
rjmp TIM0_OVF ; reti ; rjmp USART_TXC ; USART TX Complete Handler
reti ; rjmp ADC ; ADC Conversion Complete Handler
reti ; rjmp EE_RDY ; EEPROM Ready Handler
reti ; rjmp ANA_COMP ; Analog Comparator Handler
reti ; rjmp TWSI ; Two-wire Serial Interface Handler
reti ; rjmp SPM_RDY ; Store Program Memory Ready Handler
.org 0x0060
start:
;ldi temp,HIGH(RAMEND)
; out SP,temp ; указываем границу стека (последняя ячейка ОЗУ)
; ldi temp,LOW(RAMEND)
; out SPL,temp ; указываем границу стека (последняя ячейка ОЗУ)
ldi temp,0x80
out ACSR, temp ;выключаем компаратор
ldi temp,0b11111111 ;настройка порта B
out DDRB,temp
ldi temp,0b00010000
out PORTB,temp
ldi temp,158
out TCNT0,temp
ldi temp,0x01
out TIMSK,temp ;разрешение прерывания по переполнению Т/С
sei ;разрешаем прерывания
ldi temp,0x05
out TCCR0,temp
ldi ZH,High(sm001*2)
ldi ZL,Low(sm001*2)
lpm i,z+
lpm j, z+
out PORTB,j
loop:
rjmp loop
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; подпрограммы
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TIM0_OVF:
ldi temp,158
out TCNT0,temp
dec i
brne ret2
lpm i,Z+ ; загрузить значение для счетчика
CPI i,255
brne znvo
ldi ZH,High(sm001*2)
ldi ZL,Low(sm001*2)
lpm i,Z+ ; загрузить значение для счетчика
znvo: lpm j,Z+
out PORTB,j
ret2:
reti
sm001:
.db 50, 0b00100001, 5, 0b00100000, 5, 0b00100001, 5, 0b00100000, 5, 0b00100001, 5, 0b00100000, 5, 0b00100001, 2, 0b00100000
.db 20, 0b00110010, 2, 0b00110100
.db 50, 0b00001100, 5, 0b00000100, 5, 0b00001100, 5, 0b00000100, 5, 0b00001100, 5, 0b00000100, 5, 0b00001100, 2, 0b00000100
.db 20, 0b00010110, 2, 0b00100110, 255
.db 50, 0b00100001