Les 2 - onderwerpen
description
Transcript of Les 2 - onderwerpen
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
12PROJ5 – PIC assembler
Les 2 - onderwerpen• Herhaling instructieset• Assembler ‘truukjes’ • Uitwerking opgaven vorig les• Alloceren van variabelen• Gebruik van shadow registers• Subroutines en macro’s• Gebruik van MPLAB• Simuleren met MPLAB• Opgaven: delay W ms, kwardraat
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
22PROJ5 – PIC assembler
file + w => (same) file, of w
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
32PROJ5 – PIC assembler
Instructies: bit set/clear, bit test
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
42PROJ5 – PIC assembler
file ‘op’ literal => (same) file of w, controldiversen
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
52PROJ5 – PIC assembler
Assembler “truukjes”
• Ingebouwd:SKPZ, SKPNZ, SKPC, SKPNCSTEC, CLRC, SETZ, CLRZMOVFW
• Macro’s:#define W 0#define F 1Let op mogelijke fouten, wat doet:
RRC W, F
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
62PROJ5 – PIC assembler
oefening 1 : optellen
; tel de variabelen H'20' en H'21' op,
; stop de som in H'22'
movf H'20', w
addwf H'21', w
movwf H'22'
sleep ; zet dit na je code
end ; zet dit aan het einde van je file
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
72PROJ5 – PIC assembler
SUBWF instruction (1)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
82PROJ5 – PIC assembler
SUBWF instruction (2)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
92PROJ5 – PIC assembler
oefening 2 : maximum ( C )// versie 1if( a > b ){ max = a;} else { max = b;}
// versie 2max = a;if( b > a ){ max = b;}
// versie 3max = ( a > b ) a : b;
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
102PROJ5 – PIC assembler
oefening 2 : maximum (versie 1a); bepaal het maximum van de variabelen H'20' en H'21'; stop dit maximum in H'22‘(10 instructies)
; vergelijkmovfw H'20'subwf H'21', w ; H’21’ – H’20’skpnc ; C resultaat is positief H’20’ is kleiner goto kleiner ; C neem H’21’goto groter
; als we hier komen was H'21' groterkleiner
movfw H'21'movwf H'22'goto klaar
groter; als we hier komen was H'20' dus grotermovfw H'20'movwf H'22'
klaar
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
112PROJ5 – PIC assembler
oefening 2 : maximum (versie 1b); bepaal het maximum van de variabelen H'20' en H'21'; stop dit maximum in H'22‘(9 instructies)
; vergelijkmovfw H'20'subwf H'21', w ; H’21’ – H’20’skpnc ; C resultaat is positief H’20’ is kleiner goto kleiner ; C neem H’21’
; als we hier komen was H'20' dus grotermovfw H'20'movwf H'22'goto klaar
; als we hier komen was H'21' groterkleiner
movfw H'21'movwf H'22'
klaar
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
122PROJ5 – PIC assembler
oefening 2 : maximum (versie 2); dat kan ook wat korter (6 instructies)
; neem aan dat H'20' het maximum ismovf H'20', wmovwf H'22'
; vergelijk met H'21'; movfw H'20' is niet nodig, dat zit al in Wsubwf H'21', w
; dit beinvloedt de C flag niet!!!movf H'21', wskpnc movfw H'22'
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
132PROJ5 – PIC assembler
oefening 2 : maximum (versie 3)
; of zo (ook 6 instructies)
; vergelijkmovfw H'20'subwf H'21', w
; dit beinvloed de flags niet!!!movf H'20', wskpnc movf H'21', wmovwf H'22'
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
142PROJ5 – PIC assembler
PIC16F887 memory map
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
152PROJ5 – PIC assembler
Assembler : variabelen – doe het zelf
Absolute adressen:
Of met #define of EQU:
movfw H’20’
movwf H’21
#define A H’20’
B EQU H’21’
movfw A
movwf B
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
162PROJ5 – PIC assembler
Assembler : variabelen – laat ‘cblock’ het doen
cblock 0x20name_1, name_2 name_3, name_4
endc ...cblock
name_5 name_6 : 2
endc
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
172PROJ5 – PIC assembler
Assembler template (zie website)
list p=16f887, f=inhx32#include <P16F887.INC>
org 0cblock H’20’ endc
; hier komt uw code
sleepEND
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
182PROJ5 – PIC assembler
Een stukje van PIC16F887.INC ;----- Register Files-----------------------------
INDF EQU H'0000'TMR0 EQU H'0001'PCL EQU H'0002'STATUS EQU H'0003'FSR EQU H'0004'PORTA EQU H'0005'
PORTC EQU H'0007'
PCLATH EQU H'000A'INTCON EQU H'000B'PIR1 EQU H'000C'
Staat op C:/Program Files/MPLAB IDE/MChIP_Tools
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
192PROJ5 – PIC assembler
read-modify-write : IO pin
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
202PROJ5 – PIC assembler
read-modify-write (fout)
clrf PORTA
bsf PORTA, 0
bsf PORTA, 1
bsf PORTA, 2
bsf PORTA, 3
bsf PORTA, 4
bsf PORTA, 5
bsf PORTA, 6
bsf PORTA, 7
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
212PROJ5 – PIC assembler
subroutine voorbeeld
wait
addlw 0
skpz
return
addlw 1
goto wait
...
...
movlw D’200’
call wait
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
222PROJ5 – PIC assembler
subroutine
• lijkt op een C/Java/C# functie maar veel primitiever
• label waar je met een call instructie heen springt
• daar een reeks instructies
• een return (of retlw) instructie brengt je terug
• er is een stack voor de return adressen
• die stack is maar 8 niveau’s diep
• volgorde van subroutines en main is niet belangrijk, maar
• let wel op als je subroutines vooraan staan!
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
232PROJ5 – PIC assembler
wat is een macro
• naam voor een aantal regels text• wordt letterlijk ingevoegd
bank0 macro
bcf STATUS, RP0
bcf STATUS, RP1
endm
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
242PROJ5 – PIC assembler
wat is een macro
• Kan (textuele) parameters parameters hebben
double macro REGISTER
bcf STATUS, C
rlf REGISTER, f
endm
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
252PROJ5 – PIC assembler
macro voorbeeld en gebruikFLUSH_ MACRO MACRO Shadow, Port
CBLOCKShadow
ENDCMOVFW ShadowMOVWF PortRETURNENDM
PORTA_FLUSH FLUSH_MACRO PORTA_SHADOW, PORTAPORTB_FLUSH FLUSH_MACRO PORTB_SHADOW, PORTBPORTC_FLUSH FLUSH_MACRO PORTC_SHADOW, PORTCPORTD_FLUSH FLUSH_MACRO PORTD_SHADOW, PORTDPORTE_FLUSH FLUSH_MACRO PORTE_SHADOW, PORTE
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
262PROJ5 – PIC assembler
Macro – listing (.lst)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
272PROJ5 – PIC assembler
read-modify-write (goed)
clrf PORTA_SHADOW
call PORTA_FLUSH
bsf PORTA_SHADOW, 0
call PORTA_FLUSH
bsf PORTA_SHADOW, 1
call PORTA_FLUSH
bsf PORTA_SHADOW, 2
call PORTA_FLUSH
...
PORTA_FLUSHmovfw PORTA_SHADOW
movwf PORTA
return
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
282PROJ5 – PIC assembler
Macro Subroutine
• marco heeft geen call/return
(gebruikt de stack niet)• subroutine aanroep is altijd 1 statement• macro ‘aanroep’ voegt de complete macro in• een macro kan assembly-time argumenten hebben
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
292PROJ5 – PIC assembler
MPLAB IDE
IDE : Integrated Development Environment
• Project management
• Editor
• Assembler
• Programmer/debugger interface(s)
• Integration of third-party tools (compilers)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
302PROJ5 – PIC assembler
Gebruik van MPLAB(Zie ook de MPLAB quick start guide op de Microchip website )• Start MPLAB• Controleer: Configure Select Device 16F887• Start een project: Project New kies een project naam, zet
project directory naar keuze lokaal, op je USB stick, of op (in directory in) je network drive (heel erg lange pad-namen kunnen problemen geven)
• Of open een bestaand project: Project Open kies een bestaand project
• Een nieuwe file creeren: File New; File Save As mag zelfde naam als project (als het de hoofdfile is, of als je maar 1 file gebruikt)
• Een assembler file toevoegen aan een project: Project Add Files to Project double click to add the file as source file
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
312PROJ5 – PIC assembler
Gebruik van de assembler
• Check: edit properties editor tab zet “line numbers’ aan
• Edit je file
(saven is niet nodig maar wel verstandig)• Assembleren en linken: Project Build All• Herhalen tot de fouten en warnings eruit zijn!
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
322PROJ5 – PIC assembler
Gebruik van de simulator
• Debugger select tool MPLAB SIM• Debugger reset processor reset (F6)• Debugger Clear Memory GPRs (let op!)• Debugger step into (F7)• View 4 File Registers• View 5 Special Function Registers
(Waarden die in de vorige stap zijn veranderd worden rood weergegeven.)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
332PROJ5 – PIC assembler
Gebruik van de simulator
• Stap nu een aantal keren tot je denkt dat je programma-lus goed werkt (F6)
• Double-click op de regel na een loop om een breakpoint te zetten
• Debugger Run (F9)• Controleer of het resultaat klopt
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
342PROJ5 – PIC assembler
Doen
test je ‘vermenigvuldig’ programma in de simulator, laat het aftekenen als het werkt
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
352PROJ5 – PIC assembler
Programmeer opgave 1: Een delay subroutine
• Een instructie duurt 0.2 us (20 MHz, 5 MIPS)• Een ‘geskipte’ instructie ook!• Behalve GOTO, CALL, RETURN: 0.4 us
Maak een subroutine die W ms wacht (naukeurigheid 1% of beter)
• Test dmv de stopwatch/instructie counter
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
362PROJ5 – PIC assembler
Programmeer opgave 2: een kwardraat functie
Schrijf een macro if_return met twee parameters X en Y. Als W de waarde X bevat dan voert de macro een ‘RETLW Y’ instructie uit.
Schrijf met behulp van deze macro een subroutine die de waarde in W kwardrateert, mits W kleiner is dan of gelijk aan 6. Zo niet dan wordt de waarde 0 teruggegeven.
• Test je routine in de simulator.