Školní projekt Světla na křižovatce, zapojení semaforu

[code]
include MOD51
;$INCLUDE(MOD51)
org 0 ; Jelikož nepoužíváš žádná přerušení, tak je možno začínat od nuly
;ajmp START ;jinak se doporučuje posunout počátek až za adresy přerušení

;HLAVNÍ PROGRAM - START - *******************************************************************************************
;org 2Bh ;mám ten dojem, že toto je doporučovaná adresa pro 89C51
START: JB P3.2, OR_HL_VEDL_BLIK ; bude blikat oranžová na hlavní a vedlejší s periodou 1 s, se střídou 1:1
JMP CER_CHODCI_SVITI ; není-li splněna první podmínka, bude svíti červená chodci

     JB      P3.0, PODM_2_CASTI       ; testování brány P3.0   na log. 1, pokud ano -> na navesti

;HLAVNÍ PROGRAM - KONEC - *******************************************************************************************

;**********************************
ZPOZ_1_SEKUNDA: mov R3,#251 ;*
prd3: mov R2,#234 ;*
prd2: mov R1,#7 ;*
prd1: djnz R1,prd1 ;*
djnz R2,prd2 ;*
djnz R3,prd3 ;*
Ret ;*
;**********************************
ZPOZ_15_SEKUND: mov R3,#254 ;*
pes3: mov R2,#115 ;*
pes2: mov R1,#255 ;*
pes1: djnz R1,pes1 ;*
djnz R2,pes2 ;*
djnz R3,pes3 ;*
Ret ;*
;**********************************
ZPOZ_3_SEKUND: mov R3,#254 ;*
krk3: mov R2,#23 ;*
krk2: mov R1,#255 ;*
krk1: djnz R1,krk1 ;*
djnz R2,krk2 ;*
djnz R3,krk3 ;*
Ret ;*
;**********************************
ZPOZ_20_SEKUND: mov R3,#255 ;*
prc3: mov R2,#153 ;*
prc2: mov R1,#255 ;*
prc1: djnz R1,prc1 ;*
djnz R2,prc2 ;*
djnz R3,prc3 ;*
Ret ;*
;**********************************

OR_HL_VEDL_BLIK: clr P1.4 ; zhasni ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
setb P1.4 ; rozsvit ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
clr P1.1 ; zhasni ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
setb P1.1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
SJMP START
;****************************************************************************
CER_CHODCI_SVITI: setb P1.7 ; svítí červená chodci
SJMP START
;****************************************************************************
PODM_2_CASTI: LCALL ZPOZ_15_SEKUND ; po 15 sekundách další instrukce
setb P1.1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_3_SEKUND ; po 3 sekundách další instrukce
setb P1.0 ; rozsvit ČERVENÁ HLAVNÍ
setb P1.7 ; na 20 rozsvit ČERVENÁ CHODCI
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ČERVENÁ CHODCI
clr P1.7 ; ČERVENÁ CHODCI zhasnutá
setb P1.6 ; rozsviceni ZELENA CHODCI 20 s
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ZELENAÁ CHODCI

END[/code]

51čkový assembler nezná SJMP. Změna stavu bitu se dělá pomocí clr nebo setb, nikoli mov.
U návěstí CER_CHODCI_SVITI a PODM_2_CASTI ti chyběly dvojtečky.