2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 2 - onderwerpen Herhaling instructieset en Assembler ‘truukjes’ Bespreking opgaven 1 en 2 van de vorig les Allokeren van variabelen Gebruik van MPLAB, simuleren DB038 bordje Gebruik van MPLAB, bordje, en pickit2 Opgave met simulator: vermenigvuldigen Opgave op bordje: tellen op de LEDs
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 2 file + w => (zelfde) file, of w Let op, wat doet: ADDWF 0x21 ?
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 3 Instructies: bit set/clear, bit test
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 4 - W ‘op’ literal => w - Control - Miscalaneous
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 5 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 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 ; zet dit na je code end; zet dit aan het einde van je file
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 7 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;
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 8 SUBWF instruction – 16F887 datasheet
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 9 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 if( a > b ){ max = a; } else { max = b; }
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 10 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; 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 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 if( a > b ){ max = a; } else { max = b; }
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 11 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' max = a; if( b > a ){ max = b; }
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 12 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' max = ( a > b ) ? a : b;
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 13 MPLAB IDE IDE : Integrated Development Environment Project management Editor Assembler Programmer/debugger interface(s) Integration of third-party tools (compilers)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 14 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 15 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!
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 16 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.)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 17 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 18 Opgave 1 test je ‘vermenigvuldig’ programma in de simulator, als het goed werkt: demonstreren en laten het aftekenen
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 19 PIC16F887 memory map
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 20 Assembler : variabelen – doe het zelf Absolute adressen: Of met #define of EQU: movfw H’20’ movwf H’21 #define A H’20’ BEQU H’21’ movfw A movwf B
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 21 Assembler : variabelen – laat ‘cblock’ het doen cblock 0x20 name_1, name_2, A, B name_3, name_4 endc... cblock name_5 name_6 : 2 endc
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 22 Assembler template (zie website) list p=16f887, f=inhx32 #include org 0 cblock H’20’ endc ; hier komt uw code sleep END
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 23 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 24 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!
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 25 subroutine voorbeeld wait addlw 0 skpz return addlw 1 goto wait... movlw D’200’ call wait
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 26 DB038 Contains: Target chip: PIC16F887 Programmer: pickit2 clone Power: from USB (2x), Wall-Wart / NiCad Peripherals: LSP, LEDs (and much more)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 27 DB038 Programming connector Power (zet de jumper op linker 2x3 rechts, op rechter 1x3 links) 8 LEDs reset Programming activity LED Power LED
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 28 Using DB038 Get les2-count.zip (from my website) Unzip to new directory (let op path!) Double-click count.mcp Edit count.asm Assemble Correct errors and repeat....
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 29 an (empty) DB038 program ;================================================================ ; ; count.asm ; ;================================================================ ; initialisation etc for DB038 ; also beeps and activated the LEDs #include ;================================================================ ; main ;================================================================ ; put your code here ;================================================================ ; end of assembler source ;================================================================ SLEEP END
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 30 DB INC 1.Includes the Microchip16F887 include file (register definitions) 2.Sets the configuration word(s) (oa. 20 MHz crystal, external reset) 3.ORG 0, CBLOCK H’20’ 4.M10WAIT subroutine – die mogen jullie vandaag gebruiken (wacht 10 ms) 5.Initialises TRIS (direction) registers 6.Beeps 7.Activates LEDS, pattern 0x55
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 31 PICkit 2 V1.20 Gebruik V1.20 !!! Device Family > Midrange (14 bit core)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 32 PICkit 2 V1.20 Selecteer de.hex file die je in MPLAB hebt aangemaakt:.HEX
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 33 PICkit 2 V1.20 Zet target 5.0V aan (niet nodig op bord 1.05) Zet programmeren van de Data EEPROM (voorlopig) uit
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 34 opgave 2 – tel op 8 LEDs (DB038 bord) Main loop: –Tel in een variabele –Copieer die naar PORTD –Wacht even (gebruik de M10WAIT subroutine, die wacht 10 ms) Allokeer je variabelen nu en voortaan altijd op de nette manier (cblock). Hoe snel zal de meest linker LED ongeveer gaan knipperen?