Presentation laddar. Vänta.

Presentation laddar. Vänta.

Maskinorienterad Programmering 1 Genomgång av laborationer EDA 480 – Maskinorienterad Programmering 2009/2010 Genomgång av laborationer: ”Programutveckling.

Liknande presentationer


En presentation över ämnet: "Maskinorienterad Programmering 1 Genomgång av laborationer EDA 480 – Maskinorienterad Programmering 2009/2010 Genomgång av laborationer: ”Programutveckling."— Presentationens avskrift:

1 Maskinorienterad Programmering 1 Genomgång av laborationer EDA 480 – Maskinorienterad Programmering 2009/2010 Genomgång av laborationer: ”Programutveckling i assembler” Arbetsbok för MC12, kapitel 4

2 Maskinorienterad Programmering 2 Genomgång av laborationer Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando Anpassnings- elektronik Borrmaskin Mikrodator Operatör Klocka

3 Maskinorienterad Programmering Borrmaskin-Robot Sensor för detektering av referensmärke på arbetsstycke Borrmotor med ON/OFF knapp Arbetsstycke (Dolt) Kretskort med effektelektronik och anslutning mot styrkort för borrmaskin. Stegmotor för rotation av arbetsstycke. Solenoid för sänkning av borr Tryckfjäder för höjning av borr Sensor för borr i topp- eller bottenläge 3 Genomgång av laborationer

4 Maskinorienterad Programmering Simulatorn för borrmaskinen Arbetsstycke Indikator för Alarm Indikator för Motor On Borrade hål märks ut Control-fönster: Styrord till borrmaskinen Status-fönster: Statussignaler från borrmaskinen New disc: Här väljer du olika arbetsstycken 4 Genomgång av laborationer

5 Maskinorienterad Programmering ·starta borrmotorn ·stoppa borrmotorn ·sänk borret ·höj borret ·vrid (stega) arbetsstycket ett steg ·vrid (stega) arbetsstycket till referenspositionen ·borra ett hål ·borra hål längs cirkeln enligt ett bestämt mönster. Specifikation 5 Genomgång av laborationer

6 Maskinorienterad Programmering 6 Genomgång av laborationer

7 Maskinorienterad Programmering Styrord till borrmaskinen 7 Genomgång av laborationer Utport: Drill Control stegpuls borrmotor fram/back solenoid larmsignal Bit 4 = 1: Larm på Bit 3 = 1: Borret sänks Bit 2 = 1: Borrmotorn roterar Bit 1 = 1: Medurs vridning Bit 0: Pos flank Stegpuls Logiknivå: ”Aktiv hög” Att göra ”RESET” på borrmaskinen således: LDAA#0; Passiva signaler STAA$

8 Maskinorienterad Programmering Genomgång av laborationer 8 Statusord från borrmaskinen Inport: Drill Status referensposition borr uppe Bit 2 = 1: Borr i bottenläge Bit 1 = 1: Borr i toppläge Bit 0 = 1: Referensposition borr nere Logiknivå: ”Aktiv hög” Anm: Statusporten ansluts till adress $600 i laborations- systemet

9 Maskinorienterad Programmering Genomgång av laborationer 9 Testförfarande DSInputEQU$600; Dip Switch Input DCtrlEQU$0400; Drill Control Output DStatusEQU$0401; Drill Status Input LoopLDAADSInput; Läs strömbrytare STAADCtrl; Ge styrord LDABDStatus; Läs status BRA Loop Uppgift 74

10 Maskinorienterad Programmering Villkorlig assemblering ger korrekta portadresser 10 Genomgång av laborationer ; Definiera macro ’SIM’ för test i simulator #defineSIM DSInputEQU$600; Dip Switch Input DCtrlEQU$0400; Drill Control Output #ifdefSIM DStatusEQU$0401; Drill Status Input #else DStatusEQU$0600; Drill Status Input #endif Anm: ”Dip Switch Input” och borrmaskin kan inte användas samtidigt i laborationssystemet (MC12).

11 Maskinorienterad Programmering Använd USE-direktivet 11 Genomgång av laborationer ; DTEST1.s12 #defineSIM USE”DRILLDEFS.S12” LoopLDAADSInput; Läs strömbrytare STAADCtrl; Ge styrord LDABDStatus; Läs status BRA Loop Anm: Både DRILLDEFS och IODEFS förekommer som namn här i arbetsboken, använd endast DRILLDEFS.S12 ;DRILLDEFS.S12 DSInputEQU$600; Dip Switch Input DCtrlEQU$0400; Drill Control Output # ifdefSIM DStatusEQU$0401; Drill Status Input # else DStatusEQU$0600; Drill Status Input # endif

12 Maskinorienterad Programmering Genomgång av laborationer 12 Inledande uppgift med borrmaskinen 1)Arbetsstycket vrids till referensposition. 2)Hål borras 3)Arbetsstycket vrids medurs ett steg 4)Hål borras 5)Arbetsstycket vrids medurs ett steg 6)Hål borras 7)Arbetsstycket vrids medurs tre steg 8)Hål borras 9)En larmsignal ges som indikation på att uppgiften är klar. ; Dtest2 USE DRILLDEFS.S12 ORG$1000 LDAA#0; Reset STAADCtrl JSRTillRefPos JSRBorra JSRVrid1steg JSRBorra JSRVrid1steg JSRBorra JSRVrid1steg JSRBorra JSRGeLarm Loop:BRALoop Vrid1steg:RTS TillRefPos:RTS Borra:RTS GeLarm:RTS

13 Maskinorienterad Programmering Genomgång av laborationer 13 Att vrida arbetsstycket Uppgift 80 b 0 ←0 b 0 ←1 b 1 ←0

14 Maskinorienterad Programmering Genomgång av laborationer 14 Att borra ett hål b 2 ←1 b 3 ←1 b 3 ←0 b 2 ←0 b 2 =1 ?

15 Maskinorienterad Programmering Genomgång av laborationer 15 Att vrida arbetsstycket till referenspositionen b 0 =1 ?

16 Maskinorienterad Programmering Genomgång av laborationer 16 Att bara ändra en bit i taget * Läs nuvarande styrord LDAADCtrl * Nollställ lämplig bit ANDA#xx * Skriv nytt styrord STAADCtrl ;sekvensen är funktionellt ;likvärdig med: BCLR#~xx,DCtrl Fungerar inte här ty porten är ”icke läsbar” utport…

17 Maskinorienterad Programmering Kopia av styrordet 17 Genomgång av laborationer Variabel DCCopy ska hela tiden ha samma värde som DCtrl hade haft om porten varit läsbar… För att nollställa en bit används nu: LDAADCCopy ANDA#Bitmönster STAADCtrl STAADCCopy för att ettställa en bit används: LDAADCCopy ORAA#Bitmönster STAADCtrl STAADCCopy DCCopyRMB1

18 Maskinorienterad Programmering Subrutiner för att manipulera styrregistret OUTONE och OUTZERO 18 Genomgång av laborationer * Subrutin OUTONE. Läser kopian av * borrmaskinens styrord på adress * DCCopy. Ettställer en av bitarna och * skriver det nya styrordet till * utporten DCTRL samt tillbaka till * kopian DCCopy. * Biten som nollställs ges av innehållet * i B-registret (0-7) vid anrop. * Om (B) > 7 utförs ingenting. * Anrop:LDAB#bitnummer *JSROUTONE * Utdata:Inga * Registerpåverkan:Ingen * Anropade subrutiner:Inga ”bitnummer” = 0..7

19 Maskinorienterad Programmering Genomgång av laborationer 19 Realtid - Fördröjningar Simulator STEP Simulator RUN Simulator RUN FAST Hårdvara Instruktioner/ sekund ?

20 Maskinorienterad Programmering Genomgång av laborationer 20 • Starta borrmotorn (vänta tills den är uppe i varv, c:a 1 sekund) • Vrid arbetsstycket ett steg (vänta tills det har vridits till rätt position, ca 200 ms) • Lyft borret (vänta tills borret har kommit ovanför arbetsstycket, ca 300ms) • etc Fördröjningar i mekaniska delar

21 Maskinorienterad Programmering Genomgång av laborationer 21 ************************************** * SUBRUTIN – DELAY * Beskrivning:Skapar en fördröjning om * ANTAL x 500 ms. * Anrop: LDAA #6 Fördröj 6*500ms= 3s * JSR DELAY * Indata:Antal intervall,om 500 ms i A * * Utdata:Inga * Register-påverkan:Ingen * Anropad subrutin:Ingen. **************************************

22 Maskinorienterad Programmering Genomgång av laborationer 22 DELAYPSHA PSHX TSTA BEQDExit ;Fördröjningsvärde noll ; Konstanten 'Konst' måste ; bestämmas... ALOOPLDX#Konst XLOOPLEAX-1,X NOP CPX#0 BNEXLOOP DECA BNEALOOP ; Ytterligare fördröjning DExitPULX PULA RTS Programmerad tidsfördröjning

23 Maskinorienterad Programmering Genomgång av laborationer 23 Använd villkorlig assemblering #ifdefSIM #ifdefRUNFAST * Konstant vid Run Fast KonstEQUXXXX #else * Konstant vid Run KonstEQUYYYY #endif #else KonstEQUZZZZ #endif Uppgift 90 Bestäms experimentellt med simulator Bestäms experimentellt vid laboration

24 Maskinorienterad Programmering Genomgång av laborationer 24 Tangentbord ML15 Bit 7, DAV: Data Valid; Statusbit som anger nedtryckt tangent b 7 =1: Ingen tangent är för tillfället aktiverad på tangentbordet. b 7 =0: En tangent är aktiverad Bit 6-4, 0: Används ej. Bit 3-0, B3-B0: Tangentnummer; Anger aktuell tangentnedtryckning.

25 Maskinorienterad Programmering Genomgång av laborationer 25 Uppgift 91

26 Maskinorienterad Programmering Genomgång av laborationer 26 Borrmaskinrobot Tangent nr Operationsubrutin 0starta borrmotornSTART 1stoppa borrmotornSTOP 2sänk borretDOWN 3höj borretUP 4rotera arbetsstycket medurs ett stegSTEP 5borra ett hålDRILL 6stega arbetsstycket till referenspositionREFPO 7borra hål längs cirkeln enligt mönsterAUTO

27 Maskinorienterad Programmering Genomgång av laborationer 27 Rutinen COMMAND Uppgift 94

28 Maskinorienterad Programmering Genomgång av laborationer 28 ********************************** * SUBRUTIN – COMMAND * Beskrivning:Rutinen avg ö r vilken * kommandosubrutin som skall * utf ö ras och anropar denna. * Anrop:JSRCOMMAND * Indata:Kommandonummer i reg A * Utdata:Inga * Reg-p å verkan:A,X * Anrop subr:SUB0 - SUB7 ********************************** MAXEQU7 COMMAND: * giltigt v ä rde? CMPA#MAX BHICOMEX * hopptabellens basadress LDX#JUMPTAB * offset ä r 2 bytes per adress ASLA * h ä mta subrutinens startadress LDXA,X * utf ö r subrutin JSR,X * å terv ä nd fr å n kommandorutin COMEX:RTS ********************************** *Tabell med subrutinadresser JUMPTABFDBSUB0,SUB1,SUB2,SUB3 FDBSUB4,SUB5,SUB6,SUB7 ********************************** * subrutiner f ö r test, byts senare * ut mot START, STOP, DOWN etc SUB0MOVB#0,ParOut RTS SUB1MOVB#1,ParOut RTS SUB2 MOVB#2,ParOut RTS SUB3 MOVB#3,ParOut RTS SUB4 MOVB#4,ParOut RTS SUB5 MOVB#5,ParOut RTS SUB6 MOVB#6,ParOut RTS SUB7 MOVB#7,ParOut RTS

29 Maskinorienterad Programmering Genomgång av laborationer 29 Filen MAIN1.S12 STRUKTUR 1.Inkludera definitionsfil 2.Initiera systemet 3.Huvudprogram 4.Subrutinen COMMAND 5.Inkludera fil (filer) med ytterligare subrutiner. 6.Plats för variabler * Definitioner USE IODEFS.S12 ORGStart --- ************************************ * Huvudprogram * Invänta vald operation Loop: JSRKEYB1 NOP * Utför vald operation JSRCOMMAND BRALoop ************************************ COMMAND USE KeyML15.S12 * Placera alla variabler här DCCopyRMB1

30 Maskinorienterad Programmering Genomgång av laborationer 30 Att testa filen MAIN1.S12 SUB0MOVB#0,ParOut RTS SUB1MOVB#1,ParOut RTS SUB2 MOVB#2,ParOut RTS SUB3 MOVB#3,ParOut RTS SUB4 MOVB#4,ParOut RTS SUB5 MOVB#5,ParOut RTS SUB6 MOVB#6,ParOut RTS SUB7 MOVB#7,ParOut RTS

31 Maskinorienterad Programmering Genomgång av laborationer 31 Övriga, funktioner (MAINxx) testas med tangentbord och borrmaskin

32 Maskinorienterad Programmering Genomgång av laborationer 32 * SUBRUTIN STOP. Subrutinen stannar * borrmotorn. * * Anrop:JSRSTOP * Indata:Inga * Utdata:Inga * Registerpåverkan:Ingen * Anropade subrutiner:OUTZERO Rutiner START och STOP * SUBRUTIN START. Subrutinen startar * borrmotorn väntar därefter i 500 ms * före återhopp så att borret uppnår * rätt hastighet. * * Anrop:JSRSTART * * Indata:Inga * Utdata:Inga * Registerpåverkan:Ingen * Anropade subrutiner:OUTONE *DELAY Ändringar i huvudprogram... JUMPTABFDBSTART,STOP,SUB2,SUB3 FDBSUB4,SUB5,SUB6,SUB7 ********************************** * subrutiner f ö r test, byts senare * ut mot START, STOP, DOWN etc START..... RTS STOP..... RTS SUB2 MOVB#2,ParOut RTS.....

33 Maskinorienterad Programmering Genomgång av laborationer 33 Laborationsmoment 2 Pseudoparallell exekvering Operatör Tangentbord för borrkommando Anpassnings- elektronik Borrmaskin Mikrodator Klocka Process 2 Process 1

34 Maskinorienterad Programmering Genomgång av laborationer 34 C1 1D R Puls generator 400Hz 1 Q' Till processorns IRQ’ CS’ vid skrivning Processbyte En processor – flera program – körs ”samtidigt” (pseudoparallellt) HDW krav: En avbrottskälla som ger regelbundna avbrott (Ex Timer) SW krav: En avbrottsrutin (SWITCH) som växlar process Init variabler kod P1 data/stack P1 kod P2 data/stack P2 kod P3 data/stack P3 kod P4 data/stack P4 Ledigt... Process1 Process 2 Process 3 Process 4

35 Maskinorienterad Programmering Genomgång av laborationer 35 PROC 4 PROC 3 PROC 2 PROC 1 INIT SWITCH 2,5ms μsμs READY RUNNING T=0 IRQ RTI t RUNNING READY Processtillstånd 2,5ms μsμsμsμs C1 1D R 400Hz 1 Q' IRQ’ CS’

36 Maskinorienterad Programmering Genomgång av laborationer 36 $3000 Init variabler kod P1 data/stack P1 kod P2 data/stack P2 kod P3 data/stack P3 kod P4 data/stack P4 Ledigt... Process1 Process 2 Process 3 Process 4 SP PC L PC H YLYL YHYH XLXL XHXH ACCA ACCB CCR $3000 $2FF7 Viktigt: I-flaggan måste vara 0

37 Maskinorienterad Programmering Genomgång av laborationer 37 Stackpekare Process 1 Stackpekare Process 2 Stackpekare Process 3 Stackpekare Process 4 Processnummer ”Running” Init variabler kod P1 data/stack P1 kod P2 data/stack P2 kod P3 data/stack P3 kod P4 data/stack P4 Ledigt... Process1 Process 2 Process 3 Process 4 P1sp H P1sp L P2sp H P2sp L P3sp H P3sp L P4sp H P4sp L 0,1,2,3 SPProc1 SPProc2 SPProc3 SPProc4 ProcNR

38 Maskinorienterad Programmering Initial stack för process och ”processbyte”: 38 Genomgång av laborationer SP PC L PC H YLYL YHYH XLXL XHXH ACCA ACCB CCR ORGTopOfStack-9 Istack:FCB$C0; Initialt CCR FCB0; Initialt B FCB0; Initialt A FDB0; Initialt X FDB0; Initialt Y FDBStart; Initialt PC ORGCode LDD#Istack STDSPProc IRQHandler: ; Spara ”Running” stackpekare STS... ; Välj ny ”Running” LDS... ; Återstarta RTI


Ladda ner ppt "Maskinorienterad Programmering 1 Genomgång av laborationer EDA 480 – Maskinorienterad Programmering 2009/2010 Genomgång av laborationer: ”Programutveckling."

Liknande presentationer


Google-annonser