.NOLIST .INCLUDE "m8def.inc" .LIST .CSEG ;kódový segment .DEF REG=R16 ;pracovní registr .EQU DDR=DDRD ;řízení směru .EQU PORT=PORTD ;port LDI REG,$FF OUT DDR,REG ;aktivuj výstupy LDI REG,LOW(RAMEND) OUT SPL,REG ;nastav SP na konec SRAM LDI REG,HIGH(RAMEND) OUT SPH,REG CLC ;0 do D LDI REG,0b00000000 ; pracovní registr LDI R20,0b11111111 ;počítadlo LDI R21,0b00000000 ;šířka pulzu LDI R22,0b00000001 ;aktuálně svítící pozice LDI R23,0b00000000 ;trvale 0 SMYCKA: SMYCKA1: OUT PORT,R22 ;zobrazí MOV R21,R20 ;kopíruje RCALL CEKEJ ;čeká dobu přímo úměrnou R21 MOV REG,R22 ;kopíruje ROL REG ;rotuje REG ADC REG,R23 ;.... OUT PORT,REG ;zobrazí LDI R21,255 SUB R21,R20 ;odčítání RCALL CEKEJ ;počkej DEC R20 ; změnší šířku pulzu o 1 krok BRNE SMYCKA1 ;vrací do smyčky, dokud nen R20=0 ROL R22 ;posune o 1 led ADC R22,R23 LDI R20,255 RJMP SMYCKA ;nekonečná smyčka ;čekací rutina CEKEJ: MOV R17,R21 INC R17 INC R17 LDI R18,0 CEKEJA: DEC R18 BRNE CEKEJA ;smyčka 2 LDI R18,128 ;určuje rychlost!!!!(menší číslo=rychleji,max255) DEC R17 BRNE CEKEJA ;smyčka 3 RET ;návrat