Dobrý den,
sehnal jsem si (nevim jestli správný, ale na 90% jo) programovaci kod, ktery ma “ovladat” jednoho robota a chtel jse se zeptat jestli tento kod (nize) je ve spravnem tvaru a jak ho nahraji do te ridici jednotky (vse je pripojene k PC a spravne to komunikuje) mam AVR studio ale nevim pak dal jak nahrat ten kod do te ridici jednotky (Atmega8) a v jake pripone ma byt soubor ulozen .
;**********************************************************************
;Robot stopar (pouze cást pro sledování cáry)
;**********************************************************************
;*********** INICIALIZACE *********************************************
;**********************************************************************
;----- Definicní soubor Atmega8 -----
.include "m8def.inc"
;----- Pojmenování registru -----
.def Temp = R16
.def Delay1 = R17
.def Delay2 = R18
.def Delay3 = R19
;----- Nastavení portu a registru
RESET: ldi Temp,0b00000001
out DDRB,Temp ; nastavuje portu B
ldi Temp,0b11101111
out DDRC,Temp ; nastavení portu C
ldi Temp,0b11111111
out DDRD,Temp ; nastavuje port D jako výstupní
ser Delay1
ser Delay2
ser Delay3
;*********** Inicializace zásobníku
ldi Temp,LOW(RAMEND)
out SPL,Temp
ldi Temp,HIGH(RAMEND)
out SPH,Temp
;**********************************************************************
;*********** HLAVNÍ PROGRAM *******************************************
;**********************************************************************
;----------------------------------------------------------------------
;------------ HLAVNÍ NABÍDKA FUNKCÍ -----------------------------------
;----- Funkce 1 - Demo ----------
MENU: ldi Temp,0b01111001 ; do Temp binarni kod pro 1 na disp
out PORTD,Temp ; zobrazení 1 na disp
sbic PINB,0x6
rjmp JEDNA
rjmp MENU
JEDNA: sbis PINB,0x6
rjmp MENU2
;-----
sbis PINB,0x7
rjmp DEMO
;-----
rjmp JEDNA
;----- Funkce 2 - Sledování cáry ----------
MENU2: ldi Temp,0b00100100 ; do Temp binarni kod pro 2 na disp
out PORTD,Temp ; zobrazení 2 na disp
sbic PINB,0x6
rjmp DVA
rjmp MENU2
DVA: sbis PINB,0x6
rjmp MENU3
;-----
sbis PINB,0x7
rjmp LINE
;-----
rjmp DVA
;----- Funkce 3 - ukázka detekce prekážek infrasenzorem ----------
MENU3: ldi Temp,0b00110000 ; do Temp binarni kod pro 3 na disp
out PORTD,Temp ; zobrazení 3 na disp
sbic PINB,0x6
rjmp TRI
rjmp MENU3
TRI: sbis PINB,0x6
rjmp MENU4
;-----
sbis PINB,0x7
rjmp FCE1
;-----
rjmp TRI
;----- Funkce 4 - ukázka detekce prekážek tykadly ----------
MENU4: ldi Temp,0b00011001 ; do Temp binarni kod pro 4 na disp
out PORTD,Temp ; zobrazení 4 na disp
sbic PINB,0x6
rjmp CTYR
rjmp MENU4
CTYR: sbis PINB,0x6
rjmp MENU5
;-----
sbis PINB,0x7
rjmp FCE2
;-----
rjmp CTYR
;----- Funkce 5 - náhodná jízda ----------
MENU5: ldi Temp,0b00010010 ; do Temp binarni kod pro 5 na disp
out PORTD,Temp ; zobrazení 5 na disp
sbic PINB,0x6
rjmp PET
rjmp MENU5
PET: sbis PINB,0x6
rjmp MENU
;-----
sbis PINB,0x7
rjmp NAHOD
;-----
rjmp PET
;----------------------------------------------------------------------
;------------ FUNKCE SLEDOVÁNÍ CÁRY -----------------------------------
LINE: rcall DLY2S
ldi Temp,0b00100100 ; do Temp binarni kod pro 2 na disp
out PORTD,Temp ; zobrazení 2 na disp
;----- Levé kolo ----------
LEVE: cbi PORTC,1 ; *** 0 na motor 1
;-----
sbic PINB,0x1 ; nactení levého cidla
rjmp PRAVE
;-----
sbi PORTC,1 ; *** 1 na motor 1
sbi PORTC,5 ; ir led
ldi Delay1,36
DLY1: dec Delay1
brne DLY1
sbis PINC,0x4 ; kontrola IR prijímace
rjmp OBJET
cbi PORTC,5 ; ir led
ldi Delay1,32
DLY2: dec Delay1
brne DLY2
sbi PORTC,5 ; ir led
ldi Delay1,36
DLY11: dec Delay1
brne DLY11
sbis PINC,0x4 ; kontrola IR prijímace
rjmp OBJET
cbi PORTC,5 ; ir led
ldi Delay1,32
DLY22: dec Delay1
brne DLY22
;----- Pravé kolo ----------
PRAVE: cbi PORTC,3 ; *** 0 na motor 2
;-----
sbic PINB,0x2 ; nactení pravého cidla
rjmp LEVE
;-----
sbi PORTC,3 ; *** 1 na motor 2
sbi PORTC,5 ; ir led
ldi Delay1,36
DLY3: dec Delay1
brne DLY3
sbis PINC,0x4 ; kontrola IR prijímace
rjmp OBJET
cbi PORTC,5 ; ir led
ldi Delay1,32
DLY4: dec Delay1
brne DLY4
sbi PORTC,5 ; ir led
ldi Delay1,36
DLY33: dec Delay1
brne DLY33
sbis PINC,0x4 ; kontrola IR prijímace
rjmp OBJET
cbi PORTC,5 ; ir led
ldi Delay1,31
DLY44: dec Delay1
brne DLY44
nop
rjmp LEVE ; smycka jízda
;------------------
OBJET: cbi PORTC,0 ; objíždecí manévr
cbi PORTC,1
cbi PORTC,2
cbi PORTC,3
rcall VPRAVO
rcall VPRED
rcall VLEVO
rcall VPRED
rcall VPRED
rcall VLEVO
cbi PORTC,0
cbi PORTC,1
cbi PORTC,2
cbi PORTC,3
;-----
sbi PORTC,1
sbi PORTC,3
LOOP4: sbic PINB,0x1 ; nalezena cára?
rjmp NUL
rjmp LOOP4
NUL: cbi PORTC,0
cbi PORTC,1
cbi PORTC,2
cbi PORTC,3
rcall VPRAVO
rjmp LEVE ; pokracování ve sledování cáry
;*********************************************************************
;********** PODPROGRAMY *************************************
;*********************************************************************
;----- Podprogram zpoždení 2s ----------
DLY2S: ldi Temp,0b01111111 ; do Temp binarni kod pro . na disp
out PORTD,Temp ; zobrazí .
dec Delay1
brne DLY2S
ldi Delay1,100 ; dává do R16 konstantu 16
dec Delay2
brne DLY2S
dec Delay3
brne DLY2S
ret
;----- Podprogram otocení o 90° vpravo ----------
VPRAVO: ser Delay1
ser Delay2
ldi Delay3,4
LOOP: cbi PORTC,0
cbi PORTC,3
sbi PORTC,0
sbi PORTC,3
dec Delay1
brne LOOP
dec Delay2
brne LOOP
dec Delay3
brne LOOP
nop ; doladení 90°
nop
nop
nop
nop
nop
nop
cbi PORTC,0
cbi PORTC,3
ret
;----- Podprogram otocení o 90° vlevo ----------
VLEVO: ser Delay1
ser Delay2
ldi Delay3,4
LOOP2: cbi PORTC,1
cbi PORTC,2
sbi PORTC,1
sbi PORTC,2
dec Delay1
brne LOOP2
dec Delay2
brne LOOP2
dec Delay3
brne LOOP2
nop ; doladení 90°
nop
nop
nop
nop
nop
nop
cbi PORTC,1
cbi PORTC,2
ret
;----- Podprogram kroku vpred ----------
VPRED: ser Delay1
ser Delay2
ldi Delay3,10
LOOP3: cbi PORTC,1
cbi PORTC,3
sbi PORTC,1
sbi PORTC,3
dec Delay1
brne LOOP3
dec Delay2
brne LOOP3
dec Delay3
brne LOOP3
cbi PORTC,1
cbi PORTC,3
ret
administrator: přejmenováno z "Programování ATmega 8"