Professional Documents
Culture Documents
l
looping
instruction pipeline
PIC Microcontroller
and Embedded Systems
Muhammad Ali Mazidi,
Rolin McKinlay and
Danny Causey, February
2007.
3-1
Objective
Looping in PIC
3-2
3-3
Looping in PIC
DECFSZ instruction
Decrement file
3-4
DECFSZ instruction
BNZ\BZ instructions
3-5
3-6
Example 3-1
Write a program to Solution
a) Clear WREG
b) Add 3 to WREG
COUNT
AGAIN
EQU 0x25
MOVLW d'10'
MOVWF COUNT
O N
MOVLW 0
ADDLW 3
DECFSZ COUNT,F
GOTO AGAIN
MOVWF PORTB
3-7
3-8
b) Add 3 to WREG
Example 3-2
Back
.
.
DECF fileReg, f
BNZ Back
3-9
COUNT
AGAIN
EQU 0x25
MOVLW d'10'
MOVWF COUNT
O N
MOVLW 0
ADDLW 3
DECF
COUNT,F
BNZ
AGAIN
MOVWF PORTB
3-10
Example 3-3
What is the maximum number of times that
3-11
3-12
Solution
Write a program to
a) Load the PORTB SFR register with the
value 55H
LOP_1
Solution
R1 EQU 0x25
R2 EQU 0x26
COUNT_1 EQU d'10'
COUNT_2 EQU d'70'
The PIC uCs
LOP_2
3-13
3-15
MOVLW 0x55
MOVWF PORTB
MOVLW COUNT_1
MOVWF R1
MOVLW COUNT_2
MOVWF R2
COMPF PORTB, F
DECF R2, F
BNZ LOP_2
DECF R1, F
BNZ LOP_1
Address
Data
25H(R1) 10
26H(R2) 70
F81H
(PORTB) 55
3-14
3-16
instructions
3-17
1-18
Example 3-5
Example 3-6
MYLOC
EQU Ox30
MOVF
MYLOC, F
BNZ
NEXT
MOVLW 0x55
MOVWF MYLOC
NEXT
...
The PIC uCs
3-19
ORG 0h
MOVLW 0x0
MOVWF H_Byte
ADDLW 0x79
BNC
N_1
INCF
H_Byte,F
The
The PIC
PICuCs
uCs
ADDLW 0xF5
BNC
N_2
INCF
H B t F
H_Byte,F
N_2 ADDLW
0xE2
BNC OVER
INCF
H_Byte,F
OVER MOVWF L_Byte
END
N_1
3-21
Example 3-7
Address
Data
5H(Low
Byte)
0
6H(High
Byte)
0
79
Address
Data
Address
Data
5H(Low
5H(Low
Byte)
0
Byte)
50
6H(High
6H(High
Byte)
1
Byte)
2
79+F5
= 16E
6E 6E+E2
50
= 150
3-20
Example 3-7
Solution
H_Byte EQU 0x6
000000 0E00
000002 6E06
000004 0F79
000006 E301
000008 2A06
00000 0FF5
00000A
00000C E301
00000E 2A06
000010 0FE2
000012 E301
000014 2A06
000016 6E05
The PIC uCs
00004
MOVLW 0x0
00005
MOVWF H_Byte
00006
ADDLW 0x79
00007
BNC
N_1
00008
INCF H_Byte,F
00009 N_1
N 1 ADDLW
DDLW 0xF5
0 F5
00010
BNC
N_2
00011
INCF H_Byte,F
00012 N_2
ADDLW 0xE2
00013
BNC
OVER
00014
INCF H_Byte,F
00015 OVER MOVWF L_Byte 3-22
Example 3-8
3-23
3-24
Unconditional branch
instruction
Question?
Which is better, to use BNZ along with DECF
or DCFSNZ??
3-25
3-26
BRA Instruction
3-27
BRA Instruction
3-28
GOTO to itself
Forward
jump
Backward
jump 3-29
3-30
Call instruction
Call a
subrutine
Section 3-2
The PIC uCs
3-31
CALL Instruction
Rcall
4-byte instruction
2-byte instruction
Long Call
Relative Call
3-32
CALL Instruction
Control is transferred to subroutine
110S
3-33
3-34
stack
Location
0 doesnt used
pointer
Incremented
3-35
3-36
Example 3-9
3-37
BACK
The
The PIC
PICuCs
uCs
EQU 0x08
EQU 0x0F8
ORG 0
MOVLW 0x55
MOVWF PORTB
CALL DELAY
MOVLW 0xAA
MOVWF PORTB
CALL
DELAY
GOTO BACK
3-38
Example
3-10
Solution
MYREG
PORTB
ORG 20H
MOVLW
0xFF
MOVWF MYREG
AGAIN
NOP
NOP
DECF MYREG, F
BNZ AGAIN
RETURN
END
3-39
DELAY
Address
Data
4
3
2
1
000008
000016
3-40
3-41
3-42
Example 3-12
PIC18 Time Delay and
instruction p
pipeline
p
Section 3-3
The PIC uCs
3-43
3-45
3-44
the delay
1. The duration of the clock period, which is
function of the Crystal
y
freq
q
Connected
execution.
split
p into small steps
p
3-47
3-48
oscillator
circuitry
oscillator period.
3-49
Example 3-14
Branch penalty
instruction
If the prefetched instruction is incorrect,
the CPU must flush the memory.
y When??
3-51
Branch penalty
3-50
3-52
3-53
3-54
Example 3-15
Example 3-17
MYREG
ORG 0
BACK
MOVWF
CALL
MOVLW
MOVWF
CALL
GOTO
Example 3-20
EQU 0x08
ORG 300H
DELAY
MOVLW 0xFA
MOVLW 0x55 MOVWF MYREG
PORTB
AGAIN
NOP
DELAY
NOP
0xAA
NOP
PORTB
DECF
MYREG, F
DELAY
BNZ AGAIN
BACK
RETURN
3-57
R2 EQU 0x2
R3 EQU 0x3
R4 EQU 0x4
MOVLW
0x55
MOVWF
PORTB
BACK
CALL DELAY_500MS
COMF PORTB
GOTO BACK
The PIC uCs
3-56
DELAY_500MS
MOVLW
D'20'
MOVWF
R4
BACK
MOVLW D'100'
MOVWF
R3
AGAIN
MOVLW D'250'
MOVWF
R2
HERE NOP
NOP
DECF R2, F
BNZ
HERE
DECF R3, F
BNZ
AGAIN
DECF R4, F
BNZ
BACK
3-58
RETURN
Chapter 3: Summary
Looping in PIC Assembly language is
Next: Chapter 4
PIC I/O Port
Programming
3-59
10