Maskinorienterad Programmering EDA 480 Maskinorienterad Programmering 20092010 Genomgng

  • Slides: 38
Download presentation
Maskinorienterad Programmering EDA 480 – Maskinorienterad Programmering 2009/2010 Genomgång av laborationer: ”Programutveckling i assembler”

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

Maskinorienterad Programmering Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando Mikrodator Anpassningselektronik Operatör Borrmaskin

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

Maskinorienterad Programmering Borrmaskin-Robot Sensor för borr i topp- eller bottenläge Tryckfjäder för höjning av

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

Maskinorienterad Programmering Simulatorn för borrmaskinen New disc: Här väljer du olika arbetsstycken Indikator för

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

Maskinorienterad Programmering Specifikation Genomgång av laborationer · starta borrmotorn · stoppa borrmotorn · sänk

Maskinorienterad Programmering Specifikation Genomgång av laborationer · 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. 5

Maskinorienterad Programmering Genomgång av laborationer 6

Maskinorienterad Programmering Genomgång av laborationer 6

Maskinorienterad Programmering Styrord till borrmaskinen Utport: Drill Control 7 6 5 4 3 2

Maskinorienterad Programmering Styrord till borrmaskinen Utport: Drill Control 7 6 5 4 3 2 1 0 stegpuls fram/back borrmotor 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 Genomgång av laborationer Logiknivå: ”Aktiv hög” Att göra ”RESET” på borrmaskinen således: LDAA #0 ; Passiva signaler STAA $400 ----7

Maskinorienterad Programmering Statusord från borrmaskinen Anm: Statusporten ansluts till adress $600 i laborations -systemet

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

Maskinorienterad Programmering Testförfarande DSInput DCtrl DStatus Loop Genomgång av laborationer Uppgift 74 EQU EQU

Maskinorienterad Programmering Testförfarande DSInput DCtrl DStatus Loop Genomgång av laborationer Uppgift 74 EQU EQU $600 $0401 ; Dip Switch Input ; Drill Control Output ; Drill Status Input LDAA STAA LDAB BRA DSInput DCtrl DStatus Loop ; Läs strömbrytare ; Ge styrord ; Läs status 9

Maskinorienterad Programmering Villkorlig assemblering ger korrekta portadresser ; Definiera macro ’SIM’ för test i

Maskinorienterad Programmering Villkorlig assemblering ger korrekta portadresser ; Definiera macro ’SIM’ för test i simulator #define SIM DSInput DCtrl #ifdef SIM DStatus #else DStatus #endif EQU $600 $0400 ; Dip Switch Input ; Drill Control Output EQU $0401 ; Drill Status Input EQU $0600 ; Drill Status Input Anm: ”Dip Switch Input” och borrmaskin kan inte användas samtidigt i laborationssystemet (MC 12). Genomgång av laborationer 10

Maskinorienterad Programmering Använd USE-direktivet ; DRILLDEFS. S 12 DSInput EQU DCtrl EQU # ifdef

Maskinorienterad Programmering Använd USE-direktivet ; DRILLDEFS. S 12 DSInput EQU DCtrl EQU # ifdef SIM DStatus EQU $0401 # else DStatus EQU $0600 # endif ; DTEST 1. s 12 #define SIM USE Loop LDAA STAA LDAB BRA $600 $0400 ; Dip Switch Input ; Drill Control Output ; Drill Status Input ”DRILLDEFS. S 12” DSInput ; Läs strömbrytare DCtrl ; Ge styrord DStatus ; Läs status Loop Anm: Både DRILLDEFS och IODEFS förekommer som namn här i arbetsboken, använd endast DRILLDEFS. S 12 Genomgång av laborationer 11

Maskinorienterad Programmering Inledande uppgift med borrmaskinen 1) 2) 3) 4) 5) 6) 7) 8)

Maskinorienterad Programmering Inledande uppgift med borrmaskinen 1) 2) 3) 4) 5) 6) 7) 8) 9) Arbetsstycket vrids till referensposition. Hål borras Arbetsstycket vrids medurs ett steg Hål borras Arbetsstycket vrids medurs tre steg Hål borras En larmsignal ges som indikation på att uppgiften är klar. Genomgång av laborationer ; Dtest 2 USE DRILLDEFS. S 12 ORG $1000 LDAA #0 ; Reset STAA DCtrl JSR Till. Ref. Pos JSR Borra JSR Vrid 1 steg JSR Vrid 1 steg JSR Borra JSR Ge. Larm Loop: BRA Loop Vrid 1 steg: RTS Till. Ref. Pos: RTS Borra: RTS Ge. Larm: RTS 12

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

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

Maskinorienterad Programmering Att borra ett hål b 2← 1 b 3← 1 b 2=1

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

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

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

Maskinorienterad Programmering Att bara ändra en bit i taget * Läs nuvarande styrord LDAA

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

Maskinorienterad Programmering Kopia av styrordet Variabel DCCopy ska hela tiden ha samma värde som

Maskinorienterad Programmering Kopia av styrordet 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: LDAA DCCopy ANDA #Bitmönster STAA DCtrl STAA DCCopy för att ettställa en bit används: LDAA DCCopy ORAA #Bitmönster STAA DCtrl STAA DCCopy RMB Genomgång av laborationer 1 17

Maskinorienterad Programmering Subrutiner för att manipulera styrregistret OUTONE och OUTZERO * Subrutin OUTONE. Läser

Maskinorienterad Programmering Subrutiner för att manipulera styrregistret OUTONE och OUTZERO * 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 * JSR OUTONE * Utdata: Inga * Registerpåverkan: Ingen * Anropade subrutiner: Inga ”bitnummer” = 0. . 7 Genomgång av laborationer 7 6 5 4 3 2 1 0 18

Maskinorienterad Programmering Realtid - Fördröjningar Instruktioner/ sekund Genomgång av laborationer Simulator STEP Simulator RUN

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

Maskinorienterad Programmering Fördröjningar i mekaniska delar • Starta borrmotorn (vänta tills den är uppe

Maskinorienterad Programmering Fördröjningar i mekaniska delar • 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 300 ms) • etc Genomgång av laborationer 20

Maskinorienterad Programmering ******************* * SUBRUTIN – DELAY * Beskrivning: Skapar en fördröjning om *

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

Maskinorienterad Programmering DELAY PSHA PSHX TSTA BEQ DExit Fördröjningsvärde noll ; ; Konstanten 'Konst'

Maskinorienterad Programmering DELAY PSHA PSHX TSTA BEQ DExit Fördröjningsvärde noll ; ; Konstanten 'Konst' måste ; bestämmas. . . ALOOP LDX #Konst XLOOP LEAX -1, X NOP CPX #0 BNE XLOOP DECA BNE ALOOP ; Ytterligare fördröjning DExit PULX PULA RTS Genomgång av laborationer Programmerad tidsfördröjning 22

Maskinorienterad Programmering Använd villkorlig assemblering #ifdef SIM #ifdef RUNFAST * Konstant vid Run Fast

Maskinorienterad Programmering Använd villkorlig assemblering #ifdef SIM #ifdef RUNFAST * Konstant vid Run Fast Konst EQU XXXX Bestäms #else experimentellt med Uppgift 90 simulator * Konstant vid Run Konst EQU YYYY #endif #else Konst EQU ZZZZ Bestäms experimentellt vid #endif laboration Genomgång av laborationer 23

Maskinorienterad Programmering Tangentbord ML 15 Bit 7, DAV: Data Valid; Statusbit som anger nedtryckt

Maskinorienterad Programmering Tangentbord ML 15 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, B 3 -B 0: Tangentnummer; Anger aktuell tangentnedtryckning. Genomgång av laborationer 24

Maskinorienterad Programmering Uppgift 91 Genomgång av laborationer 25

Maskinorienterad Programmering Uppgift 91 Genomgång av laborationer 25

Maskinorienterad Programmering Borrmaskinrobot Tangent nr 0 1 2 3 4 5 6 7 Operation

Maskinorienterad Programmering Borrmaskinrobot Tangent nr 0 1 2 3 4 5 6 7 Operation subrutin starta borrmotorn stoppa borrmotorn sänk borret höj borret rotera arbetsstycket medurs ett steg borra ett hål stega arbetsstycket till referensposition borra hål längs cirkeln enligt mönster START STOP DOWN UP STEP DRILL REFPO AUTO Genomgång av laborationer 26

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

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

Maskinorienterad Programmering ***************** * SUBRUTIN – COMMAND * Beskrivning: Rutinen avgör vilken * kommandosubrutin

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

Maskinorienterad Programmering Filen MAIN 1. S 12 STRUKTUR 1. Inkludera definitionsfil 2. Initiera systemet

Maskinorienterad Programmering Filen MAIN 1. S 12 STRUKTUR 1. Inkludera definitionsfil 2. Initiera systemet 3. Huvudprogram 4. Subrutinen COMMAND 5. Inkludera fil (filer) med ytterligare subrutiner. 6. Plats för variabler Genomgång av laborationer * Definitioner USE IODEFS. S 12 ORG Start ----- ****************** * Huvudprogram * Invänta vald operation Loop: JSR KEYB 1 NOP * Utför vald operation JSR COMMAND BRA Loop ****************** COMMAND ------USE Key. ML 15. S 12 * Placera alla variabler här DCCopy RMB 1 29

Maskinorienterad Programmering Att testa filen MAIN 1. S 12 SUB 0 SUB 1 SUB

Maskinorienterad Programmering Att testa filen MAIN 1. S 12 SUB 0 SUB 1 SUB 2 SUB 3 SUB 4 SUB 5 SUB 6 SUB 7 Genomgång av laborationer MOVB RTS MOVB RTS #0, Par. Out #1, Par. Out #2, Par. Out #3, Par. Out #4, Par. Out #5, Par. Out #6, Par. Out #7, Par. Out 30

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

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

Maskinorienterad Programmering Rutiner START och STOP * SUBRUTIN STOP. Subrutinen stannar * borrmotorn. *

Maskinorienterad Programmering Rutiner START och STOP * SUBRUTIN STOP. Subrutinen stannar * borrmotorn. * * Anrop: JSR STOP * Indata: Inga * Utdata: Inga * Registerpåverkan: Ingen * Anropade subrutiner: OUTZERO Genomgång av laborationer * SUBRUTIN START. Subrutinen startar * borrmotorn väntar därefter i 500 ms * före återhopp så att borret uppnår * rätt hastighet. * * Anrop: JSR START * * Indata: Inga * Utdata: Inga * Registerpåverkan: Ingen * Anropade subrutiner: OUTONE * DELAY Ändringar i huvudprogram. . . JUMPTAB FDB START, STOP, SUB 2, SUB 3 FDB SUB 4, SUB 5, SUB 6, SUB 7 ***************** * subrutiner för test, byts senare * ut mot START, STOP, DOWN etc START. . . RTS STOP. . . RTS SUB 2 MOVB #2, Par. Out RTS. . . 32

Maskinorienterad Programmering Laborationsmoment 2 Pseudoparallell exekvering Pro ces s 1 Tangentbord för borrkommando Operatör

Maskinorienterad Programmering Laborationsmoment 2 Pseudoparallell exekvering Pro ces s 1 Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik Borrmaskin Klocka e c ro 2 s s P Genomgång av laborationer 33

Maskinorienterad Programmering Processbyte Init variabler En processor – flera program – körs ”samtidigt” (pseudoparallellt)

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

Maskinorienterad Programmering Processtillstånd 1 1 D 400 Hz CS’ R READY RUNNING C 1

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

Maskinorienterad Programmering Viktigt: I-flaggan måste vara 0 Init variabler kod P 1 Process 1

Maskinorienterad Programmering Viktigt: I-flaggan måste vara 0 Init variabler kod P 1 Process 1 data/stack P 1 kod P 2 data/stack P 2 kod P 3 $2 FF 7 Process 2 Process 3 data/stack P 3 kod P 4 Process 4 data/stack P 4 $3000 Ledigt. . . Genomgång av laborationer $3000 CCR ACCB ACCA XH XL YH YL PCH PCL SP 36

Maskinorienterad Programmering Init SPProc 1 P 1 sp. H variabler kod P 1 sp.

Maskinorienterad Programmering Init SPProc 1 P 1 sp. H variabler kod P 1 sp. L Process 1 data/stack P 1 kod P 2 data/stack P 2 kod P 3 P 2 sp. L Process 2 SPProc 3 P 3 sp. H P 3 sp. L Process 3 SPProc 4 P 4 sp. H P 4 sp. L data/stack P 3 kod P 4 SPProc 2 P 2 sp. H Process 4 Proc. NR 0, 1, 2, 3 Stackpekare Process 1 Stackpekare Process 2 Stackpekare Process 3 Stackpekare Process 4 Processnummer ”Running” data/stack P 4 Ledigt. . . Genomgång av laborationer 37

Maskinorienterad Programmering Initial stack för process och ”processbyte”: ORG Istack: FCB ORG LDD STD

Maskinorienterad Programmering Initial stack för process och ”processbyte”: ORG Istack: FCB ORG LDD STD Top. Of. Stack-9 $C 0 ; Initialt CCR FCB 0 ; Initialt B FCB 0 ; Initialt A FDB 0 ; Initialt X FDB 0 ; Initialt Y FDB Start ; Initialt PC Code #Istack SPProc CCR ACCB ACCA XH XL YH YL PCH PCL SP IRQHandler: ; Spara ”Running” stackpekare STS. . . ; Välj ny ”Running” LDS. . . ; Återstarta RTI Genomgång av laborationer 38