; Автор: shilow@ukr.net ; Дата: май-июнь 2012 ; Название: avm ; Версия: 1 ; Имя файла: avm.asm, avm.spl7, avm.lay ; Для AVR: ATtiny24A ; Тактовая частота: 8MHz, внутренний RC-генератор ; Выполняемые функции: Автомобильный вольтемтр ; см. ReadMe.txt ; схема по "Вариант 5" ;****************************** ; инклуды .nolist .include "tn24Adef.inc" .list ;****************************** ; опредления .def job0 = r0 .def job1 = r1 .def job2 = r2 ;.def job3 = r3 .def LED1 = r4 .def LED2 = r5 .def LED3 = r6 .def LED4 = r7 .def msrL = r14 .def msrH = r15 .def temp = r16 ; рабочая переменная .def tmp1 = r17 .def cnt1 = r18 .def cnt2 = r19 .def LEDN = r20 .def msek5 = r24 ; 5-ти мсек интервалы .def flags = r25 ;****************************** ; константы .equ AtBCD0 = 0 ;address of job0 .equ AtBCD2 = 2 ;address of job2 .equ AtLED1 = 4 ;address of LED1 .equ MSEK100 = 7 ; 7bit of flags == 0.1 sek .equ NEED_DOT = 6 ; нужна точка .equ DISP_PORT = PORTA .equ DISP_DDR = DDRA .equ LA1 = 4 .equ LA2 = 5 .equ LA3 = 6 .equ LA4 = 7 .equ SER_PORT = PORTB .equ SER_DDR = DDRB .equ SCK = 0 .equ DATA = 1 .equ LOCK = 2 .equ T1DIVL = 0x8F .equ T1DIVH = 0xFD ; 0x10000-8MHz/64/200Hz .equ VREF = 500 ; опорное напряжение * 10 мВ .equ SPH = 0x3e .equ DOT_BIT = 5 ; bit5 -- точка ;****************************** ; макросы ; сохраняем в стек SREG и R16 .MACRO PUSHF PUSH R16 IN R16,SREG PUSH R16 .ENDM ; восстанавливаем из стека SREG и R16 .MACRO POPF POP R16 OUT SREG,R16 POP R16 .ENDM ;****************************** ; ячейки в СОЗУ ;.DSEG ;.ORG SRAM_START ;Display: .byte 4 ; 4 байта для индикатора ;****************************** ; константы в EEPROM ;.ESEG ;smpl1: .DW 0x0000 ; sample 1 ;smpl2: .DB 0x05 ; sample 2 ;****************************** ; память программ .CSEG .ORG 0 ;****************************** ; Таблица векторов прерываний rjmp RESET ; Reset Handler reti;jmp INT0 ; IRQ0 Handler reti;jmp PCINT0 ; PCINT0 Handler reti;jmp PCINT1 ; PCINT1 Handler reti;jmp WDT ; Watchdog Interrupt Handler reti;jmp TIM1_CAPT ; Timer1 Capture Handler reti;jmp TIM1_COMPA ; Timer1 Compare A Handler reti;jmp TIM1_COMPB ; Timer1 Compare B Handler rjmp TIM1_OVF ; Timer1 Overflow Handler reti;jmp TIM0_COMPA ; Timer0 Compare A Handler reti;jmp TIM0_COMPB ; Timer0 Compare B Handler reti;jmp TIM0_OVF ; Timer0 Overflow Handler reti;jmp ANA_COMP ; Analog Comparator Handler rjmp ADCC ; ADC Conversion Handler ; rjmp EE_RDY ; EEPROM Ready Handler ; rjmp USI_STR ; USI STart Handler ; rjmp USI_OVF ; USI Overflow Handler ;****************************** ;;;;; Первичная инициализация RESET: ldi temp,high(RAMEND); Main program start out SPH,temp ldi temp,low(RAMEND) out SPL,temp; Set Stack Pointer to top of RAM ; выкл. аналог, компаратор ldi temp,1<