2PROJ5 – PIC assembler Les 2 - onderwerpen • • • • • • • • • Herhaling instructieset Assembler ‘truukjes’ Uitwerking opgaven vorig les Allokeren van variabelen Gebruik van shadow registers Subroutines en macro’s Gebruik van MPLAB Simuleren met MPLAB Opgaven: delay W ms, kwadraat 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, or => w - Control - Miscalaneous Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 4 2PROJ5 – PIC assembler Assembler “truukjes” • Ingebouwd: SKPZ, SKPNZ, SKPC, SKPNC SETC, 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 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 7 2PROJ5 – PIC assembler SUBWF instruction (1) Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 8 2PROJ5 – PIC assembler SUBWF instruction (2) Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 9 2PROJ5 – PIC assembler 10 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 if( a > b ){ ; als we hier komen was H'21' groter kleiner movfw H'21' movwf H'22' goto klaar max = a; } else { max = b; } 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 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 max = a; if( b > a ){ max = b; } movfw H'21' movwf H'22' klaar Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 2PROJ5 – PIC assembler 12 oefening 2 : maximum (versie 2) ; dat kan ook wat korter (6 instructies) ; neem aan dat H'20' het maximum is movf H'20', w max = ( a > b ) ? a : b; 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 2PROJ5 – PIC assembler 13 oefening 2 : maximum (versie 3) ; of zo (ook 6 instructies) ; vergelijk movfw H'20' subwf H'21', w max = ( a > b ) ? a : b; ; 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 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 RRFW macro movwf temp rrf temp, w 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 (je programma wordt al snel erg groot) • 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 kwadraat 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 kwadrateert, 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