Laborationsmoment 2 - En Borrautomat

Relevanta dokument
Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Programmering av inbyggda system

Genomgång av laborationer. New disc: Här väljer du olika arbetsstycken. Control -sektion: Styrord till borrmaskinen

Laborationsmoment 2 - En Borrautomat

Laborationsmoment t 2 - En Borrautomat

Laborationsmoment t 2 - En Borrautomat

Programmering av inbyggda system

Undantagstyper. Maskinorienterad Programmering 2010/2011. MC68HC12, Stencil Assemblerprogrammering.pdf CPU12 Reference Guide

Maskinorienterad programmering del 1

VELKOMMEN!!!! SYFTE o MÅL. till EDA485/DIT151. Maskinorienterad Programmering. Kurslitteratur. önskar Jan o Rolf

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Maskinorienterad programmering. Arbetshäfte för laboration nr 1-3. Laborant: Godkännande - laboration: Data- och informationsteknik, datorteknik

Förutsättningar för skrivaranslutningen

Printerport. I DAG Fö 3. Adressavkodning för skrivarporten. Printerport - forts

Maskinorienterad programmering, It/GU

Extrauppgifter för CPU12

Förutsättningar för skrivaranslutningen. Första programexemplet. Synkronisera arbetstakterna

Programexempel för FLEX

Assemblerprogrammets struktur; exempel

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

Maskinorienterad Programmering 2010/11

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

Förutsättningar för skrivaranslutningen. Första programexemplet. strängslut. Maskinorienterad Programmering 2011/2012 Synkronisering och undantag

Maskinorienterad programmering Laborationer för D/Z/GU (EDA480,EDA485, DIT151)

Assemblerprogrammering

Avbrottshantering. Övningsuppgifter

MANUALBLAD MODULER TILL DIGITALMASKINEN

I DAG fo 4. Printerport v3 med READY o DAV. Avbrott. Hur bra blev det egentligen????

Digital- och datorteknik

Exempel 3 på Tentamen

Förutsättningar för skrivaranslutningen. Första programexemplet. Inför specialtecken för strängslut

EDA Digital och Datorteknik

Lösningsförslag tenta

Maskinorienterad programmering

VELKOMMEN!!!! SYFTE o MÅL. till DAT015 / DIT151 Maskinorienterad Programmering. Kurslitteratur. önskar Jan o Rolf. Lektioner LP2 Vanlig vecka

Laboration nr 4 behandlar Assemblerprogrammering

LEU240 Mikrodatorsystem

Maskinorienterad programmering

Konstruera en dator mha grindar och programmera denna Använda en modern microcontroller

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Assemblerprogrammering del 3

Digital- och datorteknik

Maskinorienterad programmering

Digital- och datorteknik

TENTAMEN (med svar och vissa lösningar)

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Villkorliga hopp: 9/26/2011. Dagens mål: Du ska kunna.. Villrorliga (Relativa) hopp - forts Arb s 140. LV5 Fo12. LV5 Fo12. Aktivera Kursens mål:

Digital- och datorteknik

Assemblerprogrammets. struktur; exempel

VELKOMMEN!!!! SYFTE o MÅL. till EDA485/DIT151. Maskinorienterad Programmering. Kursupplägg. Kurslitteratur. önskar Jan o Rolf

Maskinorienterad Programmering 2010/2011. Maskinorienterad Programmering 2010/2011. Skrivarporten, p Arbetsbok MC12, avsnitt 2

EDA215 Digital- och datorteknik för Z

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

Assemblerprogrammering för HCS12

Programmering av inbyggda system Laborationer för D, Z och GU (EDA481, EDA486 och DIT152)

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Tentamen 3. EDAxxx Grundläggande Datorteknik DIT791 Grundläggande Datorteknik, GU. Måndag xx Oktober 20xx, kl

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

CHALMERS TEKNISKA HÖGSKOLA

Exempel 1 på Tentamen med lösningar

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

Exempel på tentamen 1

Tentamen med lösningar

Tentamen. DIT150 Maskinorienterad programmering GU DAT015 Maskinorienterad programmering IT. Söndag 17 december 2006, kl

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

F8: Undantagshantering

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Avbrott - En enhet. I DAG fo 6 Mera avbrott. Avbrott - Fler enheter. Olika typer av avbrott DMA. Avbrott - Fler enheter -Avbrottshanterare

Maskinorienterad programmering

Laboration 2 i Datorteknik- Assemblerprogrammering II

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

CPU. Carry/Borrow IX. Programräknare

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Digital- och datorteknik

Digital- och datorteknik

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Programmering i maskinspråk (Maskinassemblering)

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Digital- och datorteknik. Mekatronik-, data- och elektroingenjör Åk 1/ lp 1o2. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

Digital- och datorteknik

Övningsuppgifter i Mikrodatorteknik 4p/5p

I DAG Fo 4. Programutveckling i assemblerspråk. Programutveckling i assembler. PROGRAMSTRUKTUR Modul Subrutiner USE-direktivet

Assemblerprogrammeringsuppgifter för FLIS-processorn

Dataöverföring på Parallell- och serieform MOP 11/12 1

CE_O3. Nios II. Inför lab nios2time

Digital- och datorteknik

Maskinorienterad programmering

Tentamen. EDA485 Maskinorienterad programmering Z. Måndag 6 mars 2006, kl i V-salar

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Övning2 Datorteknik, HH vt12 - Programmering

Transkript:

Maskinorienterad Programmering 2011/2012 : Programutveckling i assembler Arbetsbok för MC12, kapitel 4 1 Laborationsmoment 2 - En Borrautomat Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik Borrmaskin Klocka 2

Borrmaskin-Robot Borrmotor med ON/OFF knapp Givare (sensor) för borr i topp- eller bottenläge Tryckfjäder för höjning av borr Elektromagnet (solenoid) för sänkning av borr Arbetsstycke Givare för detektering av referensmärke på arbetsstycke (Dolt) Kretskort med effektelektronik och anslutning till styrkort för borrmaskin. Stegmotor för rotation av arbetsstycke. 3 Simulatorn för borrmaskinen New disc Här väljer du olika arbetsstycken Indikator för Motor On Control -sektion: Styrord till borrmaskinen Indikator för Alarm Status -sektion: Statussignaler från borrmaskinen Den gröna skivan är ett Arbetsstycke Borrade hål märks ut 4

Specifikation Tangentkod Operation subrutin 0 starta borrmotorn MotorStart 1 stoppa borrmotorn MotorStop 2 sänk borret DrillDown 3 höj borret DrillUp 4 rotera arbetsstycket Step medurs ett steg 5 borra ett hål DrillHole 6 stega arbetsstycket till RefPos referensposition 7 borra hål längs cirkeln enligt mönster DoAuto 5 6

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 Logiknivå: Aktiv hög Att göra RESET på borrmaskinen således: LDAA #0 ; Passiva signaler STAA $400 --- --- 7 Statusord från borrmaskinen Inport: Drill Status 7 6 5 4 3 2 1 0 referensposition borr uppe borr nere Anm: Statusporten ansluts till adress $600 i laborationssystemet Bit 2 = 1: Borr i bottenläge Bit 1 = 1: Borr i toppläge Bit 0 = 1: Referensposition Logiknivå: Aktiv hög 8

Testförfarande Uppgift 71 DipSwitch: EQU $600 ; Dip Switch Input DrillControl: EQU $400 ; Drill Control Output Loop LDAA DipSwitch ; Läs strömbrytare STAA DrillControl ; Ge styrord BRA Loop Utför instruktionssekvensen stegvis (Step) 9 Villkorlig assemblering ger korrekta portadresser #ifdef SIMULATOR DrillStatus EQU $401 #else DrillStatus EQU $600 #endif I ditt huvudprogram, innan filen Labdefs.s12 inkluderas, kan du definiera #define SIMULATOR när du kommer till laborationen kommenterar du bort detta på följande sätt: ; #define SIMULATOR Anm: Dip Switch Input och borrmaskin kan inte användas samtidigt i laborationssystemet (MC12). 10

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. ; Drilltest2.s12 USE Labdefs.s12 ORG $1000 start: LDAA #0 ; Reset STAA DrillControl JSR TillRefPos JSR Borra JSR Vrid1steg JSR Borra JSR Vrid1steg JSR Borra JSR Vrid1steg JSR Vrid1steg JSR Vrid1steg JSR Borra JSR GeLarm stopp: BRA stopp Vrid1steg: TillRefPos: Borra: GeLarm: 11 Att vrida arbetsstycket Control Uppgift 77 b7 b6 b5 b4 b3 b2 b1 b0 stegpuls fram/back b1=1, medurs vridning vid stegpuls b0, stegpuls för transition 0 1 b 1 0 Vrid1steg Ange vridningsriktning b 0 0 b 0 1 Ge stegpuls RETUR 12

Att borra ett hål Borra b 2 1 Starta motor b 3 1 Sänk borr Läs status b 2 =1? NEJ Borr nere? Status b7 b6 b5 b4 b3 b2 b1 b0 b 3 0 JA Höj borr b2=1, borr i absolut bottenläge b1=1, borr i absolut toppläge toppläge bottenläge b 2 0 Stanna motor RETUR 13 Att vrida arbetsstycket till startpositionen 14

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 15 Kopia av styrordet ( skuggregister ) Variabel DCShadow ska hela tiden ha samma värde som DrillControl hade haft om porten varit läsbar För att nollställa en bit används nu: LDAA DCShadow ANDA #Bitmönster STAA DCShadow STAA DrillControl för att ettställa en bit används: LDAA DCShadow ORAA #Bitmönster STAA DCShadow STAA DrillControl 16

Subrutiner för att manipulera styrregistret OUTONE och OUTZERO ; Subrutin Outone. ; Läser kopian av borrmaskinens styrord ; på adress DCShadow. Ettställer en ; av bitarna och skriver det nya ; styrordet till DCShadow ; samt utporten DrillControl ; 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 ; Register: Ingen ; Anropar: Inga bitnummer = 0..7 17 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 250 ms) Lyft borret (vänta tills borret har kommit ovanför arbetsstycket, ca 250ms) etc 18

;----------------------- ; SUBRUTIN Delay ; åstadkommer fördröjning av program. ; Fördröjningen utförs i steg om 0,25 ; sekunders intervall. ; Indata: ; Register B: Fördröjning * 0,25 sek. ; Registerpåverkan: ; Register B innehåller alltid 0 efter ; subrutinen. Inga andra register ; påverkas. Uppgift 86 19 Programmerad tidsfördröjning DelayConst: EQU ORG??? $1000 Start: CLRA DELAY: LDX #DelayConst NEXT: LEAX -1,X LDY #100 NEXT2: LEAY -1,Y CPY #0 BNE NEXT2 CPX #0 BNE NEXT COMA STAA $400 BRA DELAY 20

Använd villkorlig assemblering #ifdef SIMULATOR #ifdef RUNFAST DelayConst EQU xx #else DelayConst EQU yy #endif #else DelayConst EQU zz #endif Dessa bestämmer du experimentellt med simulator som förberedelse. Denna bestäms experimentellt vid laboration 21 Borrmaskinrobot tangent kod Operation subrutin 0 starta borrmotorn MotorStart 1 stoppa borrmotorn MotorStop 2 sänk borret DrillDown 3 höj borret DrillUp 4 rotera arbetsstycket medurs ett steg Step 5 borra ett hål DrillHole 6 stega arbetsstycket till referensposition RefPos 7 borra hål längs cirkeln enligt mönster DoAuto 22

;-------------------------------------- ; SUBRUTIN Command ; Beskrivning: Rutinen avgör vilken ; kommandosubrutin som skall ; utföras och anropar denna. ; Anrop: JSR Command ; Indata: Kommandonummer i reg B ; Utdata: Inga ; Register: B,X ändras ; Anrop: SUB0... SUB7 ;-------------------------------------- Command: ; giltigt värde? CMPB #7 BHI CommandExit ; pekartabellens basadress LDX #JUMPTAB ; offset är 2 bytes per adress ASLB ; hämta subrutinens startadress LDX B,X ; utför subrutin JSR,X ; återvänd från kommandorutin CommandExit: ;------------------------------------- ; Tabell med subrutinadresser (pekare) JUMPTAB: FDB SUB0,SUB1,SUB2,SUB3 FDB SUB4,SUB5,SUB6,SUB7 ;------------------------------------- ; subrutiner för test SUB0 SUB1 SUB2 SUB3 SUB4 SUB5 SUB6 SUB7 MOVB #0,OutPort MOVB #1,OutPort MOVB #2,OutPort MOVB #3,OutPort MOVB #4,OutPort MOVB #5,OutPort MOVB #6,OutPort MOVB #7,OutPort 23 Filen Main.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 Labdefs.s12 ORG $1000 main: --- --- ;*********************************** ; Huvudprogram ; Invänta vald operation main_loop: JSR GetKbdML15 ; Utför vald operation JSR Command BRA main_loop ************************************ Command: --- --- --- USE ML15drvr.S12 USE Subroutines.s12 ; Placera alla globala variabler här DCShadow RMB 1... 24

Att testa programmet i filen Main.s12 SUB0 SUB1 SUB2 SUB3 SUB4 SUB5 SUB6 SUB7 MOVB #0,ParOut MOVB #1,ParOut MOVB #2,ParOut MOVB #3,ParOut MOVB #4,ParOut MOVB #5,ParOut MOVB #6,ParOut MOVB #7,ParOut 25 Laborationsmoment 2 Pseudoparallell exekvering Tangentbord för borrkommando Operatör Mikrodator Anpassningselektronik Borrmaskin Klocka 26

Applikation för avbrott (IRQ) ;Initieringssekvens ORG XXXX... ; nollställ I-flagga ANDCC #$FE JSR _main... FFFF 4000 3FFF 1000 0FFF 0400 03FF 0000 ROM, Innehåller det inbyggda debuggerprogrammet DBG12. RWM, används för program och data. I detta adressintervall placeras gränssnitt mot externa enheter HCS12 interna register ORG $FFF2 FDB irq_service_routine ; Avbrottshanterare irq_service_routine:... RTI I laborationssystemet (MC12) kan vi INTE placera avbrottsvektorerna på deras rätta platser (konflikt med DBG12) I stället placeras dom i RWM 27 MC12 (DBG12) och avbrott IRQ Huvudprogram IRQHandler RTI Betjäna avbrottet Vektor ROM Funktion FFFE RESET, Startvektor FFFC Clock Monitor Fail, JMP [3FFC] FFFA COP Watchdog Timeout, JMP [3FFA] FFF8 Illegal Op Code, JMP [3FF8] FFF6 SWI, JMP [3FF6] FFF4 XIRQ, JMP [3FF4] FFF2 IRQ, JMP [3FF2] FF8C Enhetsspecifika JMP [3Fxx] FFF0 vektorer Allmänt ORG $FFF2 FDB irq_service_routine ; Avbrottshanterare irq_service_routine: RTI Men i MC12 och simulator... ORG $3FF2 FDB irq_service_routine ; Avbrottshanterare irq_service_routine: RTI 28

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 Process1 Process 2 Process 3 Puls generator 400Hz CS vid skrivning 1 1D C1 R Q' Till processorns IRQ kod P4 data/stack P4 Ledigt... Process 4 29 Processtillstånd 400Hz 1 1D C1 RUNNING READY CS f 400Hz p R 1 400 Q' IRQ 0,0025s 2,5ms IRQ PROC 4 PROC 3 PROC 2 PROC 1 IRQ IRQ IRQ READY READY READY RUNNING INIT SWITCH T=0 2,5ms 2,5ms 2,5ms μs μs μs RTI RTI RTI t 30

Init variabler Viktigt: I-flaggan måste vara 0 $3000 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 $2FF7 $3000 CCR ACCB ACCA X H X L Y H Y L PC H PC L SP 31 Init variabler kod P1 data/stack P1 kod P2 data/stack P2 kod P3 data/stack P3 Process1 Process 2 Process 3 SPProc1 SPProc2 SPProc3 SPProc4 P1sp H P1sp L P2sp H P2sp L P3sp H P3sp L P4sp H P4sp L Stackpekare Process 1 Stackpekare Process 2 Stackpekare Process 3 Stackpekare Process 4 kod P4 data/stack P4 Process 4 ProcNR 0,1,2,3 Processnummer Running Ledigt... 32

Initial stack för process och processbyte : ORG TopOfStack-9 Istack: FCB $C0 ; Initialt CCR FCB 0 ; Initialt B FCB 0 ; Initialt A FDB 0 ; Initialt X FDB 0 ; Initialt Y FDB Start ; Initialt PC ORG LDD STD Code #Istack SPProc CCR ACCB ACCA X H X L Y H Y L PC H PC L SP IRQHandler: ; Spara Running stackpekare STS... ; Välj ny Running LDS... ; Återstarta RTI 33