.include "m8def.inc" ; Используем ATMega8 .include "define.asm" ; Наши все определения переменных тут .include "macro.asm" ; Все макросы у нас тут .include "kernel_macro.asm" ;============SSEG============================================================= .DSEG PovCT: .byte 1 U_B: .byte 1 .equ TaskQueueSize = 11 ; Размер очереди сотытий TaskQueue: .byte TaskQueueSize ; Адрес очереди сотытий в SRAM .equ TimersPoolSize = 5 ; Количество таймеров TimersPool: .byte TimersPoolSize*3 ; Адреса информации о таймерах ;===========CSEG============================================================== .include "vectors.asm" ; Все вектора прерываний спрятаны в этом файле .ORG INT_VECTORS_SIZE ; Конец таблицы прерываний ;============================================================================= ; Interrupts procs ; Output Compare 2 interrupt ; Main Timer Service - Служба Таймеров Ядра РТОС - Обработчик прерывания OutComp2Int: TimerService ; Служба таймера RTOS RETI ; выходим из прерывания ;----------------------------------------------------------------------------- Uart_RCV: PUSH OSRG IN OSRG,UDR STS U_B,OSRG POP OSRG RETI ;============================================================================= ; Main code ;============================================================================= Reset: OUTI SPL,low(RAMEND) ; Первым делом инициализируем стек OUTI SPH,High(RAMEND) .include "init.asm" ; Все инициализации тут. Background: RCALL Fire Main: SEI ; Разрешаем прерывания. wdr ; Reset Watch DOG (Если не "погладить" "собаку". то она устроит конец света в виде reset для процессора) rcall ProcessTaskQueue ; Обработка очереди процессов rcall Idle ; Простой Ядра rjmp Main ; Основной цикл микроядра РТОС ; пока не нажмется кнопка старт торчим тут RJMP Main ;============================================================================= ;Tasks ;============================================================================= Idle: RET Fire: SetTimerTask TS_Fire,1000 LDS OSRG,U_B OUTI UDR,'A' CBI PORTD,7 NOP NOP SBI PORTD,7 LDS Counter,PovCT LDPA Lines CLR OSRG ADD ZL,Counter ADC ZH,OSRG LPM OSRG,Z+ OUT SPDR,OSRG Wait0: SBIS SPSR,SPIF RJMP Wait0 LPM OSRG,Z+ OUT SPDR,OSRG Wait1: SBIS SPSR,SPIF RJMP Wait1 LPM OSRG,Z+ OUT SPDR,OSRG Wait2: SBIS SPSR,SPIF RJMP Wait2 INC Counter INC Counter INC Counter INC Counter CPI Counter,150 BRSH Clear STS PovCT,Counter RET Clear: CLR Counter STS PovCT,Counter RET ;----------------------------------------------------------------------------- Task2: RET ;----------------------------------------------------------------------------- Task3: RET ;----------------------------------------------------------------------------- Task4: RET ;----------------------------------------------------------------------------- Task5: RET ;----------------------------------------------------------------------------- Task6: RET ;----------------------------------------------------------------------------- Task7: RET ;----------------------------------------------------------------------------- Task8: RET ;----------------------------------------------------------------------------- Task9: RET ;============================================================================= ; RTOS Here ;============================================================================= .include "kerneldef.asm" ; Подключаем настройки ядра .include "kernel.asm" ; Подклчюаем ядро ОС TaskProcs: .dw Idle ; [00] .dw Fire ; [01] .dw Task2 ; [02] .dw Task3 ; [03] .dw Task4 ; [04] .dw Task5 ; [05] .dw Task6 ; [06] .dw Task7 ; [07] .dw Task8 ; [08] .dw Task9 ; [09] Lines: .db 0b11111111,0b11111111,0b11111111 .db 0b11111111,0b11111111,0b11111111 .db 0b11000000,0b00000000,0b00000011 .db 0b11000000,0b00000000,0b00000111 .db 0b01110000,0b00000000,0b00001110 .db 0b00011100,0b00000000,0b00111000 .db 0b00000111,0b11111111,0b11100000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000011 .db 0b11110000,0b11111111,0b11111111 .db 0b01110000,0b11111111,0b11111111 .db 0b00000000,0b00000000,0b00000011 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b11111111,0b11111111,0b11111111 .db 0b11111111,0b11111111,0b11111111 .db 0b00000000,0b00111000,0b00000000 .db 0b00000000,0b00111000,0b00000000 .db 0b00000000,0b00111000,0b00000000 .db 0b00000000,0b00111000,0b00000000 .db 0b11111111,0b11111111,0b11111111 .db 0b11111111,0b11111111,0b11111111 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000 .db 0b00000000,0b00000000,0b00000000