2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 1 Les 3 - onderwerpen Instruction timing Shadow port registers, Macro’s Opgaves: delay, IO_SET/IO_CLEAR, Kitt
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 2 Opmerkingen Fouten in het DB038 document: graag doorgeven! Laptop gebruikers: USB power management uitzetten VMWare: soms komt de USB connectie in de root- PC terecht in plaats van in de gesimuleerde PC Bewaar je bordje tussen dat zwarte schuim, maar zet ‘m er niet op als je ‘m gebruikt. Ook niet op een geleidend oppervlak!
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 3 Instruction timing Shadow port registers, Macro’s Register file banks Gebruik van het DB038 bord Aftekenen vorige opgaves Twee nieuwe opgaves
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 4 Programmeer opgave 1: Een delay subroutine Maak een subroutine die W ms wacht (nauwkeurigheid 1% of beter) Test dmv de stopwatch/instructie counter in de simulator.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 5 Een W * 1 ms delay int i = W; while( i > 0 ){ i--; delay_1ms(); }
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 6 Instruction timing 20 MHz / 4 5 MIPS Dus 0.2 us per instructie Behalve als de PC geschreven wordt (GOTO, CALL, RETURN), dan 0.4 us
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 7 Een Delay_1ms 5 MIPS, dus 1 ms is 5000 instructies* In 8 bit kan je tot 256 tellen, neem keer door de lus moet dan 5000 / 250 = 20 instructies zijn * GOTO etc. tellen voor 2
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 8 Delay_1ms : eerste poging cblock teller endc movlw D’250’ movwf teller loop: decfsz teller, f goto loop Hoeveel vertraging moeten we nog toevoegen, en waar precies?
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 9 Een paar instructies vertraging (1) loop:nop ; 17 NOPs... nop decfsz teller, f goto loop
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 10 Een paar instructies vertraging (2) nop4:macro nop enmd loop:nop nop4 decfsz teller, f goto loop
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 11 Een paar instructies vertraging (3) delay_4:return cblock teller endc movlw D’250’ movwf teller loop: nop call delay_4 decfsz teller, f goto loop
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 12 Een paar instructies vertraging (4) delay_16:call delay_4 delay_12:call delay_4 delay_8:call delay_4 delay_4:return cblock teller endc movlw D’250’ movwf teller loop: nop call delay_16 decfsz teller, f goto loop
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 13 Een paar instructies vertraging (5) delay_2: macro goto $+1 endm delay_4:macro delay_2 endm delay_8: macro delay_4 endm delay_16:macro delay_8 endm
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 14 Het ‘read-modify-write probleem Macro’s Shadow PORT registers
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 15 read-modify-write : IO pin
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 16 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 17 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
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 18 wat is een macro naam voor een aantal regels text wordt letterlijk ingevoegd RRFW macro movwf temp rrf temp, w endm
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 19 wat is een macro Kan (textuele) parameters parameters hebben double macro REGISTER bcfSTATUS, C rlfREGISTER, f endm
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 20 macro voorbeeld en gebruik FLUSH_MACRO MACRO Shadow, Port CBLOCK Shadow ENDC MOVFW Shadow MOVWF Port RETURN ENDM PORTA_FLUSHFLUSH_MACRO PORTA_SHADOW, PORTA PORTB_FLUSHFLUSH_MACRO PORTB_SHADOW, PORTB PORTC_FLUSHFLUSH_MACRO PORTC_SHADOW, PORTC PORTD_FLUSHFLUSH_MACRO PORTD_SHADOW, PORTD PORTE_FLUSHFLUSH_MACRO PORTE_SHADOW, PORTE
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 21 Macro Subroutine een macro is een reeks regels die ingevoegd wordt een macro kan assembly-time argumenten hebben macro 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)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 22 Macro – listing (.lst)
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 23 Programmeer opgave 2: I/O pin set en clear macro’s Schrijf de macro’s IO_SET en IO_CLEAR met twee parameters X en Y. X moet een poort register zijn (PORTA, PORTB, etc), B een bit (0..7). De macro moet het betreffende bit in het shadow register zetten, en dan een subroutine ‘FLUSH_ALL’ aanroepen. Schrijf ook de FLUSH_ALL subroutine.
2PROJ5 – PIC assembler Hogeschool Utrecht / Institute for Computer, Communication and Media Technology 24 Programmeer opgave 3: KITT / Knight Rider Maak een ‘Kitt’ display op de LEDs. Iedere stap in de sequence moet 250 ms zijn. Gebruik de IO_SET en IO_CLEAR macro’s voor het aan en uit zetten van de LEDs.