Erik Grindheim - fagprøve Kildekode til mikrokontroller << led_ctrl.asm >> side 1/6.



Like dokumenter
CodevisionAVR. Start CodevisionAVR. Velg Settings Terminal og sett opp kommunikasjonsparametrene som figur 1 viser. avrlab07a.doc HVE RI Arnfinn Lunde

C:\My Documents\Fagprove\Flashlite V25+\LED_Link.pas Printed at 16:06 on 17 Feb 2000 Page 1 of 6

C:\web\service-elektronikk\fagprover\Anders\flashlite_program_Anders.pas Page 1

Arduino med Atmel studio 6.x (6.1)

Del 4 Noen spesielle C-elementer

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Intro til Atmel Studio Bits&bytes

Bruk av interrupt og Timer i Arduino-program.

1. Arduino Bluetooth 2 HC-05 modul

Utførelse av programmer, metoder og synlighet av variabler i JSP

Kontinuasjonseksamen

En oppsummering (og litt som står igjen)

Matematikk Øvingsoppgaver i numerikk leksjon 5 Skript

1 ØVING I WINDOWS FRA CHRISTIAN ANDOLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for teknologi

Bruk av PicoBlaze mikrokontroller i Xilinx System Generator (Matlab - Simulink)

UI-View Installasjon og konfigurasjon for IGate + RX<->TX av meldinger og ingen ting annet!

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

Løsningsforslag til 2. del av Del - EKSAMEN

Cs preprosessor. Dagens tema. Betinget kompilering

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Løsningsforslag til 2. del av Del - EKSAMEN

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Øvingsforelesning TDT4105

INF oktober Dagens tema: Uavgjørbarhet. Neste uke: NP-kompletthet

Øving 0 - Xcode TDT4102

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

Dagens temaer. Sekvensiell logikk: Kretser med minne. D-flipflop: Forbedring av RS-latch

ARDUINO STUDIELABEN PROGRAMMERING DIGITALE/ANALOGE INNDATA/UTDATA LYSDIODER FRITZING. Roger Antonsen INF januar 2012

1: { 2: Display functions 3: ============================================================= 4: Instruction DB5 DB4 DB3 DB2 DB1 DB0 5:

Hvordan en prosessor arbeider, del 1

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Løsningsforslag til 1. del av Del - EKSAMEN

IN 147 Program og maskinvare

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Bussar. Tilgong til buss (Three state buffer) Synkron / Asynkron Serielle bussar Parallelle bussar Arbitrering: Kven kontrollerar bussen

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

BRUK OG MONTERING AV FJERNKONTROLL

JUMBO FJERNKONTROLL MED TOUCHPAD

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Forelesning Optimalisering av μark Kap 4.4

Rapport Øving 1 TDT4258 Mikrokontroller Systemdesign

Løsningsforslag til eksamen 24. november 2015

Enkel veiledning for: GSM key3+

Innhold. Virtuelt minne. Paging i mer detalj. Felles rammeverk for hukommelseshierarki Hukommelseshierarki-2 1

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

MONTERINGSANVISNING TERMLIFT

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

KONTINUASJONSEKSAMEN

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

KYBERNETIKKLABORATORIET. FAG: Dynamiske systemer DATO: OPPG.NR.: DS3 MOTOR GENERATOROPPGAVE I

Digital logic level: Oppsummering

EKSAMEN. Informasjon om eksamen. Emnekode og -navn: ITD13012 Datateknikk. Dato og tid: timer. Fagansvarlig: Robert Roppestad

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Litt mer om Arduino. Roger Antonsen Sten Solli INF januar 2011

AVDELING FOR TEKNOLOGI

Kapittel 1 En oversikt over C-språket

Programmeringsspråket C Del 2

Dagens temaer. Dagens temaer hentes fra kapittel 3 i læreboken. Oppbygging av flip-flop er og latcher. Kort om 2-komplements form

Dagens temaer. Architecture INF ! Dagens temaer hentes fra kapittel 3 i Computer Organisation and

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

1. Arduino Bluetooth 4.0 Low Energy (BLE)

OPPSTART OG PROGRAMMERING AV ORBIT PRO SENTRALEN

Del 1 En oversikt over C-programmering

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Rapport Øving 2 TDT4258 Mikrokontroller Systemdesign

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Forelesning Instruksjonstyper Kap 5.5

Gangemesteren Nybegynner Scratch PDF

Løsningsforslag til eksamen i INF2270

Forelesning Hurtigbuffer Kap 4.5

Kontinuasjonseksamen

Bruksanvisning. MiniTest 650 F og FN mymåler

[Kurssidene] [ ABI - fagsider bibin ] Michael Preminger (michaelp@hio.no) 07/ Vi holder orden på verdier med hjelp av variabler

1 Vekt 15% 1-a. 1-b. 1-c. 1-d

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Kontinuasjonseksamen

Forelesning ISA: IJVM Kap 4.2

Emne: Datamaskinarkitektur Emnekode:lO 134A Faglig veileder: Lars Kristiansen

Debugging. Tore Berg Hansen, TISIP

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Eksamensoppgaver 2014

TERA System Quick Start Guide (Norsk)

Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)

PLS PC-øving nr. 3 Global Label og Local Label, flagg og CJ

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

WORKSHOP BRUK AV SENSORTEKNOLOGI

NB! Brukes kun for de uten abonnement fra Hyttestyring. Hurtigveiledning

Straffespark Introduksjon Scratch Lærerveiledning

Spøkelsesjakten. Introduksjon

Kontinuasjonseksamen

Dagens tema. Kort repetisjon om rutiner. Programmering i C Variable og adresser. Vektorer. Tekster. Preprosessoren. Separat kompilering

INF2270. Sekvensiell Logikk

CW ID-Circuit Erik Grindheim LA9SJA 1997

Matematikk Øvingsoppgaver i numerikk leksjon 8 Matriser. Løsningsforslag

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Transkript:

Skrevet av: Erik Grindheim, IFJF - UiB * Dato: 15. februar 2000 * Revisjon 1.12 * Språk: MPASM (Microchip) * Processor: PIC16F84 * Watchdog timer: off * Code protect: off * Programmet starter opp med å gi to LED-blink. * Deretter vil LED'en lyse eller være slokket i hht. EEPROM data. * LED'en kan skrus av eller på ved å sende kommando S (s) eller C (c) * inn til PIC'en. Den vil da svare ved å sende ut enten S eller C. * Dersom en vil vite LED status uten å endre tilstand så kan en sende * kommando X (x). Da vil PIC'en svare ved å sende ut enten S eller C. * Baudrate er 9600 baud, men kan endres til alt fra 2400 til 19200 bd. * Hver gang en endring skjer lagres dette i EEPROM slik at ved neste * Power-up vil alltid LED'en ha samme tilstand som ved Power-down. * list p=16f84 include "p16f84.inc" config _HS_OSC & _WDT_OFF #define TTL Dersom denne linjen blir gjort gjeldende vil serie-kommunikasjonen sin polaritet reverserest slik at det må brukes MAX232 el. lignende inverterende RS-232 linje driver/receiver. TTL RS-232 Log.0 0V 5V eller +(3~25)V Log.1 5V 0V eller -(3~25)V Kildekode til mikrokontroller << led_ctrl.asm >> side 1/6.

* KONSTANTER F_CRYSTAL equ.4000000 4MHz krystall BAUD_RATE equ.9600 9600 baud seriekommunikasjon (kan være fra 2400 til 19200) F_CLOCK equ F_CRYSTAL / 4 instruksjons clock-rate BIT_TIME equ ( ( F_CLOCK / BAUD_RATE ) /3-4 ) BIT_TIME_AND_HALF equ ( ( F_CLOCK / BAUD_RATE ) /2-4 ) Reset_Vector equ 0x00 Int_Vector equ 0x04 EEadrLED equ 0x32 EEPROM adresse til å lagre LED-status. Hvilken som helst adresse fra 0x00 til 0x3F kan brukes. Dersom byte-verdien på denne adressen er 0x00 er LED- status "CLEARED". Ellers (ved ulik 0x00) er LED-status "SET" * VARIABLER * WaitVar1 WaitVar2 blinks equ 0x0C Disse to er kladd-variabler for bruk i equ 0x0D forsinkelses-rutinen "wait". equ 0x0F Hvor mange ggr. skal LED'en blinke? BitDelay equ 0x10 Her er variablene for Asynkron seriell BitCounter equ 0x11 kommunikasjon... TxReg equ 0x12 RxReg equ 0x13 * PIN ASSIGNMENTS * #define LED_PIN PORTA, 1 #define _rx PORTB, 0 #define _tx PORTB, 4 #define LED_ON bcf LED_PIN #define LED_OFF bsf LED_PIN * OPPSTART * org Reset_Vector goto init Kildekode til mikrokontroller << led_ctrl.asm >> side 2/6.

* INTERRUPT RUTINE * org Int_Vector rxbaudwait decfsz BitDelay, F Forsinkelses-loop for å gi rett goto rxbaudwait varighet på bit'ene ( 9k6 => 104us ) movlw BIT_TIME Når loop'en er ferdig resettes loopmovwf BitDelay variablen til neste gang (neste bit) decfsz BitCounter, F Etter denne instr. ser man hvor mange goto RecvNextBit bits som gjenstår. Hvis null: "skip" movlw 'S' subwf RxReg, W btfsc STATUS, Z goto set_routine movlw 's' subwf RxReg, W btfsc STATUS, Z goto set_routine Er nå ferdig med en hel byte Sammenligner denne med 'S' Hvis det var en 'S' -ja, en 'S' -nei, ikke 'S'. Fortsett testingen Sammenligner denne med 's' Hvis det var en 's' -ja, en 's' movlw 'C' -nei, ikke 's'. Fortsett testingen subwf RxReg, W Sammenligner denne med 'C' btfsc STATUS, Z Hvis det var en 'C' goto clear_routine -ja, en 'C' movlw 'c' -nei, ikke 'C'. Fortsett testingen subwf RxReg, W Sammenligner denne med 'c' btfsc STATUS, Z Hvis det var en 'c' goto clear_routine -ja, en 'c' movlw 'X' -nei, ikke 'c'. Fortsett testingen subwf RxReg, W Sammenligner denne med 'X' btfsc STATUS, Z Hvis det var en 'X' goto status_routine -ja, en 'X' movlw 'x' -nei, ikke 'X'. Fortsett testingen subwf RxReg, W Sammenligner denne med 'x' btfsc STATUS, Z Hvis det var en 'x' goto status_routine -ja, en 'x' character_tested movlw BIT_TIME_AND_HALF movwf BitDelay Gjør klar til mottak av en ny byte movlw.9 ( StartBit + 1 byte = 9 bits ) movwf BitCounter bcf INTCON, INTF retfie Clear eksternt interrupt flagg Interrupt rutine er ferdig, Enable Int RecvNextBit bcf STATUS, C Sletter Carry-flagget ifdef TTL TTL: btfsc _rx "Skip" hvis Logisk 0 (0V) else RS-232: btfss _rx "Skip" hvis Logisk 0 (5V) endif bsf STATUS, C Setter C dersom Log 1 nivå på RB0 rrf RxReg, F Roterer RxReg ett hakk mot høyre goto rxbaudwait Forsinkelse før ny bit... Kildekode til mikrokontroller << led_ctrl.asm >> side 3/6.

* HOVEDPROGRAM * init bsf INTCON, INTE Enabler eksterne interrupt fra RB0 clrw movwf PORTA PORTA pinnene settes til 0 bsf STATUS, RP0 Skifter til Register Bank 1 movwf TRISA PORTA er utganger movlw B'11000001' PORTB: utg: RB1, RB2, RB3, RB4, RB5 movwf TRISB inng: RB0, RB6, RB7 ifdef TTL Dersom TTL: bcf OPTION_REG, INTEDG -int. på fallende flanke else ellers bsf OPTION_REG, INTEDG -int. på stigende flanke endif bcf STATUS, RP0..og tilbake til Register Bank 0 movlw BIT_TIME_AND_HALF movwf BitDelay Gjør klar til mottak av en byte movlw.9 movwf BitCounter movlw.2 Gir et par blink i LED'en. Indikerer call blink_led at initialiseringen er ferdig call readeesetled Leser EEPROM'en og setter LED'en av eller på i hht. EEPROM'ens data. bsf INTCON, GIE Muliggjør interrupt (Globalt) end_loop goto end_loop Her er program-initialiseringen ferdig, og en venter på interrupt... Kildekode til mikrokontroller << led_ctrl.asm >> side 4/6.

* SUB RUTINER * blink_led movwf blinks husk hvor mange blink som gjenstår a_flash her starter ett enkelt blink LED_ON tenn LED'en call wait vent... LED_OFF slukk LED'en call wait vent... decfsz blinks, F dekrementer blink-variablen goto a_flash hvis den fortsatt er større enn 0... return...og hvis den nå ble null: Returner. readeesetled Leser EEPROM'en, setter LED'en i hht. byteverdi og returnerer /m denne i W movlw EEadrLED EEPROM adressen som holder LED-status movwf EEADR blir valgt i EEADR-registeret. bsf STATUS, RP0 Register Bank 1 velges bsf EECON1, RD Leser en byte fra EEPROM'en bcf STATUS, RP0 Går tilbake til Register Bank 0 movf EEDATA, W EEPROM-data flyttes til W btfss STATUS, Z Var denne lik 0x00... goto _set -nei. Set LED'en LED_OFF -ja. Slukk LED'en retlw 'C' Returner med LED-status ('C') i W _set LED_ON Tenner LED retlw 'S' Returner med LED-status ('S') i W set_routine Skriver 0xFF til EEPROM og kaller 'readeesetled' og 'transmit' movlw 0xFF Legger inn data som skal skrives til call writeeeprom EEPROM, og kaller opp sub-rutinen. call readeesetled Denne rutinen returnerer status i W call transmit Her sendes W ut serielt goto character_tested Returnerer til int.rutinens avsluttn. clear_routine Skriver 0x00 til EEPROM og kaller 'readeesetled' og 'transmit' movlw 0x00 Legger inn data som skal skrives til call writeeeprom EEPROM, og kaller opp sub-rutinen. call readeesetled Denne rutinen returnerer status i W call transmit Her sendes W ut serielt goto character_tested Returnerer til int.rutinens avsluttn. status_routine Kaller 'readeesetled' og 'transmit' call readeesetled Denne rutinen returnerer status i W call transmit Her sendes W ut serielt goto character_tested Returnerer til int.rutinens avsluttn. transmit Rutine som sender ut W serielt movwf TxReg Lagrer byte'n som skal sendes ifdef TTL bcf _tx Lager startbit - Logisk 0 (0V) else bsf _tx Lager startbit - Logisk 0 (5V) endif movlw BIT_TIME movwf BitDelay movlw.11 StartBit + DataBits + StopBits = 11 movwf BitCounter Tallet 11 legges inn i bit-telleren Kildekode til mikrokontroller << led_ctrl.asm >> side 5/6.

txbaudwait decfsz BitDelay, F Forsinkelse med 1 bit-tids varighet goto txbaudwait movlw BIT_TIME Reset bit-forsinkelses tid variabel movwf BitDelay decfsz BitCounter, F Er alle bits sendt? goto SendNextBit -nei, send en bit til return -ja, returner SendNextBit bsf STATUS, C Setter C for å gi Logisk 1 StopBits rrf TxReg, F Roterer ny "tx-bit" inn til C btfss STATUS, C Var dette bit'et HØYT? goto Setlo -nei, det var LAVT Sethi ifdef TTL -ja, bit'et var HØYT bsf _tx Setter tx-pin til logisk 1 (5V) else bcf _tx Setter tx-pin til logisk 1 (0V) endif goto txbaudwait Vent på at neste bit kan sendes... Setlo ifdef TTL...bit'et som skal sendes er LAVT bcf _tx Setter tx-pin til logisk 0 (0V) else bsf _tx Setter tx-pin til logisk 0 (5V) endif goto txbaudwait Vent på at neste bit kan sendes... writeeeprom Rutine som skriver W inn i EEPROM'en movwf EEDATA Legger inn data for EEPROM-skriving movlw EEadrLED EEPROM adressen som holder LED-status movwf EEADR blir valgt i EEADR-registeret. bsf STATUS, RP0 Register Bank 1 velges bsf EECON1, WREN Muliggjør skriving i EEPROM'en movlw 0x55 Initierer "write" movwf EECON2...ved å skrive 0x55 movlw 0xAA og deretter skrive 0xAA movwf EECON2...til EECON2 bsf EECON1, WR Dette starter selve write-syklusen bcf EECON1, WREN Disable EEPROM skriving waiteecomplete btfss EECON1, WR Sjekk om EEPROM'en fortsatt er opptatt return med å skrive. Hvis ikke: Returner. goto waiteecomplete Opptatt, vent litt til... wait movlw 0xFF Forsinkelses-rutine movwf WaitVar2 bruker 2 variabler: loop2 movlw 0xFF 'WaitVar1' og 'WaitVar2' movwf WaitVar1 loop1 decfsz WaitVar1, F goto loop1 decfsz WaitVar2, F goto loop2 return * SLUTT PÅ PROGRAM * end Her slutter programmet! Kildekode til mikrokontroller << led_ctrl.asm >> side 6/6.