Rad 3 _blir_ nog aldrig en NOP. decfsz betyder (om jag minns rätt) decrement file, skip if zero.
CNT2 minskas med ett och sen görs en koll om värdet är 0. Om så är fallet så hoppas nästa instruktion över (och loopen avslutast alltså).
Raderna kommer att köras i ordningen: 2,4,5..
DECFSZ tar:
- 1 cykel om den *inte* gör skip
- 2 cykler om den gör skip, och den "skippade" instruktionen är en "one-word" instruktion. Den skippade instruktionen exekveras som en NOP.
- 3 cykler om den gör skip, och den "skippade" instruktionen är en "two-word" instruktion (GOTO, CALL, MOVFF, LFSR). Första halvan av den skippade instruktionen exekveras som en NOP. Den andra halvan av *alla* 2-word instruktioner exekveras i alla fall alltid som en NOP.
Notera att en GOTO alltid har "1111 xxxx xxxx xxxx" i *andra* halvan.
Och att en NOP är definierad som "0000 0000 0000 0000" *eller* "1111 xxxx xxxx xxxx".
Så om man av misstag hoppar till den andra halvan av en 2-word instruktion
(vilket är det som alla SKIP-instruktioner gör), så kommer den att automatiskt att exekveras som en NOP.
MOVLW är en 1 cykel instruktion.
MPSIM är utmärkt för att testa timingen i delay rutiner.
Det verkar stå mycket nyttigt i databladet. Jag borde kanske ladda ner det någon gång..
Jag läste förstås databladet, men förstod inte riktigt allt. När jag läste ditt inlägg några gånger så förstod jag. Så se det som att du är bra på att förklara.