You are on page 1of 57

1. .. , " ", , 1995.

2. . , . , . , . , .
, " ".
, , 1999.
3. S. Mueller, "Upgrading and Repairing PCs", Scott Mueller, 10th edition, Que
Corporation, 1998.
.
, . , "8086: ,
4.
', , 1992.



PIC

5.1
5.2
5.3
5.4
5.5
5.6
114

PIC

PIC

Assembly PIC

Assembly

:

PIC.
Assembly , .
.
Assembly.
Assembly.

I PIC

5.1 PIC
5.1.1
,
. ,
, CISC
RISC. PIC, Microchip
RISC.
PIC , (core)
(peripheral units).
,
.
.
PIC :


. ,
. ,
. ,
, , ,
, ,
. ,
, .
,
, , ,
. PIC, Microchip.

.
,
,
Assembly. ,
. ,
.

, , ,
PIC,
.
:
/
( )

( )




,
PIC.

5.1.2
(..), CPU,

. , ,
117

, , . ,
PIC (35) .
.
,
(...). 5.1 ... , ,
PIC.
. ,
(AND, OR, XOR, ).
(8-bit).

PC

STATUS

A/D

118

USART

, ,
. ,
,
.
Program Counter (PC).

5.1.3

.
.
.

.
5.2.

..

I PIC

...

14

PWM

5.1 PIC.

...

5.2 . ()
. () (
PIC).

119

PIC .
,
()
. , ,

. , ,

,
. , PIC,
(14) (bits) (8),
, . ,
,
, , , , , ,
.
2 8KBytes , ,
Flash.
.

.
,
128Bytes , 384Bytes .
.
PIC
.
,
.

5.1.4

RISC CISC.

RISC,
CISC.
RISC
,
.
PIC, RISC
(35) , (14 bit). ,
CISC, PIC
120

I PIC

, . ,
,
.
80, CISC,
(10) .
PIC ,
.

5.1.5
PIC ,
, .
, ,
. PIC

.
.
, , K.M.E.
.
,
.

PIC,
. ,
, PIC, .
, ,
. , , , ..
/,
. ,
, ...
... .
,
.
, ,
. ,
.
.
, , ,
. ,
...,
121

. , ...
, ,
, , .
,
, , , , ...
, .
PIC , , ,
. ,
. ,
, , , .
, ,
, .
, , , ,
, ,
PIC.

5.1.6
,
, ,
.
, A/D ,
, .
, . ,

. PIC
,
.
/ , (8)
(bits).
.
.
, ,
. ,
,
.
,
(PWM).
(.. ).
. ,
: ,
122

I PIC

USART , , , SSP
(Synchronous Serial Port).
, .
,
.
, , 8 bit.

5.2
,
. ,
. ,
. ,
,
.

.
, .
.
PIC ,
PIC, 5.3.

128KB

128KB

128KB

5.3 , , PIC.

123

, ,
(special function registers),
.

(general purpose register file). ,
W PC, .
W .

PIC. ,
. ,
,
W.
, PC,
. ,
... .
, ,
. PC, ,
1, .
, .

.
,
. , PC
.
PIC 13 bit. ,
213 , 0 8191.
. , PIC
8 , 5.1.3.
, , STATUS,
.
5.4.

7
0

6
RP1

5
RP0

4
-

3
-

2
Z

1
DC

0
C

5.4 STATUS.

bits 6, 5, 2,
1 0, . , ,
bits:
124

I PIC

RP1 - RP0: Bits (128 Bytes) .


00 = 0 (0 - 7F H),
01 = 1 (80 H - FF H)
10 = 2 (100 H - 17F H)
11 =
Z: Bit .
1 = 0. 0 =

0.
DC: Bit
.
1 = , 4 bit
. 0 = , 4
bit .
C: Bit
.
1 = ,
bit . 0 = ,
bit .
: bit ,
.
bit , ,
. , bit C .
, , ,
. , ,
, PIC.

5.3 PIC
PIC . ,
, (14) .
. ,
(OPCODE),
.
, . ...,
, , ,
, , , ,
.
, .
PIC , :
125

I PIC

byte (byte - oriented)


bit (bit - oriented)
( )

. ,
, , .
, (6) (bits).
bit
(4), ,
(3). 5.5 , ,
.

13

12

11

10

6
5
3
2
1

12

11

10

5
3
2
1

() bit

13

12

11

10

3
2

()

13

12

11

10

000101

() Byte ( d
)

13

, .. W.
Byte.
5.5(), .
, , .
6 bit 000101. 1 bit.

. 0 W, 1
. 7 bit TMR0,
. ,
PIC 128 , 7 bit
. , :

()
5.5 PIC

,
, , .
, (AND)
. W
1 . TMR0
,
PIC. , ,
126

0000001


, .
, :

ANDWF TMR0, 0
ANDWF 000101, TMR0
0000001
.
PIC.
01010100000001 bit TMR0, 1.
BSF TMR0,2. , 101 10111110011
5F3 H
. GOTO 05F3 H.
, , PIC
.
PIC
.

5.4
.
,
. 5.6.
127

C1

OSC1

C2

PIC

OSC2

I PIC

,
, GOTO 05F3 H, . ,
4 .
3, BSF TMR0, 1 ,
BSF TMR0, 2.

,
.

PIC, :
= 4 / (. PIC)

5.6 PIC.

455kHz 20MHz,
. PIC
OSC1.
, -
.
... .
PC 1 ,
,
. PIC,
.
,
, , PC. ,
. PC
, ,
.
.
,
:
05F0 H: ADDWF TMR0, 0
05F1 H: GOTO 05F3 H
05F2 H: BSF TMR0, 1
05F3 H: BSF TMR0, 2
05F4 H: ..
05F5 H: ..
05F5 H: ..
128

, PIC, ,
20z 0,2sec. ,
0,8sec.

5.5 Assembly PIC


5.4 PIC,
,
. ,
, , ,
, ,
05F0 H,
05F0 H: 00010100000001
05F1 H: 10110111110011
05F2 H: 01010010000001
05F3 H: 01010110000001
05F4 H: ..
05F5 H: ..
05F5 H: ..

. ,

.
. ,
, , . ,
,
.
129

,
.
.
Assembly.

. ,
.
, Assembly
PIC, , ,
. Assembly,

PIC , , . ,
,
.

. , Assembly
. ,
, , . ,
Assembly, ,
.
,
. ,
Basic Assembly. ,
,

. , , ,
. ,

.

.
C, , ,
Assembly. C, ,
Assembly.
Assembly, , ,
.

.
PIC. , ,
:

130

I PIC

/


bit
( )
,
,
. , 5.1
.
, , .

5.5.1
, , . ,
, ,
, ,
, . , , ,
PIC,
.

MOVLW

W . W
, , . ,
.

MOVLW
0 255.

:
W. ( 5.7)

MOVLW

5.7 W

MOVLW .

0 255,
byte. W
. .
.
131

, , W = 7A H MOVLW 35 H.
W = 35 H.

MOVWF

,
W. ,
. PIC
W.

MOVWF 0
127
.
KAMIA

: W,
( 5.8).

0

I PIC

, , W = 16 H TMR0 = 6A
MOVWF TMR0.
TMR0 = 16 H.
, W. ,
. TMR0
23 H. , , , W
, , TMR0 W. ,
:
MOVLW 23 H
MOVWF TMR0

MOVF K, d
, , W
.

TA

1
2

3
...
...
...
...
...
...

MOVWF K
W

MOVF K, d
0 127
.
d 0 127.
Z

: ,
W, d = 0, , d = 1. ( 5.9)

0

1
2

K+1

...
...
...

...
...
...
...
...
...

FE H
FF H

5.8 W
MOVWF .

, 0
127 . ,
, .. TMR0,
1, .
, .
.
132

MOVF K, 0
W

MOVF K, 1

K+1
...
...
...
FE H
FF H

5.9 W
MOVF , 0 MOVF , 1.

133

, ,
, 0 127
,
. ,
(). d = 1,
. , ,
0.
. , ,
TMR0, .
1
, , W = 26 H TMR0 = 1A
H. MOVF TMR0, 0. ,
W = 1A H, = 0, .
2
, , , , W = 26 H
TMR0 = 0.
MOVF TMR0, 1. d = 1,
W TMR0 .
0, 1, .

I PIC

.
"MOVLW 0" , 1.
.

, , W = 71 H CLRW.
W = 0, = 1,
.

CLRF
, ,
.

CLRF
0 127
.
Z

: K
1 ( 5.11).

CLRW

,
W. :

2
3

CLRW

: W
1 ( 5.10).

...
...
...
...
...
...
0

CLRF K

K+1

...
...
...

CLRW

134

5.10 W CLRW.

FE H
FF H

5.11 CLRF K.

W, ,
1. , , .
135

I PIC

TMR0 = C3 H. CLRF
TMR0. , TMR0 = 0 = 1,
.

0
1
2
3

1. W 9 H;
2. TMR0 5;
3. W
:
23 H, 0A H, 5, 50F H, 0FF H, 111 H, 035 H
4. TMR0
W.

INCF K, 1


1.
(loops) . PIC
.

INCF K, d
, , K
.

TA

INCF K, d
0 127
.
d 0 127.

Z
: K,
1
W, d = 0, K, d = 1 (
5.12).
136

K+1
...
...
...

INCF K, 0

FE H
W

5.5.2 /

...
...
...
...
...
...

FF H

5.12 1
W INCF K, 0
INCF K, 1.

, ,
0 127
, .
().
.
1
, , TMR0 = 16 H W = 8 H.
:
INCF TMR0, 1
,
TMR0 = 17 H ( , d = 1)
W = 8 H ( , d = 1)
,
= 0 ( ), .
2
, , TMR0 = FF H W = 8 H.
:
INCF TMR0, 0
137

,
TMR0 = FF H ( , d = 0)
W = 0 ( , d = 0)
,
= 1 ( ), .

INCFSZ K, d
. ,
.
. ,
.

INCFSZ K, d
0 127
.
d 0 127.

: K, 1
W, d = 0, K, d = 1.
,
.


PC. ,
5.5 ,
2 .
.

:
INCFSZ TMR0, 1
MOVLW 23 H
INCF TMR0, 1
, , TMR0 = FF H W = 12 H. ,
, :
: INCFSZ TMR0, 1
W = 12 H,
138

I PIC

TMR0 = 0
: 2
: MOVLW 23 H
.
: INCF TMR0, 1
W = 12 H,
TMR0 = 1
: 1
, 0,
.
, , , TMR0 = 5 H W = 12 H.
, , :
: INCFSZ TMR0, 1
W = 12 H,
TMR0 = 1
: 1
: MOVLW 23 H
W = 23 H,
TMR0 = 1
: 1
: INCF TMR0, 1
W = 23 H,
TMR0 = 2
: 1
, , 3
.

DECF K, d
.
INCF, , , .
139

DECF K, d
0 127
.
d 0 127.
Z

: K, 1
W, d = 0, K, d = 1
( 5.13).

1
2
3

-1

...
...
...
...
...
...

...
...
...
FE H

FF H

5.13 1
W DECF K, 0
DECF K, 1.

,
, 1.

DECFSZ K, d

INCFSZ, .
140

1. W 1;
2. DECF TMR0, 1;
3. W TMR0,
'DECF TMR0, 0', TMR0=5;

K+1
DECF K, 0

DECFSZ K, d
0 127
.
d
0 127.

: K, 1
W, d = 0, K,
d = 1.
.

. ,
, , ,
1.

DECF K, 1

I PIC

5.5.3

. PIC
. ,
.

ADDLW
, ,
.
5.4.

ADDLW

0 255.

C, DC, Z
: W
W ( 5.14).

141

+
ADDLW

5.14 W
W ADDLW .

0 255, byte.
W
. , ,
(C), (DC),
3 4 bit, (). ,
.
, ,
.
1
W = 6D H ADDLW D1 H :
0110 1101
+ 1101 0001
0011 1110

=
=
=

6D H
D1 H
3E H

, W
W = 3E H, :
C = 1 ( ),
DC = 0 ( )
= 0 ( 0),
.

I PIC

0010 1100
=
2C H
+ 1001 0101
=
95 H
1100 0001
=
C1 H
, W
W = C1 H, :
C = 0 ( ),
DC = 1 ( )
= 0 ( 0),
.

ADDWF K, d
,
. , , W. , ,
,
.

ADDWF K, d
0 127
.
d 0 127.
Z, C, DC

: W,
W, d = 0,
, d = 1 ( 5.15).

5.15
0
W
1

2

3
W ADDWF K,
0 ADDWF
K, 1.
ADDWF K, 1

ADDWF K, 0

2
W = 95 H ADDLW 2C H :

...
...
...
...
...
...
K

K+1
...
...
...

W
FE H
FF H

142

143

.
, ,
(C), (DC)
().
, ,
.
1
W = A3 H, TMR0 = 15 H ADDWF TMR0, 0, :
1010 0011
+ 0001 0101
1011 1000

=
=
=

I PIC

SUBLW
. ,
,
W. .
SUBLW

0 255.

C, DC, Z

: W,
W ( 5.16).

3
15
B8 H

, W
W = B8 H, :

SUBLW

C = 0 ( ),
DC = 0 ( )
= 0 ( 0),
.
2
W = DB H, TMR0 = 85 H ADDWF TMR0, 1 :
1101 1011
+ 1000 0101
0110 0000

=
=
=

DB H
85 H
60 H

, (60 H) TMR0, W
(DB H). :
C = 1 ( ),
DC = 1 ( )
= 0 ( 0),
.

144

5.16 W
W SUBLW .

, 0
255. , ,
(C), (DC) ().
.
, ,
.
1
W = 6D H SUBLW D1 H :
1101 0001
- 0110 1101
0110 0100

=
=
=

D1 H
6D H
64 H

, W
145

W = 64 H, :
C = 0 ( ),
DC = 1 ( )
= 0 ( 0),
.
2
W = A4 H SUBLW 21 H :
0010 0001
- 1010 0100
0111 1101

=
=
=

21 H
A4 H
7D H

I PIC

SUBWF K, d
. ,
,
W.

SUBWF K, d
0 127
.
d 0 127.
Z, C, DC

: W,
W,
d = 0, , d = 1 ( 5.17).

, W
W = 7D H, :

C = 1 ( ),
DC = 1 ( )
= 0 ( 0),

1
2
3

.
SUBWF K, 1

3
W = 21 H ADDLW 21 H, :
0010 0001
- 0010 0001
0000 0000

=
=
=

21 H
21 H
0

, W
W = 0, :

+
SUBWF K, 0

...
...
...
...
...
...
K

K+1
...
...
...

W
FE H
FF H

C = 0 ( ),
DC = 0 ( )
= 1 ( 0),
.

146

5.17 W
W SUBWF K, 0
SUBWF K, 1.

, 0
127 , .
(C),
147

I PIC

(DC) (). , ,
.
1
W = 6D H, TMR0 = D1 H SUBWF TMR0, 0, :
1101 0001
- 0110 1101
0110 0100

=
=
=

D1 H
6D H
64 H

, W , ,
W = 64 H, :
C = 0 ( ),
DC = 1 ( )
= 0 ( 0),
.
2
W = 67 H, TMR0 = 4 H SUBWF TMR0, 1, :
0110 0111
- 1010 0100
1100 0011

=
=
=

67 H
A4 H
C3 H

, TMR0, d = 1,
, , TMR0 = C3 H, :
C = 1 ( ),
DC = 0 ( )
= 0 ( 0),
.
3
W = 21 H, TMR0 = 21 H SUBWF TMR0, 0,
:

0010 0001
- 0010 0001
0000 0000,

=
=
=

21 H
21 H
0

, W
W = 0, :
C = 0 ( ),
DC = 0 ( )
= 1 ( 0),
.

1. C, DC Z, ADDWF
2. TMR0, 1, TMR0=0D H W=13 H;
3. ;

5.5.4
, PIC,
.
.
.
,
.
.
bits .
PIC :
(AND)
H (OR)
(XOR)
1


bits
AND OR, PIC , ,
. , .

148

149

ANDLW
, ,
. , ,
.

ADLW

0 255.

Z
: KAI
W .
W ( 5.18).

A ND

5.18
W
W ANDLW .

, 0
255. , W,
, bit bit, .
().
, .
150

0011 0101
AND 1010 0100
0010 0100

(35 )
(4 )
(24 H)

, W , W = 24 H,
0.

1010 1011
AND 0001 0100
0000 0000

ANDLW

1
W = 35 H ANDLW 4 H :

2
W = AB H ANDLW 14 H :

I PIC

( )
(14 )
(0)

, W
W = 0, 1,
.

ANDWF K, d
H ,
W .
, ,
, .

ADWF , d
0 127
.
d 0 127.

Z
:
W .
W, d = 0 ( 5.19),
, d = 1 ( 5.19).
151


5.19()
0

W
1
2

3
W ANDWF K, 0.
...
...
...
...
...
...

K+1

AND
8

ANDWF K, 0

...
...
...
FE H

AND
8

ANDWF K, 1

152

1010 0011
AND 0001 0101
0000 0001

(3 )
(15 )
(1)

, W, W = 1,
0, .

AND

0101 1010
1000 0101
0000 0000

(5A H)
(85 H)
(0)

1
2
3
...
...
...
...
...
...
K

K+1

1
W = A3 H TMR0 = 15 H.
ANDWF TMR0, 0, :

2
W = 5A H TMR0 = 85 H.
ANDWF TMR0, 1 :

.
().
,
.

FF H

5.19()

W



ANDWF K, 1.

I PIC

...
...
...
FE H
FF H

, TMR0
TMR0 = 0, 1, 0.
W .

IORLW
, PIC, (OR).
, , , ANDLW .
IORLW

0 255.

:
W .
W ( 5.20).
153

I PIC

, W
W = 0, 1,
.

IORWF K, d
OR
IORLW

5.20
W
W IORLW .

, 0 255.
(). ,
.

H ,
W .
, ,
, .

ADWF , d
0 127
.
d 0 127.
Z

:
W .
W, d = 0 ( 5.21,) ,
d = 1 ( 5.21).

0
1

1
W = 11 H IORLW 96 H :
0001 0001
OR 1001 0110
1001 0111

...
...
...
...
...
...

(0)
(0)
(0)

OR

2
W = 0 IORLW 0 :

154

(11 )
(96 )
(97 H)

, W , , W = 97 H,
= 0, .

0000 0000
OR 0000 0000
0000 0000,

K+1

...
...
...
FE H
FF H

IORWF K, 0

5.21 H W

W IORWF K, 0.

155


0
1

I PIC

0000 0000
OR 0000 0000
0000 0000

(0)
(0)
(0)

2
3
...
...
...
...
...
...

OR
8

K+1

IORWF K, 1

...
...
...
FE H
FF H

5.21 H W

IORWF K, 1.

, 0 127
, . ,
, ().

, TMR0 , ,
TMR0 = 0, 1, 0.
W .

XORLW
, PIC,
(OR). , , ANDLW IORLW
.

ORLW

0 255.

Z
: (R)
W .
W ( 5.22).

1110 0100
OR 0000 0101
1110 0101

(4 )
(5)
(E5 H)

, W, W = E5 H,
0.
2
W = 0 TMR0 = 0.
IORWF TMR0, 1 :
156

X OR

1
W = E4 H TMR0 = 5.
IORWF TMR0, 0, :

8
XORLW
W

5.22
W W
ORLW .

0 255. ,
, ().
.
157

1
W = 19 H XORLW 97 H :
0001 1001
OR 1001 0111
1000 1110

(1 )
(97 )
(8D H)

I PIC

5.23 H
W

W
ORWF K, 0.

0
1
2
3
...
...
...
...
...
...

, W , , W = 8D H,
0, .

2
W = C H XORLW C H :
(C H)
(C H)
(0)

, W , ,
W = 0, 1, ,
.

XORWF K, d
H
, W .
, ,
, .

XO R

1100 1011
OR 1100 1011
0000 0000

:
W .
W, d = 0 ( 5.23),
, d = 1 ( 5.23).

K+1
...
...
...

FE H
FF H

XORWF K, 0

5.23 H
W


ORWF K, 1.


0
1
2
3
...
...
...
...
...
...

XOR

XORWF , d
0 127
.
d 0 127.
Z

K+1

XORWF K, 1

...
...
...
FE H
FF H

158

159

. ,
,
().
, , .
1
W = ED H R0 = A5 H.
ORWF R0, 0, :
1110 1101
OR 1010 0101
0100 1000

(D H)
(A5 H)
(48 H)

I PIC

: 1 ,
W, d = 0 ( 5.24),
, d = 1( 5.24).

5.24
1


W,
COMF K, 0.

, W, W = 48 H,
0, 0. O R0
.

(62 H)
(62 H)
(0)

1
2
3
...
...
...
...
...
...

K+1
...
...
...

NOT

2
W = 62 H R0 = 62 H.
ORWF R0, 1 :
0110 0010
OR 0110 0010
0000 0000

FE H
FF H

COMF K, 0

, R0 , ,
R0 = 0, 1, 0.
W .

COMF K, d

5.24
1



,
COMF K, 1.

, ,
.

160

COMF K, d
0 127
.
d 0 127.
Z

0
1
2
3
...
...
...
...
...
...

NOT

K+1

XORWF K, 1

...
...
...
FE H
FF H

161

I PIC
K

, , ,
.
1
W = 6D H TMR0 = 71 H.
COMF R0, 0.
, 8E H W, W = 8E H,
d = 0.
= 0, 0, .
2
W = 5 H TMR0 = FF H.
COMF R0, 1.
, 0 TMR0, TMR0 = 0,
d = 1.
= 1, 0, .

C
W

RLF K, 0

5.25 , C,
W, RLF K, 0.

K
C

RLF K, d
, PIC
. , ,
,
, , , .

RLF , d
0 127
.
d 0 127.
C

: C
bit.
W, d = 0 ( 5.25), ,
d = 1 ( 5.25)

RLF K, 1

5.25 , C,
K, RLF K, 1.

5.25 5.25.
, .
, C, .

.

W = 54 H, TMR0 = AB H C = 0.
RLF R0, 0. W,
d = 0, W = 56 H, C = 1. O TMR0
.

RRF K, d
PIC,
. , ,
.
162

163

RRF , d
0 127
.
d 0 127.
C

: C
bit.
W, d = 0 ( 5.26),
, d = 1 ( 5.26).
K

I PIC

.
RRF R0, 1.
TMR0, d = 1,
TMR0 = 55 H, C = 1. O W ,
, .

SWAPF K, d
, PIC
4 bits, , 4
. :

C
W

RRF K, 0

5.26 , C,
W, RRF K, 0.

SWAPF , d
0 127
.
d 0 127.

: bits 0 3, , bits
4 7, . W,
d = 0 ( 5.27), , d = 1 ( 5.27).
K

SWAPF K, 0

C
RRF K, 1

5.26 , C,
K, RRF K, 1.

.
, 5.26 5.26.
, , , .
, C,
.
, ,
.

W = 54 H, TMR0 = AB H C = 0,
164

5.27
W, SWAPF K, 0.

SWAPF K, 1

5.27
, SWAPF K, 1.

165

.
. .

W = 43 H TMR0 = 61 H.
SWAP R0, 1.
TMR0, d = 1,
TMR0 = 16 H, . O W
, , .

NOP

.

NOP

A
: .
,
.

1. 'ADDWF TMR0, 1', TMR0=77 H W=77


H;
2.
;
3.
'COMF TMR0, 0';
4. C 'RLF TMR0, 0',
TMR0=8A H. ;

5.5.5 bit
, byte,
bit,
bits . PIC (4)
bit , .
166

I PIC

BSF K, b
1 bit .
.

BSF , b
0 127
.
b 0 7.

A
: bit ,
b, 1.

. b
bit, 1, . ,
.

TMR0 = 31 H (0011 0001B).


BSF R0, 6.
, :
TMR0 = 71 H (0111 0001B)
, bit 6 1
( 5.28).

TMR0 = 31 H

TMR0 = 71 H

BSF TMR0, 6
0

5.28 1 6 TMR0, BSF TMR0, 6.

BCF K, b

bit .

BCF , b
0 127
.
b 0 7.
167

: bit b 0.

, ,
b bit 0. ,
.

TMR0 = FD H (1111 1101B).


BSF R0, 7.
, :
TMR0 = 7D H (0111 1101B)
, bit 7 0
( 5.29).

TMR0 = FD H

TMR0 = 7D H

BCF TMR0, 7
0

5.29 0 7 TMR0, BCF TMR0, 7.

I PIC

b bit .
bit 1, , .
2 , 5.4.
bit 0, , .
bit .

:
1.
2.
3.
4.

MOVLW 84 H
MOVWF R0, 1
BTFSS R0, 2
BSF R0, 1
5. BSF R0, 3
, , TMR0
84 H (1000 0100 B). BTFSS R0, 2,
bit 2 ( 0 7) 1. ,
.
TMR0 = 8C H.
, , TMR0 80 H,
. , , TMR0
= 8 H.
, , 5
.

BTFSC K, b
BTFSS K, b
bit,
b, bit 1
.

BTFSS , b
0 127
.
b 0 7.

: bit,
b 1,
0, .
168

.
bit 0 1.

BTFSC , b
0 127
.
b 0 7.

: bit,
b 0,
1, .

, , ,
.
169

1. TMR0=35 H.
'BSF TMR0, 1';
2.
'BCF TMR0, 4';
3. TMR0=35 H,
:
BTFSC TMR0, 3
BSF TMR0, 1
BSF TMR0, 7

I PIC

014 H: NOP
015 H: BSF R0, 5
016 H: ADDLW 1C H
017 H: RLF R0, 0
018 H: NOP
GOTO PC 17 H. ,
, PIC 17 H,
RLF TMR0, 0 ( 5.30).

0000

...
...
...

5.5.6 ( )

0010

MOVLW 35 H

, ,
.
. , ,
. PIC .
, , ,
.

0011 H

MOVWF TMR0, 1

0012

GOTO 17 H

0013

BCF TMR0, 3

0014

NOP

0015

BSF TMR0, 5

0016 H

ADDLW 1C H

0017 H

RLF TMR0, 0

0018 H

NOP

GOTO

GOTO
.
GOTO

0 2047.

: PC .

, 2 ,
5.5.
.

, 10 H: 010 H: MOVLW
35 H
011 H: MOVWF R0, 1
012 H: GOTO 17 H
013 H: BCF R0, 3
170

PC = 17 H

...
...
...

FFFF H
5.30 12 H ,
17 H, GOTO 17 H,
PC 17 .

6 .

5.6
Assembly
PIC. ,

171

, C BASIC. ,
Assembly
.
Assembly.
.
Assembly . , ,
.

. , ,
.
,
. ,
Assembly :
-



WHILE - DO

PIC.
. ,
, . ,
,
.
, , ,
Assembly. ,
. :

..

ROUT1

MOVLW

45 H

;W = 45 H

,
';'.

172

I PIC

5.6.1 -
,
, . ,
, READ () WRITE
(),
.
Assembly, ,
,
. ,
, . ,
, , .
, PIC
. , ,
. , 30 H,
30 H. ,
:



. ,
,
. PIC
W.
W .
, 5F H
( ) 30 , :
:
MOVLW 5F H ; W 5F H
MOVWF 30 H ; 30 H W
30 H 5F H (
5.31).

173


0
1

I PIC

30 H
TMR0 ( 5.32).

0

3
5F H

...
...
...
...
...
...

MOVLW 5F H

MOVWF 30 H
W

2
MOVF TMR0, 0

3
...
...
...
...
...
...

30 H

MOVWF 30 H

31 H
...
...
...

30 H
31 H
...
...
...

FE H
FF H

FE H

5.31 5F H 30 ,
MOVLW 5F H MOVWF 30 H.


, ,
. , ,
.
, , , PIC

W. ,
,
W .
,
TMR0 ( ) 30 ,
:

:
MOVF TMR0, 0 ; W TMR0
MOVWF 30 H ; 30 H W
174

TMR0

FF H

5.32 TMR0 30 ,
MOVF TMR0, 0 MOVWF 30 H.

: .

.

5.6.2
, Assembly,
.
.
,
. RETURN,
.
, , ,
PORTA, 5,
TMR0, , ..
READ_PORTA, :
175

READ_PORTA MOVF 5, 0
MOVWF TMR0
RETURN

;
; PORTA W.
; W
; TMR0.
; .

CALL, :
1
2

k
CALL READ_PORTA
k+2

CALL READ_PORTA

CALL
, :

CALL
PIC
.

CALL

:
. PC
.
GOTO, .
, PC + 1,
. , PC
176

I PIC

, , CALL, .
, ,
.
2 . ,
:

, 10 H
READ_PORTA, ,
95 :
010 H: MOVLW 12 H
; W 12 .
011 H: MOVWF TMR0, 0 ; TMR0 0.
012 H: CALL 95 H
; READ_PORTA ( CALL READ_PORTA).
013 H: XORWF TMR0, 0 ; XOR W TMR0.
.
.
.
, PIC ,
95 H ( 5.33).


0000

...
...
...

0010

MOVLW 12 H

0011 H

MOVWF TMR0, 0

0012

CALL 95 H

0013

XORWF TMR0, 0
...
...
...

0095 H

MOVF 5, 0

0096 H

MOVF TMR0

0097 H

RETURN

FFFF H

PC = 95 H

...
...
...

5.33 , 95 , CALL 95 H,
PC 95 .

177

I PIC

, , 95 H
, READ_PORTA.
, , PIC CALL,
, XORWF TMR0, 0.
PC . , 13 H.

0000

RETURN
,
CALL .
, ,
, ,
. , .

RETURN

: ,
,
CALL
.
.
2 . ,
.

CALL.
10 H, READ_PORTA
95 H.
CALL, ,
95 H, PC 12 95 H, 13 ,
, , . PC
95 , PC + 1, 13 , .
, -. ,
RETURN PC + 1, 13 H,
PC ( 5.34). ,
PIC CALL, ,
XORWF TMR0, 0.

...
...
...

0010

MOVLW 12 H

0011 H

MOVWF TMR0, 0

0012

CALL 95 H

0013

XORWF TMR0, 0
...
...
...

PC = 13 H
0095 H

MOVF 5, 0

0096 H

MOVF TMR0

0097 H

RETURN

FFFF H

...
...
...

5.34 , , RETURN,
PC 13 .

RETFIE
, , ,
,
.

RETFIE

: ,

.
.

.

5.6.3
178

,
179

, .
Assembly
. . ,
, ,
(), 1. , ,
.
, , ,
, W 0.
:

IORLW 0
BTFSS STATUS, 2
CALL READ_PORTA

IORLW 0
BTFSS STATUS, 2
CALL READ_PORTA

; W = W OR 0
; Z = 1 .
; READ_PORTA.

; W = W OR 0
; Z = 1 .
; READ_PORTA.

,
W 0. H (R)
W 0.
W . ,
W 0. 0, ,
, 1. ,
0. ,
W,
W 0.
Assembly.
, BTFSS.
, bit 2 STATUS, Z = 1
, CALL, .
.
, GOTO CALL. ,
BTFSS,
.

180

I PIC

5.6.4
,

.
.
, ,
200sec .
PIC.
4MHz, , 5.4,
1 4/4MHz, 1sec. , 200sec
200 .
, , , DELAY.
TMR0 .
W.
:
DELAY MOVF TMR0,W
LOOP1 NOP
NOP
DECFSZ TMR0, 1
GOTO LOOP1
NOP
RETURN

; TMR0 = W (1 )
; (1 )
; (1 )
; R0 1
; 0 RETURN (1 2 )
; (2 )
; (1 )
; (2 )

MOVLW
CALL DELAY

;
; (2 )


.
:
:
181

: ( - 1) x (1 + 1 + 1 + 2) + (1 + 1 + 2)
:
NOP
NOP DECFSZ GOTO NOP
NOP DECFSZ

, 4 1 ,
MOVFW 1, 1 , NOP, 2
, RETURN. , 2
, CALL. , 6 .
5 x ( - 1) + 10 = 200,
39.

5.6.5 WHILE - DO
, , ,
.
WHILE - DO, REPEAT - UNTIL, FOR - DO, .
:
= 0;
WHILE (, .. ? 10)
1;
2;

1;
DO
; ? 10. >10
; , DO, .

= 35;
REPEAT
1;
2;

1;
UNTIL (, .. = 10)
; =10.
,
; , UNTIL, .

I PIC

. ,
. ,
.
, ,
.

, , 7
5 55 H.

:
1. .
2. 55 H.
(7 ),
.


. ,
, :
; 21 H, 7 .
MOVLW 7
;W = 7
MOVWF 21 H ; 21 H = 7.
; 0 W.
MOVLW 0
;
START ADDLW 5H
; W 5.
DECFSZ 21 H, 1 ; 21 H 1
; 0 ,
GOTO START ;
END
;

.
,
, . Assembly
182

: , , ;

183

5.7 PIC
, PIC
. .
, ,

(USART).
PIC.
PIC
, ,
.
(bits).
, ,
(flag), 1 . bits
, , IE
(interrupt enable), , IF (interrupt flag), . ,
TIMER0, ,
bits 0IE 0IF.
bits, ,
. :
INTCON
PIE1
PIR1
PIE2
PIR2
bits INTCON
, bits
, , , .

5.7.1 INTCON
5.35. bit /
bit ,
TIMER0 .
4 7. ,
bits , 0
. , bits
, ,
, .
.
184

I PIC

7
GIE

6
PEIE

5
T0IE

4
INTE

3
RBIE

2
T0IF

1
INTF

0
RBIF

5.35: INTCON

bits :
GIE: Bit .
1 = .
0 = .
PEIE: Bit
.
1 = .
0 = .
T0IE: Bit TIMER0. 1 =
TIMER0.
0 = TIMER0.
INTE: Bit RB0/INT.
1 = RB0/INT.
0 = RB0/INT.
RBIE: Bit B.
1 = B.
0 = B.
T0IF: TIMER0. 1 = TMR0
.
0 = TMR0 .
INTF: RB0/INT.
1 = RB0/INT.
0 = RB0/INT.
RBIF: B.
1 = 4 7 B
.
0 = 4 7 B .

5.7.2 PIE1 PIR1


PIE1 bits /
PIR1 bits
:
1. (PSP).
2. A/D .
3. / (USART).

185

4. (SSP).
5. CCP1
6. TIMER2

5.7.3 PIE2 PIF2


PIE1 PIF1.
PIC, .
, , , ,
, .
:
1. PC 4,
2. ,
.
,
4. , , ,
, , ,
. ,
. ,
4 GOTO
. ,
, 83 H 9 H () ROYTINA1,
, 4 GOTO 83 H ( GOTO ROUTINA1).
( Hardware),
, .
:
0004 H: GOTO 83 H
0005 H:

001A H:
001 H:

186

I PIC

0083 H:

009A H: RETFI


(polling). , .
, ,
.
.
, USART,
,
.
, ,
, , :
1. bit TXIE PIE1 0.
2.
.
3. , , ,
bit TXIF PIR1 1.
,
,
.

:
BCF PIR1, TXIF ; USART ()
START
;

BTFSC PIR1, TXIF


; TXIF = 0,
CALL ROUT_USART
;

GOTO START
;

187

USART,
ROUT_USART

RETIF (,
GOTO START)

1. Douglas Hall, "Micropocessors and Interfacing - Programming and Hardware",


Mc Graw Hill
2. Microchip Technology Inc., "PICmicro Mid - Range MCU Family", Reference
Manual, 1997
3. Microchip Technology Inc., "PIC 16F87X 28/40-pin 8-Bit CMOS FLASH
Microcontrollers", Reference Manual, 1999

6.1 /
6.2
6.3 /
/ (PWM)
6.4
6.5

6.6

:

PIC.

Assembly.
.
.



.
.
PIC
Assembly. ,
PIC .
,
PIC .
:
/

(PWM)


PIC, . ,
,
, ,
.
,
. ,
8 bits. , ,
, .

. , ,
,
.
.

,
.
.
,
. ,
, , .

6.1 /
/ , , PIC,
.
.
, (pin)
. ,
. ,
,
/ .
PIC 5 / , , , C, D E.
TRIS
PORT. 5 TRIS, TRIS, TRIS,
TRISC, TRISD, TRISE, . ,
5 PORT, PORT, PORTB, PORTC, PORTD PORTE.
TRIS 1 ,
PORT, 0. 8
/ . 6 (RA0 - RA5)
3 (R0 - R2).
,
TRIS, 1
. bit
. bit "1", ,
, "0", , . ,
0 TRISA 1, RA0
.
. ,

.

PORT, .. C PORTC ,
. ,
.

RA0, RA4 RA5 ,


, RA1, RA2 RA3, , 6.1.

RA0
RA1
RA2

, RA0 - RA5,
. , , . ,
192

RA4
RA5

6.1 RA0, RA4 RA5


RA1, RA2, RA3 .

, ,
, "1" bits TRISA ,
"0"
. , TRISA
11001110 (CE H). , bits 6 7, "1",
, 6 7 .
, , , ,
. ,
,
. 6
ADCON1, 6.5,
.
7
0

6.1.1

RA3

PIC
( )

6
0

5
0

4
0

3
0

2
1

1
1

0
0

6.2: ADCON1 6,

.

193

RA0
RA1
RA2
PIC
( )

RA3

6.2 RA0, RA4 RA5


RA1, RA2, RA3 .

, .
BCF STATUS, RP0 ; 0
BCF STATUS, RP1 ; (RP0 = 0 RP1 = 0).
;

BSF STATUS, RP0

; 1
; (RP0 = 1).

bits RP0 RP1 STATUS,


0 . , bit RP0
STATUS 1, 1 ,
ADCON1 TRISA. ,
,
ADCON1 6 , ,
, TRISA CE H.

RA4
RA5

CLRF PORTA

6.1.2
8 ,
bit TRISB 1 0. ,
R0 - R3 ,
6.3, 00001111 (0F H)
TRIS. :
BCF STATUS, RP0
BCF STATUS, RP1

; 0
; (RP0 = 0 RP1 = 0).

CLRF POTR

BSF STATUS, RP0

; 1
; (RP0 = 1).
; 00001111 (0F H) TRISB
; RB0 - RB3

MOVLW 0F H
MOVWF TRISB

MOVLW 6
;
MOVWF ADCON1 ;

RB0

MOVLW CE H
MOVWF TRISA

RB2

; 11001110 (CE H) TRISA


; RA0, RA4 RA5
; RA1 - RA3

, , .
, , .

.
PORTA 0 . ,
, , ,
.
, ,
194

RB1

PIC
( B)

RB3
RB4
RB5
RB6
RB7

6.3 R0 - R3
R4 - R7 .

195

, R4 - R7 .
. , ,
.
, , .
,

PORTB. , ,
bit RBIE bit RBIF. bits
INTCON, 6.4.
7

4
RBIE

RC0
RC1
RC2
PIC
( C)

RC3
RC4
RC5
RC6

0
RBIF

RC7

6.4 RBIF RBIE INTCON.


,
. ,

PORTB.
,
. , RBIF 0.
PORTB,
1, 0.
RB0,
PIC.
,
.
, bit INTEDG OPTION_REG 1
RB0, 0
. , bit 7
OPTION_REG, 1. bits INTEDG
7, OPTION_REG, 6.5.
7
1

6
INTEDG

6.5 INTEDG OPTION_REG.

6.5 C RC0 - RC2


Rc3 - RC7 .

, RB0
, .
PIC
SLEEP, .
/ . , / ,
.
.

6.1.3 C
C 8 - . ,
, .
, RC0 - RC2
, 6.6, 00000111 (03 H)
TRISC.
:
BCF STATUS, RP0
BCF STATUS, RP1

; 0
; (RP0 = 0 RP1 = 0).

CLRF POTRC

BSF STATUS, RP0

; 1
;.
; 00000111 (03 H) TRISC

MOVLW 03 H
196

197

MOVWF TRISC

; RC0 - RC2
; RC3 - RC7
RC0
RC1
RC2
PIC
( C)

RC3
RC4
RC5
RC6
RC7

6.6 C RC0 - RC2


RC3 - RC7 .

, , , 30 . ,
PORT ,
, , .
,
PORT , ,
PORT.
bits PORT,
.
, , . C RC0
RC1 RC2 - RC5 . ,
PORTC 00101110 (2 )
RC0 =1 RC1 = 0. , "BCF
PORTC, 3", 00101101 (2D H) , , bit 3.
, 00100101 (25 H), PORTC. , ,
00100110 (26 ), ,
, PORTC , , 30 .
6.7 .
PINS
READ PORTC

,
,
PIC.
. , , bits
TRISC
.

BITS 0 - 1

RC0
RC1
RC2

BITS 2 - 7

RC3
RC4
RC5
RC6

6.1.4 D E
H D 8 / E 3.
, B C ,
, .
, PIC,
PORT.
PORT
, , , ,
PORT
.
, bit,
, , ,
. "BCF 30 , 3",
30 , bit 3 ,
198

RC7
7

PORTC

6.7 PORTC C,
RC0 RC1 , RC2 RC7,
.

1.
;
2. C,
RC3 RC6
;
199

6.2
, ,
.
. .
, ,
. ,
.
PIC.
.
, PIC,
. 6.8.

5
TOCS

4
TOCE

3
0

2
PS2

1
PS1

0
PS0

6.9 OPTION_REG
Fosc / 4
PRESCALER

T0CKL
TOCS
TOCE

TMR0

T0IF

PS0 - PS2
OPTION_REG

6.10 TIMER0.


. , , bits TMR0
. , , bit
OPTION_REG .

PIC

Bits 7-6: .
TOCS:
1 = OCLK ( )
0 = ( ).

6.8 PIC .

PIC 3 , TIMER0, TIMER1


TIMER2. , , , TIMER0 TIMER2.
TIMER1 .

6.2.1 TIMER0
8 bits 8
bits. TIMER0 TMR0,
2 . TIMER0
bits 0 - 5 OPTION_REG,
1 . OPTION_REG
6.9, 6.10.
200

TOSE:
1 = OCLK
0 = OCLK
Bit 3: "0".
PS2-PS0:
Bits
000
001
010
011
100
101
110
111

MR0
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256

201

bit
TOCS = 0. . , ,
, ,
TMR0. , .
, ,
TMR0, .
, bit TOCS = 1.
, T0CLK.

. bit TOSE, .
bits 0 2.
TIMER0, TMR0
. , ,
. , bits PS2 - PS0
000 2 2
. , ,
. , ,
, , , 4.
TMR0 ,
FF 0, .
bit T0IF INTCON. 0
,
. , , bit T0IE,
INTCON, 0. , ,
6.11.
7
6
5
4
3
2
1
0
TOIE
TOIF
6.11 0IE T0IF INTCON.

,
.

( ).

TIMER0
(TOCS = 0), (TOSE = 0),
1:16 (PS2 - PS0 = 011). , OPTION_REG
( 6.9) 11000011 (C3 H). bits 6 7
"1". ,
:
202

CLRF TMR0
CLRF INTCON

; TMR0
: TOIF

BCF STATUS, RP0


BSF STATUS, RP1

; 1

MOVLW 83 H
; 83
MOVWF OPTION_REG ; , ,
; 1:16
BCF STATUS, RP0

; 0

BSF INTCON, TOIE


BSF INTCON, GIE

; TMR0
;

( ).

TIMER0
T0CLK (TOCS = 1), (TOSE = 1),
1:256 (PS2 - PS0 = 111). ,
OPTION_REG 00110111 (37 H). bits 6 7
"0". ,
:
CLRF TMR0
CLRF INTCON

; TMR0
: TOIF

BCF STATUS, RP0


BSF STATUS, RP1

; 1

MOVLW 37 H
;
MOVWF OPTION_REG ; T0CLK, 1:256
BCF STATUS, RP0

; 0

BSF INTCON, TOIE


BSF INTCON, GIE

; TMR0
;

, ,
. ,
, ,
OPTION_REG. , .
203

6.2.2 TIMER 2
TIMER0 / ,
TIMER2, 8 bits. O TIMER2, , ,
TIMER0. , prescaler,
, TIMER0. O , postscaler,
.
(PWM).
TMR2,
T2CON, 6.12.
0 .
7
-

6
5
4
3
2
1
0
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
6.12 T2CON

T2CON
. bits
R2 . TIMER2,
, 6.13.
bit
TIMER2.
RESET

TMR2 = PR2

TMR2IF

POSTSCALER
1:1 1:16

T2OUTPS3 - 0

PRESCALER
1:1 1:4 1:16

TMR2

F osc / 4

TMR2ON

T2CKPS1 - 0
PR2

T2CON

6.13 TIMER2.

1111 = 1:16
TMR2O: Bit TIMER2.
1 = TIMER2
0 = TIMER2
T2CKPS1 - T2CKPS0:
(prescale). 00 = 1
01 = 4
10 = 16
11 = 16
PIC,
Fosc/4. , 1, 4 16,
.
, bits T2CKPS1 - T2CKPS0
T2CON.
,
, PR2, 1 .
. TMR2
PR2 , , , , 0.
, PR2,
TMR2 .
,
, . TIMER2
TMR2IF PIR1 ( 6.14).
bit TMR2IE PIE1 (
6.15). , , , ,
, .
7

1
TMR2IF

6.14 TMR2IF PIR1.

Bit7: . "0".
TOUTPS3 - TOUTPS0:
(postscale).
0000 = 1:1
0001 = 1:2
0010 = 1:3

204

1
TMR2IE

6.15 bit TMR2I PIE1.

TIMER2
:
205

TIMER2

TIMER2 1:16
(T2CKPS1 - T2CKPS0 =11) 1:15
(TOUTPS3 - TOUTPS0 = 1110).
TIMER2 (TMR2ON = 0). ,
T2CON ( 6.12) 01110011
(72 ). bit TMR2ON "1".
, TMR2IF,
TMR2 PR2. 0
, .
, ,
TIMER2, TMR2
PR2 ().
, 5.7, 5. ,
,
, , bit TMR2IF PIR1 1.
,
, 5.6, 5,
, .
:
; TIMER2, 1:1
CLRF T2CON
;
; TMR2
CLRF TMR2
;
;
CLRF INTCON
;
; 1
BSF STATUS, RP0
;
;
CLRF PIE1
;
; 0
BCF STATUS, RP0
;
;
CLRF PIR1
206

;
; Prescaler = 1:16, T2CKPS1 - T2CKPS0 =11
; Postscaler = 1:15, TOUTPS3 - TOUTPS0 = 1110
; TIMER2, TMR2ON = 0
MOVLW 72 H
MOVWF T2CON
;
; TIMER2
BSF T2CON, TMR2ON
;
;
; Timer2 .
; TMR2IF
; .
;
T2_OVFL_WAIT
; (bit TMR2IF).
; (TMR2IF = 0) .
; (TMR2IF = 1) .
BTFSS PIR1, TMR2IF
GOTO T2_OVFL_WAIT ; .
;
; . TMR2IF. BCF PIR1, TMR2IF

1. ;
2. TIMER0;
3. ;
4. ;

6.3 / /
(PWM)
PIC,
, :
207



(PWM)

11xx = PWM . bits CCP1M0 CCP1M1


.

CCP. PIC
, , CCP1
CCP2. .
CCP1 , 0
. , CCP1CON, 8 bits,
. , CCPR1, 16 bits
.
16 bits, 16 bits PWM 10 bits,
. 16 bits,
, CCPR1H CCPR1L,
byte , .
, CCP1,
PIC, .
TIMER1, , PWM, TIMER2. ,
CCP2 ,
.
, , bits
. 6.16.
. bits
.
7
-

6
-

5
DCIB1

4
DCIB0

3
CCPIM3

2
CCPIM2

1
CCPIM1

0
CCPIM0

6.16 CCP1CON

bits :
its 7 6: 0.
DC1B1- DC1B0: Bits PWM
bits, 1 0, 10 bits
PWM. 8 CCPR1L.
.
CCP1M3 - CCP1M0: Bits
0000 = .
(reset) . 0100 - 0111 = .
1000 - 1011 = .
208

6.3.1
, CCP CCP1,
TMR1, , , TIMER1,
CCPR1. :
.
.
4 .
16 .
.

6.3.2
, CCP1
CCPR1 TMR1.
CCP1 0 1 1 0,
bits CCP1M3 - CCP1M0 CCP1CON.

6.3.3 (PWM)
PIC

.
.

.
, duty cycle. duty cycle

. , duty cycle %. duty cycle 25%,
25%
. RC2, C.
bits CCP1M3 - CCP1M0 CCP1CON,
209

. CCP1,
TRIS. ,
TIMER2, TIMER1
. 6.17 PWM
.

DCPWM = DC1B TOSC (prescale TIMER2)

(6.3)

6.18 PWM, RC2,


TPWM DCPWM, TMR2 PR2.
,
PWM.

PR2

PWM

PRESCALER
(TIMER2)

PWM

TPWM

Tosc

DCPWM

CCPR1L

PWM
(PIN RC2)

DC PWM
TMR2 = DCPWM

TMR2 = PR2

DCPWM

TMR2 = PR2
DC1B1

6.18 PWM TPWM


DCPWM, TMR2 PR2.

DC1B0

CCP1CON

CCP1M2
CCP1M3

6.17 PWM .

PWM, TPWM,
PR2. , PR2
TMR2
TIMER2. , , , :
TPWM = [(PR2) + 1] 4 TOSC (prescale TIMER2)

(6.1)

, PWM ,
:
FPWM = 1 / TPWM

(6.2)

PWM duty cycle, DCPWM,


2 bits, DC1B1- DC1B0, CCP1CON,
, 8 bits CCPR1L.
10 bits, DC1B. To duty cycle , :
210

1 - PR2
PWM, FPWM, 78,125 kHz o PIC
FOSC = 20 MHz.
prescale TIMER2 1,
2CON T2CKPS1 - T2CKPS0 = 00, , 6.1,
PR2, :
TPWM = 1/78,125 kHz = [(PR2) +1] 4 (1 / 20 MHz) 1
= [(PR2) +1] 4 0,05 s 1
12,8 s
= 63
PR2
,
PWM CCP1 . ,
,
:
1. PWM PR2.
2. duty cycle PWM DC1B (bits DC1B9 - DC1B0).
3. CCP1 bit PWM1
TRISC.
211

4. prescale T2CON
TIMER2.
5. PWM CCP1
CCP1CON.

, :
2 - PWM 20% duty cycle
PIC, 20 MHz,
duty cycle 20% FPWM = 156,3 kHz,
PWM = 6,4s.
, 1,28 s.
TIMER2, prescale 1, bits
T2CKPS1 T2CKPS2 , T2CON,
0.
, 6.1,
PR2 31, 1F H. , 6.3,
, , DC1B 26, 1 H.
DC1B 10 bits , , :
7
0

6
0

5
0

CCPR1L
4
3
0
0

2
1

1
1

0
0

CCP1CON
DC1B0
DC1B1
0
1

bits DC1B1 DC1B0, ,


CCP1CON, PWM bits CCP1M3 0 = 1100. , 00101100 (2C H)
CCP1,
PWM, :
CLRF CCP1CON
CLRF TMR2

; CCP
; TIMER2

MOVLW 1F H
MOVWF PR2

;
; PR2 = 31 (1F H)

;Duty Cycle 20% PWM


MOVLW 6
MOVWF CCPR1L
; - T0IF
CLRF INTCON
; 1
BSF STATUS, RP0
212

; PWM1 (RC2 C)
BCF TRISC, PWM1
; .
CLRF PIE1
; 0
BCF STATUS, RP0
;
CLRF PIR1
; PWM, DC1B1 = 1 DC1B0 = 0.
MOVLW 2C H
MOVWF CCP1CON
BSF T2CON, TMR2ON

; TIMER2

; CCP1.
; (bit TMR2IF).
; (TMR2IF = 0) .
; (TMR2IF = 1) .
PWM_Period_Match
BTFSS PIR1, TMR2IF
GOTO PWM_Period_Match ; .
; TMR2IF
BCF PIR1, TMR2IF

1. PWM; ;
2. , ,
;
3. bits
PWM.

6.4

. USART
213

RCIF

. ,

(full duplex).
.
, /. ,
(half duplex).

. , ,
, . ,
,
, , .
, , USART, 3 :
(full duplex)
- Master (half duplex)
- Slave (half duplex)
,
. RC6 RC7 C
PIC, TX/CK RX/DT .
bit SPEN bits 6 7 TRISC,
1. , , ,
TX/CK RX/DT .
, ,
, TXSTA RCSTA.
USART
. USART, ,
6.19, ,
6.20. , , , .
TXIF

TXREG

SPBRG

(8)

TSR

TX/CK
(PIN RC6)

RCREG

SPBRG

RSR

START 0

(8)

STOP

RX/DT
(PIN RC7)

OERR
FERR
CREN

RX9
RX9D

SPEN

RCSTA

6.20 USART .

TXSTA 6.21 ,
,
. ,
.
7
0

6
TX9

5
TXEN

4
0

3
0

2
BRGH

1
TRMT

0
TX9D

6.21 TXSTA .

bits :
Bit 7: . "0".
TX9: bits
1 = 9 bits
0 = 8 bits
TXEN: Bit
1 =
0 =
Bit 4: , "0".

BRGH
TXEN

TX9

Bit 3: . '0'.

TX9D

TXSTA

TRMT

214

6.19 USART .

BRGH: Bit Baud Rate



1 =
0 =

215

TRMT: Bit TSR


1 = TSR
0 = TSR

RX9D: 9 bit. bit .

TX9D: 9 bit. bit .


bits , , , 3,
, 1, . ,
, "0" bits 4 7,
.
, RCSTA 6.22
, ,
. ,
.
7
SPEN

6
RX9

5
0

4
CREN

3
0

2
FERR

1
OERR

0
RX9D

6.22 RCSTA .

, , bits :
SPEN: Bit .
1 = ( RX/DT TX/CK
)
0 =

RX9: bits
1 = 9 bits
0 = 8 bits
Bit 5: . "0".
CREN: Bit

1 =
0 =
Bit 3: . '0'.
FERR: Bit
1 = (
RCREG byte)
0 =
OERR: Bit
1 = ( , bit CREN.)
0 =
216

bits
, bits 4 7. bits 0 2 , 3 bit
.
, ,
. , ,
, ,
. , ,
.
. , , ,
, . ,
, , ,
, . ,
, ,
. , ,
.

, 2 3 bits.
. bits
1 2 .
6.23 .
1

6.23 bits .


.
,
.
Baud rate , ,
bits. :
(BRGH = 0):
Baud Rate = FOSC / (64 (X+1))

(6.4)

(BRGH = 1):
Baud Rate = FOSC / (16 (X+1))

(6.5)

, , Baud Rate ,
SPBRG.
217

bit SYNC
TXSTA, 0.
4 :
Baud Rate
.



, , .
TSR TXREG. TSR,
TXREG.
byte , TSR
TX/CK. ,
TSR
. H byte,
, TSR ,
bit . byte, TXREG TSR,
, TXREG . ,
TXIF, PIR1 ( 6.24).
bit ,
PIE1 ( 6.25). , TXIF 1
,
.
TXREG.
7

4
TXIF

4
TXIE

, ,
:
1. SPBRG baud rate.
bit BRGH = 1.
2. bits SYNC = 0 SPEN = 1.
3. , , bits TXIE = 1, GIE = 1 PEIE = 1.
4. 9 bits , , bit TX9 = 1.
5. bit TXEN = 1, bit TXIF 1.

6. 9 bits 9 bit bit TX9D.


7. TXREG
.

,
.
RX/DT.
bit CREN, . ,
, , RSR RCREG.
RSR bits, , RX/DT.
bit, bit '',
RCREG. RCIF
1, PIR1 ( 6.26).
bit RCIE, PI1 ( 6.27).
RCREG, .
7

5
RCIF

6.26 RCIF PIR1

6.24 TXIF PIR1.

6.25 TXI PIE1.

bit TXIF, TXREG,


bit TRMT, TXSTA, TSR.
bit 1, . , ,
TXREG, , .
TSR , bit .
bit TXEN,
TXSTA, 1 TXREG
.
218

5
RCIE

6.27 RCIE PIE1

, .
, bit OERR,
RCSTA. , ,
bit . ,
RCREG. , ,
, . RCREG
, . ,
RSR RCREG
219

bit OERR,
. bit CREN
1 (reset).
, bit FERR,
RCSTA. 6.23, bit
1. bit
0, ,
. , bit FERR 1. bit ,
RCSTA,
RCREG, bits FERR RX9D,
.
, ,
:
1. SPBRG baud rate.
bit BRGH = 1.
2. bits SYNC = 0 SPEN = 1.
3. , , bits RCIE = 1, GIE = 1 PEIE = 1.
4. 9 , , bit RX9 = 1.
5. bit CREN = 1.
6. RCIF 1, ,
bit RCIE = 1.
7. RCSTA 9 bit, ,
.
8. RCREG.
9. . reset
bit CREN.

. Baud rate 9600,
8 bits PIC 20z.
(BRGH = 0), 6.4,
SPBRG 31 (1F ). ,
8 bits (TX9 = 0) (TXEN = 1). ,
0100000 (40 ) TXSTA.
, 8 bits (RX 9 = 0)
(RCEN = 1). ,
TX/CK RX/DT (SPEN = 1). ,
10010000 (90 ) RCSTA. "0"
bits . ,

/ :
220

BSF STATUS,RP0 ; 1 .
; Baud rate 9600 ( 6.4)
MOVLW 1F H
MOVWF SPBRG
; .
;
; 8 .
MOVLW 40 H
MOVWF TXSTA
BSF PIE1,TXIE ;
BSF PIE1,RCIE ;
;
BCF STATUS,RP0 ; 0 .
; 8 .
MOVLW 90 H
MOVWF RCSTA

1. ;
2. ;
3.
;

6.5

(A/D)
8 (0 - 7), (RA0/0,
RA1/1, RA2/2, RA3/3 RA5/4) E (RE0/5, RE1/6 RE2/7).
10 bits.
PIC, VDD, ,
VREF+, VREF- .
A/D 6.27.
221

VDD

7
ADCS1

/
111
ADCS0
ADCS1
ADON
A/D

CHS0

GO/DONE

CHS1
CHS2

VAIN

VREF-

101

AN5

100

AN4

011

AN3

010

AN2

AN0

PCFG0 - PCFG3

ADCON1

6.27 A/D.

4 . :
A/D 0 (ADCON0)
A/D 1 (ADCON1)
A/D 8 bits (ADRES)
A/D 2 bits (ADRESL)
.

.
/ .
(ADRESH ADRESL) A/D ,
6.28.

A/D
BITS ADRESH
5
4
3
2
1

BITS ADRESL
7
6

6.28 10 bits, A/D ,


ADRESH ADRESL.

, , , ,
. , ,
ADCON0, 0 ,
6.29.
222

3
SHS0

2
GO/DONE

1
-

0
ADON

6.29 ADCON0

ADCS1 - ADCS0: Bit A/D.


00 = FOSC/2
01 = FOSC/8
10 = FOSC/32
11 = FRC ( A/D RC )

AN1

000

ADRESL

4
CHS1

AN6

001

ADRESH

5
CHS2

AN7

110
ADCON0

VREF+

6
ADCS0

CHS2 - CHS0: Bits .


000 = 0, (AN0)
001 = 1, (AN1)
010 = 2, (AN2)
011 = 3, (AN3)
100 = 4, (AN4)
101 = 5, (AN5)
110 = 6, (AN6)
111 = 7, (AN7)
GO/DONE: Bit A/D , bit ADON 1.
GO/DONE = 1, A/D .
GO/DONE = 0, A/D .
Bit 1: . "0".
ADON: Bit A/D .
1 = A/D .
0 = A/D .
bits .
, , ADCON1,
1 , 6.30.
7
ADCS1

6
ADCS0

5
CHS2

4
CHS1

3
SHS0

2
GO/DONE

1
-

0
ADON

6.30 ADCON1

Bit 7: "0".
its 6 4: . 0.
223

A/D
BIT
A/D
PIC

PCFG3 - PCFG0: Bits A/D .


A =
= /

:
AN7
A

PCFG3 - 0
0000
0010
0100
0110
1001
1110

AN5
A

AN6
A

AN4
A
A

AN3
A
A
A

AN2
A
A

AN1
A
A
A

AN0
A
A
A

A
A

A/D .
, ADRES ADRESL,
, , 0 1 .
bit GO/DONE ADCON0 A/D ,
ADIF PIR1 ( 6.31), 1.
7

6
ADIF

6.31 ADIF PIR1.

6
ADIE

6.32 ADIE PIE1.


.
, F,
, , :
F = 2 F

(6.6)

.
PIC
bits ADCS1 ADCS0.
:

224

2TOSC
8TOSC
32TOSC
RC

ADCS1 - 0
00
01
10
11

20 MHz
1,6s
2-6s

5 MHz
1,6s
6,4s
2-6s

1.25 MHz
1,6s
6,4s
25,6s
2-6s

333.33 kHz
6s
24s
96s
2-6s


. 10

20Hz 1,6s.
16 s
, 62,5 Kz.
,
, , ,
TRIS. , , , , A/D
.
.
, .
:
A/D
8 (PCFG3 PCFG0 = 0000). , ADCON1 0.
, A/D (ADON = 1),
RC (ADCS1 - ADCS0 = 11),
0 (CHS2 -CHS0 =000). ,
A/D (GO/DONE = 1)
(ADON = 1),
. , ADCON0
11000001 (C1 H). :
; 8
BSF STATUS, RP0 ; 1 .
MOVLW 0
MOVWF ADCON1
225

RC - A/D - 0
BCF STATUS, RP0 ; 0 .
MOVLW C1 H
MOVWF ADCON0
; -
BCF PIR1, ADIF ; bit A/D
BSF PIE1, ADIE ; A/D
BSF INTCON, PEIE ;
BSF INTCON, GIE ;

, , , ,
. ,
, .
,
, Intel, Motorola, ..
,
, .

; A/D .
BSF ADCON0, GO
(ADIF=1),
ADRESH ADRESL, , ,
.

1.
2.
3.
4.

A/D ;\
() ;
bits ;
;

6.6

. PIC Microchip,

RISC. ,
.
, PIC, ,
, , .
226

1. Microchip Technology Inc., "PICmicro Mid - Range MCU Family" Reference Manual,
1997
2. Microchip Technology Inc., "PIC 16F87X 28/40-pin 8-Bit CMOS FLASH
Microcontrollers", Reference Manual, 1999
227

You might also like