vergelijk met H`21`

advertisement
2PROJ5 – 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
1
2PROJ5 – PIC assembler
file + w => (same) file, of w
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2
2PROJ5 – PIC assembler
Instructies: bit set/clear, bit test
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
3
2PROJ5 – PIC assembler
file ‘op’ literal => (same) file of w,
control
diversen
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
4
2PROJ5 – PIC assembler
Assembler “truukjes”
• Ingebouwd:
SKPZ, SKPNZ, SKPC, SKPNC
STEC, CLRC, SETZ, CLRZ
MOVFW
• Macro’s:
#define W 0
#define F 1
Let op mogelijke fouten, wat doet:
RRC W, F
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
5
2PROJ5 – PIC assembler
6
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
end
; zet dit na je code
; zet dit aan het einde van je file
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – PIC assembler
SUBWF instruction (1)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
7
2PROJ5 – PIC assembler
SUBWF instruction (2)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
8
2PROJ5 – PIC assembler
oefening 2 : maximum ( C )
// versie 1
if( a > b ){
max = a;
} else {
max = b;
}
// versie 2
max = a;
if( b > a ){
max = b;
}
// versie 3
max = ( a > b ) a : b;
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
9
2PROJ5 – 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)
; vergelijk
movfw 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' groter
kleiner
movfw H'21'
movwf H'22'
goto klaar
groter
; als we hier komen was H'20' dus groter
movfw H'20'
movwf H'22'
klaar
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
10
2PROJ5 – PIC assembler
11
oefening 2 : maximum (versie 1b)
; bepaal het maximum van de variabelen H'20' en H'21'
; stop dit maximum in H'22‘(9 instructies)
; vergelijk
movfw H'20'
subwf H'21', w
skpnc
goto kleiner
; H’21’ – H’20’
; C  resultaat is positief  H’20’ is kleiner
; C  neem H’21’
; als we hier komen was H'20' dus groter
movfw H'20'
movwf H'22'
goto klaar
; als we hier komen was H'21' groter
kleiner
movfw H'21'
movwf H'22'
klaar
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – PIC assembler
oefening 2 : maximum (versie 2)
; dat kan ook wat korter (6 instructies)
; neem aan dat H'20' het maximum is
movf H'20', w
movwf H'22'
; vergelijk met H'21'
; movfw H'20' is niet nodig, dat zit al in W
subwf H'21', w
; dit beinvloedt de C flag niet!!!
movf H'21', w
skpnc
movfw H'22'
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
12
2PROJ5 – PIC assembler
oefening 2 : maximum (versie 3)
; of zo (ook 6 instructies)
; vergelijk
movfw H'20'
subwf H'21', w
; dit beinvloed de flags niet!!!
movf H'20', w
skpnc
movf H'21', w
movwf H'22'
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
13
2PROJ5 – PIC assembler
PIC16F887
memory map
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
14
2PROJ5 – PIC assembler
15
Assembler : variabelen – doe het zelf
Absolute adressen:
movfw H’20’
movwf H’21
Of met #define of EQU:
#define A H’20’
B EQU H’21’
movfw A
movwf B
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – PIC assembler
Assembler : variabelen – laat ‘cblock’ het doen
cblock 0x20
name_1, name_2
name_3, name_4
endc
...
cblock
name_5
name_6 : 2
endc
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
16
2PROJ5 – PIC assembler
Assembler template (zie website)
list p=16f887, f=inhx32
#include <P16F887.INC>
org 0
cblock H’20’
endc
; hier komt uw code
sleep
END
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
17
2PROJ5 – PIC assembler
18
Een stukje van PIC16F887.INC
;----- Register Files----------------------------INDF
TMR0
PCL
STATUS
FSR
PORTA
EQU
EQU
EQU
EQU
EQU
EQU
H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
PORTC
EQU
H'0007'
PCLATH
INTCON
PIR1
EQU
EQU
EQU
H'000A'
H'000B'
H'000C'
Staat op C:/Program Files/MPLAB IDE/MChIP_Tools
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – PIC assembler
read-modify-write : IO pin
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
19
2PROJ5 – PIC assembler
read-modify-write (fout)
clrf PORTA
bsf PORTA,
bsf PORTA,
bsf PORTA,
bsf PORTA,
bsf PORTA,
bsf PORTA,
bsf PORTA,
bsf PORTA,
0
1
2
3
4
5
6
7
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
20
2PROJ5 – 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
21
2PROJ5 – PIC assembler
22
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
2PROJ5 – 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
23
2PROJ5 – 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
24
2PROJ5 – PIC assembler
25
macro voorbeeld en gebruik
FLUSH_ MACRO MACRO Shadow, Port
CBLOCK
Shadow
ENDC
MOVFW Shadow
MOVWF Port
RETURN
ENDM
PORTA_FLUSH
PORTB_FLUSH
PORTC_FLUSH
PORTD_FLUSH
PORTE_FLUSH
FLUSH_MACRO
FLUSH_MACRO
FLUSH_MACRO
FLUSH_MACRO
FLUSH_MACRO
PORTA_SHADOW,
PORTB_SHADOW,
PORTC_SHADOW,
PORTD_SHADOW,
PORTE_SHADOW,
PORTA
PORTB
PORTC
PORTD
PORTE
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – PIC assembler
Macro – listing (.lst)
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
26
2PROJ5 – 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_FLUSH
movfw PORTA_SHADOW
movwf PORTA
return
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
27
2PROJ5 – PIC assembler
28
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
2PROJ5 – 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
29
2PROJ5 – PIC assembler
30
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
2PROJ5 – 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
31
2PROJ5 – 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
32
2PROJ5 – 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
33
2PROJ5 – PIC assembler
34
Doen
 test je ‘vermenigvuldig’ programma in de
simulator, laat het aftekenen als het werkt
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
2PROJ5 – 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
35
2PROJ5 – 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.
Hogeschool Utrecht / Institute for Computer, Communication and Media Technology
36
Download