;ZKUSEBNI ;krystal 6MHz ;zakladna PWM 20ms/50Hz ; ;R7 citac casu ;R6 sepnuty puls PWM ;R5 volny pro vypocty nyni sedesat/sto procent ;DPTR nyni pro tabulku rychlosti ; ; ; ; ; ; ; ; ; ;________ Dseg bity0 data 20h ;bitiky 0 az 7 bity1 data 21h ;bitiky 8 az 15 bity2 data 22h ;bitiky 16 az 23 stavy data 23h ;bitiky 24 az 31 ramp data 30h ;citac pro cas jednoho schodu rychlosti rychl data 31h ;aktualni rychlost pro pwm 0-255 klido data 32h ;reverzacni prodleva klidu acas data 33h ;citac pritomnosti v A useku bcas data 34h ;citac pritomnosti v B useku ccas data 35h ;citac pritomnosti v C useku kcas data 36h ;citac zkousky v klidu budha data 37h ends ;________ Bseg mstoji bit 0 ;1=stoji pamet mvpred bit 1 ;1=vpřed pamet mvzad bit 2 ;1=vzad pamet stopro bit 3 ;plny signal pwm tik bit 4 ;takt casovace ramtik bit 5 ;takt ramp , takt zastaveni, takt testjizda klitik bit 6 ;1=prvni start klidových testu po jizde cenzr bit 7 ;prepinac polarity testu v klidu bank bit 8 ;volba banky rozjezdu kyvec bit 9 ;stav kyvadla oproti hlidanemu bitu v R7 astav bit 28 ;nacteny bit p3.4, zachycene obsazenosti useku bstav bit 29 ;nacteny bit p3.5 cstav bit 31 ;nacteny bit p3.7 momax bit p3.2 ;hlidani nadproud INT0 vykon bit p3.0 ;vystup pwm (1=proud) vuvol bit p3.1 ;uvolneni mustku(1=uvolni) vpred bit p3.3 ;vystup vpred (0=vpred) porych bit p1.6 ;povel rychlost (1=60)(0=100) povpre bit p1.5 ;povel vpred (0=aktivni) povzad bit p1.4 ;povel vzad (0=aktivni) useka bit p3.4 ;cidlo usek A usekb bit p3.5 ;cidlo usek B usekc bit p3.7 ;cidlo usek C vkrele bit p1.7 ;zapnuty privod proudu 0=zapnuto vjisti bit p1.3 ;jistic vypadly =1 OK=0 vastav bit p1.2 ;vystup testu useku A 1=obsazeno 0=volno vbstav bit p1.1 ;vystup testu useku B 1=obsazeno 0=volno vcstav bit p1.0 ;vystup testu useku C 1=obsazeno 0=volno ends ;________ Dseg sedes = 120 ;predvolba pro rychlost 60 stes = 255 ;predvolba pro rychlost 100 rever = 20 ;predvolba reverzni prodlevy ;to je 0,5s bibit = 255-39 ;jednou za 39 x takt procesoru se pricita +1 do registru R7 ;to je nyní vzdy za 39 x 2us = 78us ;to probiha v preruseni pres citac et0 ;kdyz se v R7 na jeho urcené váze zmeni log.uroven ;je v programu nastaven na jeden skan programu bit (tik) na log.1 ;bibit určuje cetnost preruseni pro pcm a casovani raramp = 5 ;delka rampovaciho casu (ramtik) i zakl jednotek casu dalsich prodlev ;je to nasobek casu (tik) tiku x (raramp)5 ;to je nyni 0,005 x 5 = 0,025s ;tedy vzdy za 0,025s pouze na jeden skan programu ;(to pak vychází prejeti cele rampy za 0,025 x 256 = 6,5s) prcas = 50 ;jak dlouho pozdrzis odpad ztraty pritomnosti za jizdy ;to je 1,25s klicas = 20 ;za jak dlouho otestujes uklidnenou kolej na pritomnost ;to je za 0,5s prvset = 200 ;prvni uklidneni po resetu to je asi 5s ends ;%S ;___________________________________________ org 0 ljmp start ;po resetu do inicializace systemu ;_________________________________________ org 3h ;EX0 clr vuvol ;konec uvolneni mustku setb vkrele ;vypni rele ajmp pretiz ;odskok na vyreseni pretizeni reti ;_________________________________________ ;nove PCM a citani casu ;R6 je pwm a R7 citac kroku pwm ;_______________________________________________ org 0bh ;ET0 push acc push psw ;uloz rozpracovane inc r7 ;citej 0-255 jako 0-20ms mov a,r6 ;nacti pwm jz nanulo ;pcm je nula skoc cpl a ;neguj pcm jz naplnc ;pcm je max skoc cpl a ;neguj pcm dec a ;zmensi o 1 do rozsahu 0 - 253 clr c ;cy do 0 subb a,r7 ;pcm minus krok casovani pwm jc nanulo ;krok vetsi nez pwm pak na nula skoc naplnc: setb vykon ;PWM drz v jedna pop psw pop acc ;vrat rozpracovane ulozene reti ;navrat nanulo: clr vykon ;PWM drz v nule pop psw pop acc ;vrat rozpracovane ulozene reti ;navrat ;_____________________________________________ ;########################################## ;####### rutiny preruseni ############# ;########################################## org 50h ;########################################## ;######## start program ############ ;########################################## start: mov p3,#255 ;osetreni vystupu na log.1 mov p1,#255 clr vykon ;zatim mustek bez vykonu pwm clr vuvol ;blok druhé pulky mustku clr vpred ;ne vpred tedy zpet mov sp,#60h ;premisteni zasobniku mov R6,#0 ;pwm na nulu mov th0,#bibit ;zakladna pwm 78us 6MHz 39kroku mov th1,#0 ;zapnuti pwm za 256us mov tmod,#00100010b ;dva osmi bitove citace s predvolbou setb et0 ;povolení přerušení od základny PWM clr et1 ;zakázání přerušení od spinani PWM setb px0 ;priorita preruseni pro jisteni proudu setb it0 ;vsup do preruseni nadproudu s tylem setb ex0 ;povoleni preruseni od nadproudu setb tr0 ;uvolneni citani do casovace tr0 clr tr1 ;tr1 necitat setb ea ;uvolneni vsech preruseni ;######################################## zaklad: clr a ;do Acc nulu mov R7,a ;vynuluj citac casu mov R6,#0 ;pwm je nula clr vykon ;vystup pwm do klidu clr vpred ;ani vystup dopredu setb mstoji ;priznak klidu clr mvpred ;smazat priznak vpred clr mvzad ;smazat priznak vzad mov rychl,a ;nulová rychlost mov ramp,#255 ;citac casu pro ramtik po resetu mov klido,#rever ;citac klidu po reverzaci setb klitik ;na zacatku stojime mov acas,#100 ;cas po zapnuti kdy kolej obsazenost mov bcas,#100 mov ccas,#100 clr bank ;######################################## ;######### cykl programu ######### ;######################################## cykl: acall tikani ;podprogramu hlidani casu (R7) a pro PWM acall rampa ;citaní casu pro rampu a dalsi jina citání casu a zpozdeni ;sjmp cykl10 ;servisni skok rucni acall fira ;hlidac rychlosti a smeru acall rizeni ;prevod rychlosti na pwm (R6) acall tesjiz ;test v usecich za jizdy acall klitst ;test v klidu s blokaci... cykl10: ;acall rucne ;servisni podprogram bez (fira, testjiz, klits, rizeni) clr vkrele ;nahozeni vykonoveho rele clr vjisti ;jistic nahozem vystup do simatiku setb vuvol ;uvolneni druhe pulky mustku ajmp cykl ;########################################## ;######### podprogramy a tabulky dat ########## ;########################################## rucne: acall rizeni ;prevod rychlosti skrze tabulku setb vpred ;povel vpred setb vuvol ;uvolni mustek sjmp ruc10 jb ramtik,ruc10 ;taktovani zmeny na tlacitku casem ramtik ret ;rychlost jako pri rozjezdu ruc10: mov c,povpre ;plus jnc ruc20 sjmp ruc30 ruc20: inc rychl ;plus 1 mov a,rychl jnz ruc22 ;vyjdeli 0 pak minus 1 dec rychl ruc22: ret ruc30: mov c,povzad ;minus jnc ruc40 ret ruc40: dec rychl ;minus 1 mov a,rychl cpl a ;vyjdeli FFh pak plus jeden jnz ruc42 inc rychl ruc42: ret ;########################################## fira: jb ramtik,fira10 ;test na cas povoleny ke zmene rychlosti ret ;nenili zpet ;------------------------------- fira10: mov a,#sedes ;nacti pro rychlost sedesat mov c,porych ;TEST0 je pozadovana rychlost sto jnc fira15 ;NE0 pak ponech sedes a skoc mov a,#stes ;ANO0 pak nastav stes fira15: mov R5,a ;a ulozit do registru R5 kde je pozadavek rychlosti ;------------------------------- ;------------------------------- mov c,povpre ;TEST1 zda ma povel jenom vpred cpl c anl c,povzad jnc fira20 ;NE1nema skoc na test zda jen vzad fivpre: ;ANO1ma jen povel vpred mov a,rychl ;TEST2 zda jede jnz fivp10 ;ANO2jede tedy skoc na test jak kam jede fivp05: nop ;NE2nejede jb mstoji,fistrp ;TEST3 zda uz chvilku stoji ANO3 STARTUJ VPRED sjmp fistuj ;NE3 tak drz ZASTAVOVANI fivp10: jb mvpred,fivp20 ;ANO2jede a TEST4 zda dopredu sjmp fistuj ;NE4 bohuzel jede zpet pak zastavuj fivp20: mov a,rychl ;ANO4 TEST7 zda rychlost dosazena xrl a,R5 jnz fivp31 ret ;ANO7jede vpred a rychlost OK fivp31: mov a,rychl ;NE7 a TEST8 jede pomaleji nez pozadavek rychlosti clr c subb a,R5 jc fivp33 dec rychl ;NE8 nejede pomaleji ZPOMAL ret fivp33: inc rychl ;ANO8 jede pomaleji ZRYCHLI ret ;------------------------------- ;------------------------------- fira20: mov c,povzad ;test zda ma povel jenom vzad cpl c anl c,povpre jnc fistuj ;nema tedy skoc na ZASTAVUJ fivzad: ;ANO1ma jen povel vzad mov a,rychl ;TEST2 zda jede jnz fivz10 ;ANO2jede tedy skoc na test jak kam jede fivz05: nop ;NE2nejede jb mstoji,fistrz ;TEST3 zda uz chvilku stoji ANO3 STARTUJ VZAD sjmp fistuj ;NE3 tak drz ZASTAVOVANI fivz10: jb mvzad,fivz20 ;ANO2jede a TEST4 zda dozadu sjmp fistuj ;NE4 bohuzel jede vpred pak ZASTAVUJ fivz20: mov a,rychl ;ANO4 TEST7 zda rychlost dosazena xrl a,R5 jnz fivz31 ret ;ANO7jede vzad a rychlost OK fivz31: mov a,rychl ;NE7 a TEST8 jede pomaleji nez pozadavek rychlosti clr c subb a,R5 jc fivz33 dec rychl ;NE8 nejede pomaleji ZPOMAL ret fivz33: inc rychl ;ANO8 jede pomaleji ZRYCHLI ret ;------------------------------- ;------------------------------- fistuj: mov c,povzad ;test zda jsou oba povely smeru orl c,povpre jc fist02 ;jeden nebo zadny, skoc setb bank ;navolena rozjezdova tabulka2 fistop: mov rychl,#0 ;okamzity stop rychlosti fist02: mov a,rychl ;nacti rychlost jnz fist20 ;TEST1 zda rychlost nula fist05: clr vpred ;vypnout mustek clr mvpred ;ANO1 uz stojime clr mvzad ;shozeni pametovych bitu pohybu fist08: jnb mstoji,fist09 ;TEST2 uz je uvolneno pro dalsi pojezd ret ;ANO2 fist09: jnb ramtik,fist10 ;citej jen podle casu djnz klido,fist10 ;NE2 TEST3 uz dostatecne dlouho stojime mov klido,#rever setb mstoji ;menic stoji dostatecne dlouho setb klitik ;ted jsme zastavili pro klidove testy useku fist10: ret ;NE3 jeste chvilku postojime fist20: dec rychl ;NE1 jeste brzdime BRZDI o JEDNU DOLU ret ;------------------------------- ;------------------------------- fistrp: clr mvzad ;nastavit pameti pohybu setb mvpred setb vpred ;nastavit smer mustku clr mstoji ;bit ze nestojime clr klitik ;smaz je to jen sychr inc rychl ;a hned o jeden nahoru ret ;------------------------------- ;------------------------------- fistrz: clr mvpred ;nastavit pameti pohybu setb mvzad clr vpred ;nastavit smer mustku clr mstoji ;bit ze nestojime clr klitik ;je to jen sichr inc rychl ;a hned o jeden nahoru ret ;########################################## ;########################################## rampa: clr ramtik ;smaz bitik casu ramp jnb tik,ramend ;nenili bitik casu skoc djnz ramp,ramend ;odcitej cas pro bitik ramp nenili skoc setb ramtik ;cas odcitan nahod bitik casu ramp mov ramp,#raramp ;napln citac ramp predvolbou pro dalsi odcitani ;to je 5 x 0,005 = 0,025 sek na jeden schod v rychlosti ;to je 6s na 256 schodu ramend: ret ;########################################## ;### pro krystal 6MHz ############## ;########################################## tikani: clr tik ;smaz bitik casu mov a,R7 ;nactení casoveho citace co plus 1 bit to 78us anl a,#64 ;vyber hlidaneho bitu v R7 ;vyber 128 128*78us´to je 10ms 1920freekroku ;vyber 64 64*78us´to je 5ms 1920/2 jz nimec ;bit je 0 skoc jb kyvec,timec ;bit je 1 kyv je 1 pak skoc ret nimec: jnb kyvec,timec ;bit je 0 kyv je 0 pak skoc ret timec: cpl kyvec :kyvadlo preklop setb tik ;nahod priznak tiku na jeden scan tikend: ret ;########################################## ;########################################## tesjiz: jnb mstoji,tesj00 ;test za jizdy je mozny, skoc ret tesj00: mov stavy,p3 ;nacteni vstupu ABC pritomnosti v usecich klispo: mov a,#prcas ;predloha nastaveni casu do Acc testes: jb astav,tesj01 ;test zda je Astav na log.1, tedy pasivni, pak skoc dal mov acas,a ;jeli aktivni nastav cas preklenuti setb vastav ;nastav na log. 1 vystup VAstav tesj01: jb bstav,tesj02 ;test zda je Bstav na log.1, tedy pasivni, pak skoc dal mov bcas,a ;jeli aktivni nastav cas preklenuti setb vbstav ;nastav na log. 1 vystup VBstav tesj02: jb cstav,tesj03 ;test zda je Cstav na log.1, tedy pasivni, pak skoc dal mov ccas,a ;jeli aktivni nastav cas preklenuti setb vcstav ;nastav na log. 1 vystup VCstav ;------------------------------- tesj03: jb ramtik,tesj04 ;test zda muzeme citat cas, ano, pak skoc ret ;jinak konec tesj04: djnz acas,tesj05 ;odecti acas, pokud neodcasovano, skoc dal clr vastav ;odcasovano, pak smaz vystup A stav tesj05: djnz bcas,tesj06 ;odecti bcas, pokud neodcasovano, skoc dal clr vbstav ;odcasovano, pak smaz vystup B stav tesj06: djnz ccas,tesend ;odecti ccas, pokud neodcasovano, skoc dal clr vcstav ;odcasovano, pak smaz vystup C stav tesend: ret ;vyskoc ;########################################## ;########################################## klitst: jb mstoji,klit00 ;klidovy test je mozny, skoc ret klit00: jb ramtik,klit01 ;test zda muzeme citat cas, ano, pak skoc ret klit01: jb klitik,klit02 ;jeli to stav tesne po zastaveni, skoc djnz kcas,tesj04 ;odcitej cas do dalsiho testu, nenili, hlidej cas stavu vystupu klit02: mov kcas,#klicas ;cas dalsiho testu nadesel, zapis dalsi predlohu casu clr klitik ;smaz priznak prvniho testu v klidu clr et1 clr et0 ;zakaz preruseni vystupu jb cenzr,klitpl ;stridac polarity testu klitmi: clr vpred ;spusteni smeru vzad setb vykon ;spusteni vykonu nop ;prodleva zdvihnuti napeti na kolejich nop nop nop nop nop nop nop nop nop nop nop nop nop nop mov stavy,p3 ;nacteni stavu z portu3 clr vykon ;konec vykonu kliend: setb et0 ;uvolneni vystupu a casovace clr bank ;smaz na tabulku 1 cpl cenzr ;prepnuti polarity pro priste sjmp klispo ;vystupy testu spolecne s neklidovym testem klitpl: setb vpred ;spusteni smeru vpred setb vykon ;spusteni vykonu nop ;prodleva zdvihnuti napeti na kolejich nop nop nop nop nop nop nop nop nop nop nop nop nop nop mov stavy,p3 ;nacteni stavu z portu3 clr vykon ;konec vykonu sjmp kliend ;na spolecne ;########################################## ;########################################## rizeni: mov dptr,#tab02 ;nastav ukazatel na zacatek tabulky02 mov a,rychl ;nacti neprepocitanou rychlost jb bank,semka ;skoc pro tabulku2 mov dptr,#tab01 ;nastav ukazatel na zacatek tabulky01 semka: movc a,@a+dptr ;vytahni kod z tabulky rychlosti mov R6,a ;vlož kod rychlosti do PWM mov a,rychl ;nacti jeste rychlost jz rize20 ;testni zda je nula ret rize20: clr vykon ; vypni nahozene pwm to je jen sichr ret ;########################################## ;########################################## pretiz: clr ea ;zakaz preruseni clr vykon ;pwm do nuly clr vuvol ;mustek vypnout setb vkrele ;pojistka vypnute rele (1) setb vjisti ;jistic vystup NOK do simatiku.. setb vastav ;zablokuj useky obsazenosti setb vbstav ;1 jsou obsazeny, blokovány setb vcstav sjmp pretiz ;cekej na restart pocitace ;########################################## ;########################################## tab01: ;Mozna deformace rozjezdu tabulkou ;rozjezd od nuly db 00,01,02,03,04,05,06,07,08,09 db 10,11,12,13,14,15,16,17,18,19 db 20,21,22,23,24,25,26,27,28,29 db 30,31,32,33,34,35,36,37,38,39 db 40,41,42,43,44,45,46,47,48,49 db 50,51,52,53,54,55,56,57,58,59 db 60,61,62,63,64,65,66,67,68,69 db 70,71,72,73,74,75,76,77,78,79 db 80,81,82,83,84,85,86,87,88,89 db 90,91,92,93,94,95,96,97,98,99 db 100,101,102,103,104,105,106,107,108,109 db 110,111,112,113,114,115,116,117,118,119 db 120,121,122,123,124,125,126,127,128,129 db 130,131,132,133,134,135,136,137,138,139 db 140,141,142,143,144,145,146,147,148,149 db 150,151,152,153,154,155,156,157,158,159 db 160,161,162,163,164,165,166,167,168,169 db 170,171,172,173,174,175,176,177,178,179 db 180,181,182,183,184,185,186,187,188,189 db 190,191,192,193,194,195,196,197,198,199 db 200,201,202,203,204,205,206,207,208,209 db 210,211,212,213,214,215,216,217,218,219 db 220,221,222,223,224,225,226,227,228,229 db 230,231,232,233,234,235,236,237,238,239 db 240,241,242,243,244,245,246,247,248,249 db 250,251,252,253,254,255 ret ;########################################## ;########################################## tab02: ;Mozna deformace rozjezdu tabulkou ;rozjezd od R6 je 50d db 0,50,51,52,53,54,55,56,57,58 db 59, 60,61,62,63,64,65,66,67,68 db 69,70,71,72,73,74,75,76,77,78 db 79,80,81,82,83,84,84,85,85,86 db 86,87,87,88,88,89,89,90,90,90 db 91,91,91,92,92,92,93,93,93,94 db 94,94,95,95,95,96,96,96,97,97 db 97,98,98,98,99,99,99,100,100,100 db 101,101,101,102,102,102,103,103,103,104 db 104,104,105,105,105,106,106,106,107,107 db 107,108,108,108,109,109,110,110,111,111 db 112,112,113,113,114,115,116,117,118,119 db 120,121,122,123,124,125,126,127,128,129 db 130,131,132,133,134,135,136,137,138,139 db 140,141,142,143,144,145,146,147,148,149 db 150,151,152,153,154,155,156,157,158,159 db 160,161,162,163,164,165,166,167,168,169 db 170,171,172,173,174,175,176,177,178,179 db 180,181,182,183,184,185,186,187,188,189 db 190,191,192,193,194,195,196,197,198,199 db 200,201,202,203,204,205,206,207,208,209 db 210,211,212,213,214,215,216,217,218,219 db 220,221,222,223,224,225,226,227,228,229 db 230,231,232,233,234,235,236,237,238,239 db 240,241,242,243,244,245,246,247,248,249 db 250,251,252,253,254,255 ret ;########################################## ;########################################## tab03: ;Mozna deformace rozjezdu tabulkou ;pouze pracovni tabulka rozjezd od R6 je 30d db 05,30,31,31,32,32,33,33,34,34 db 35, 35,36,36,37,37,38,38,39,39 db 40,40,41,41,42,42,43,43,44,44 db 45,45,46,46,47,47,48,48,49,49 db 50,50,51,51,52,52,53,53,54,54 db 55,55,56,56,57,57,58,58,59,59 db 60,61,62,63,64,65,66,67,68,69 db 70,71,72,73,74,75,76,77,78,79 db 80,81,82,83,84,85,86,87,88,89 db 90,91,92,93,94,95,96,97,98,99 db 100,101,102,103,104,105,106,107,108,109 db 110,111,112,113,114,115,116,117,118,119 db 120,121,122,123,124,125,126,127,128,129 db 130,131,132,133,134,135,136,137,138,139 db 140,141,142,143,144,145,146,147,148,149 db 150,151,152,153,154,155,156,157,158,159 db 160,161,162,163,164,165,166,167,168,169 db 170,171,172,173,174,175,176,177,178,179 db 180,181,182,183,184,185,186,187,188,189 db 190,191,192,193,194,195,196,197,198,199 db 200,201,202,203,204,205,206,207,208,209 db 210,211,212,213,214,215,216,217,218,219 db 220,221,222,223,224,225,226,227,228,229 db 230,231,232,233,234,235,236,237,238,239 db 240,241,242,243,244,245,246,247,248,249 db 250,251,252,253,254,255 ret ;%E ends end