Professional Documents
Culture Documents
TNVXLVDK V3 20-02-2014
TNVXLVDK V3 20-02-2014
HCM
TRNG I HC BCH KHOA
KHOA KHOA HC V K THUT MY TNH
TH NGHIM
VI X L - VI IU KHIN
BM K thut My tnh
2012
Bi 1 :
Ni dung:
a.To project trn MPLAB IDE.Vit chng trnh ASM.
Dch v np chng trnh vo vi iu khin PIC. Chy v g ri chng trnh.
b.c b nh chng trnh.ghi c b nh EEPROM v xut ra LED.
1.1 Phn cng th nghim ICD2 v PICDEM 2 PLUS.
B h tr lp trnh dng vi my tnh ICD2 (In-Circuit Debugger).
Cng ni tip
ICD2
USB
Ni vi card
PICDEM
Ni vi
my tnh
S kt ni ICD2
1.
2.
3.
4.
5.
6.
7.
8.
9.
B mn K Thut My Tnh
B mn K Thut My Tnh
B mn K Thut My Tnh
ca s la chn
B mn K Thut My Tnh
Cng vic tip theo l vit code (trong ca s text editor ca source file).
i vi project ln dng nhiu source file v header file, ta lm li qu trnh thm file
vo d n nhiu ln.
1.3 Np file hex vo vi iu khin PIC
Sau khi to c mt project, ta tin hnh build n to ra *.hex. C th m t cng
vic nh sau:
V d, ta c mt chng trnh cho PIC nh sau:
list
#include
code
goto
p=18f4520
p18f4520.inc
0
start
B mn K Thut My Tnh
Nu vic build tht bi, nhng vic ny th khng mong mun, ta c thy kt qu nh
hnh sau:
B mn K Thut My Tnh
Nu vic build thnh cng, chng trnh s dch BaiTN1.asm thnh BaiTN1.hex
trong cng th mc chng trnh BaiTN1.asm. Sau khi c c file hex, cng vic
tip theo l lm th no np c file Hex xung board. u tin, chn mch np bng
cch vo menu Programmer_|Select Programmer_|Mplab ICD2 nh hnh sau :
Sau khi chn Mplab ICD2 xong th ta s thy giao din nh sau:
B mn K Thut My Tnh
B mn K Thut My Tnh
Bc 2. Tham kho menu Debugger. Xut hin nhiu chc nng h tr debug.
10
Mun xem thanh ghi no, ta ch vic chn thanh ghi tng ng trong combobox bn
trn, sau nhn Add SFR.
B mn K Thut My Tnh
11
1.6 Bi tp.
a) c 1 byte b nh chng trnh ti a ch 0x00 vit vo b nh EEPROM ti a
ch 0x10 ri c EEPROM xut ra cng RB3 n RB0. Ch na byte cao xut ra trc,
na byte thp xut ra sau.
B mn K Thut My Tnh
12
Bi 2 :
Ni dung:
Kho st hot ng ca nt nhn, LED.
Kho st cc thanh iu khin cng xut nhp song song.
Tnh ton thi gian thc thi lnh, vit chng trnh con lm nhim v delay.
Vit chng trnh kim tra nt nhn v hin th kt qu kim tra ra LED.
Yu cu:
a.Vit chng trnh xut d liu ra 4 led n m t 0000 -> 1111 -> 0000.
Thi gian gia cc ln m ln 1 n v l 1s.
b. Vit chng trnh xut d liu ra 4 led m theo h m O,D
B mn K Thut My Tnh
13
B mn K Thut My Tnh
14
15
dl_3
movwf
call
decfsz
bra
decfsz
bra
return
delay_1sb
delay1ms
delay_1sb
dl_3
delay_1sa
dl_2
; bt u vng lp trong
; kt thc vng lp trong (250 lan)
; kt thc vng lp ngoi (4 ln)
B mn K Thut My Tnh
16
B mn K Thut My Tnh
17
B mn K Thut My Tnh
; RB0 xuat
18
bsf
TRISA,RA4
; RA4 nhap
return
end
Sau khi c chng trnh mu ta thc hin vic compile chng trnh v np xung
mch chy chng trnh nh hng dn chng 1.
2.6 Bi tp
a) Vit chng trnh khi nhn RA4 th cc led s sng m ln, mi ln nhn m
ln 1 n v theo h m H v h m O.
b) Vit chng trnh khi nhn RA4 th cc led s sng m ln, mi ln nhn m
ln 1 n v theo h m D.
c) Cho s mch loa
RC2
J9
R11
++
-
22
BZI
- Value
BUZZER- AST124MLTRQ
Vit chng trnh pht xung 1KHz ra loa khi nhn RA4 v ngng pht xung khi
nhn RA4 ln 2.
B mn K Thut My Tnh
Bc 2.
Include file p18f4520.inc vo file timer _polling.asm
B mn K Thut My Tnh
Bc 3.
Khi to Port B
init
movlw
0x0e
; PortB Digital output
movwf
ADCON1
clrf
PORTB
; ton b PORTB l cng xut
clrf
TRISB
return
Bc 4. Khi to ngt timer0 pht ra ngt 100ms (vi xung clock 4 MHz, chn prescaler
2:1, s m 50000).
init_timer0
.10
movlw
movwf
tmr0_var1
bcf
INTCON,TMR0IF
clrf
T0CON
movlw
0x3c
movwf
TMR0H
movlw
0xaf
movwf
TMR0L
bsf
T0CON,TMR0ON
return
Bc 5. Vit chng trnh con chy trong timer, sau 1s tng gi tr hin th ra ngoi led
n.
V c 100ms th c ngt mt ln, do sau 1s ta tng ln mt gi tr th cn 10 ln
ngt nh vy, nn ban u ta phi khi to cho bin delay = 10. V y l hm chnh thc
hin chc nng ca bi tp 1.
timer0_ routine
bcf
decfsz
bra
incf
movlw
movwf
timer0_isr_1
bcf
movlw
movwf
movlw
movwf
bsf
return
INTCON,TMR0IF
tmr0_var1
timer0_isr_1
PORTB
.10
tmr0_ var1
T0CON,TMR0ON
0x3c
TMR0H
0xaf
TMR0L
T0CON,TMR0ON
B mn K Thut My Tnh
21
B mn K Thut My Tnh
init
p18f4520.inc
0
main
init
init_timer0
INTCON,TMR0IF
tmr0_loop
timer0_routine
tmr0_loop
init_timer0
movlw
movwf
bcf
clrf
movlw
movwf
movlw
movwf
bsf
return
.10
tmr0_var1
INTCON,TMR0IF
T0CON
0x3c
TMR0H
0xaf
TMR0L
INTCON,TMR0IF
bcf
decfsz
bra
INTCON,TMR0IF
tmr0_var1,1
timer0_isr_1
incf
movlw
movwf
LATB
.10
tmr0_var1
bcf
movlw
T0CON,TMR0ON
0x3c
timer0_routine
timer0_isr_1
B mn K Thut My Tnh
movwf
movlw
movwf
bsf
return
TMR0H
0xaf
TMR0L
T0CON,TMR0ON
Tn chn
GND
VCC
VEE
RS
R/W
D0
D1
D2
D3
D4
D5
D6
D7
A
K
Mc logic
0
1
0
1
M t
t (0V)
Ngun (+5V)
Chnh contrast (0 VCC)
D0-D7 l gi tr lnh
D0-D7 l gi tr d liu
Ghi gi tr vo LCD
c gi tr ra t LCD
0
1
T 1 xung 0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
-
B mn K Thut My Tnh
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
Thi gian
thc thi
1.52ms
1.52ms
37s
S/
C
R/
L
37s
DL
37s
DDRAM address
37s
BF
DDRAM address
0s
D7
D6
D5
D4
D3
D2
D1
D0
43s
D7
D6
D5
D4
D3
D2
D1
D0
43s
I/D SH
CGRAM address
37s
37s
1
1
1
1
1
1
1
1
Increment
Entire shift on
Display shift
Shift to the Right
8 bits
2 Lines
5x10 dots Font
Internally operating
0
0
0
0
0
0
0
0
Decrement
Entire shift off
Cursor move
Shift to the Left
4 bits
1 Lines
5x8 dots Font
Can accept instruction
B mn K Thut My Tnh
27
2.2K
RD7
Q2
MMBT2222A
LCD1
RD4
RD5
RD6
RD0
RD1
RD2
RD3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Vss
Vdd
Vee
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
LCD k t 2x16
Trc khi xut k t ra mn hnh LCD, LCD controller phi c khi to khi mi
c cp ngun. Trnh t khi to nh lc sau. Trn lc , lnh Display clear c
gi tr 0x01 c gi hai ln, ln u l 4 bit cao c gi tr 0x0, ln th hai l bn bit thp
c gi tr 0x01. Lnh Function set gi hai ln gi tr 0x2.
B mn K Thut My Tnh
28
Bt ngun
(chn PD7 out ra mc logic 1)
Ch ti thiu 30ms
(i VDD > 4.5V)
Ch ti thiu 39s
Gi lnh
Display clear
Gi lnh
Function set
RS RW D7
D6
D5
D4
RS RW D7
D6
D5
D4
*
Gi lnh
Entry mode set
Ch ti thiu 39s
RS RW D7
Gi lnh
Display on/off control
RS RW D7
D6
D5
D4
D6
D5
D4
I/D
SH
Kt thc khi to
B mn K Thut My Tnh
29
LCD_E
LCD_RW
LCD_RS
LATD, RD6
LATD, RD5
LATD, RD4
#define
#define
#define
#define
#define
#define
LCD_E_DIR
LCD_RW_DIR
LCD_RS_DIR
LCD_D
LCD_ON
LCD_ON_DIR
TRISD, RD6
TRISD, RD5
TRISD, RD4
PORTD
LATD,RD7
TRISD, RD7
; LCD E clock
; LCD read/write line
; LCD register select line
B mn K Thut My Tnh
30
Write4bit_to_portD
tt1
tt2
tt3
tt4
set_bit_0
set_bit_1
set_bit_2
set_bit_3
btfsc
bra
bcf
btfsc
bra
bcf
btfsc
bra
bcf
btfsc
bra
bcf
return
bsf
bra
bsf
bra
bsf
bra
bsf
bra
data_4bit,0
set_bit_0
LCD_D4
data_4bit,1
set_bit_1
LCD_D5
data_4bit,2
set_bit_2
LCD_D6
data_4bit,3
set_bit_3
LCD_D7
LCD_D4
tt1
LCD_D5
tt2
LCD_D6
tt3
LCD_D7
tt4
31
; RD3 input
; RD2 input
; RD1 input
; RD0 input
; Cho phep lenh
; Cho phep doc
; Cho xong
; Cho phep LCD hoat dong
; Giu cham phan cung
; Kiem tra LCD xong chua ?
; Xong, cam LCD
Thc hnh Vi x l Vi iu khin
; RD3 output
; RD2 output
; RD1 output
; RD0 output
lcd_write_4bits
lcd_print_char
print1
cpfseq
print2
row
bra
movlw
cpfseq
bra
movlw
movwf
movwf
rcall
rcall
movlw
addwf
return
B mn K Thut My Tnh
print2
.16
;current_row = 1
col
print2
.0
; current_col = 16
row
col
; Xoa LCD
lcd_clear
lcd_write_data ;Xuat data ra LCD
.1
col
; Tang col len 1
32
movlw
movwf
rcall
call
movlw
movwf
movlw
movwf
rcall
return
LCD_RS
; Cho phep xuat data
char,data_4bit ; Xuat 4 bit data cao ra
data_4bit
lcd_write_4bits
char,data_4bit ;Xuat 4 bit data thap ra
lcd_write_4bits
0x01
command
lcd_write_cmd ; Xoa man hinh LCD
delay5ms
; Giu cham 5msec
.0
row
.0
col
lcd_goto_xy
; Cursor ve toa do 0,0
B mn K Thut My Tnh
33
1
1
1
1
1
1
1
1
1
1
init_portD
lcd_goto_xy
rcall
movlw
movwf
movwf
call
bcf
movlw
movwf
rcall
call
rcall
call
rcall
movlw
movwf
rcall
movlw
movwf
rcall
movlw
movwf
rcall
movlw
movwf
rcall
return
init_portD
.0
col
row
delay15ms
LCD_RS
0x03
data_4bit
lcd_write_4bits
delay5ms
lcd_write_4bits
delay100us
lcd_write_4bits
0x02
data_4bit
lcd_write_4bits
0x28
command
lcd_write_cmd
0x0c
command
lcd_write_cmd
0x06
command
lcd_write_cmd
clrf
bcf
bcf
bcf
bcf
bcf
bcf
bcf
bcf
bsf
return
LATD
LCD_D4_DIR
LCD_D5_DIR
LCD_D6_DIR
LCD_D7_DIR
LCD_E_DIR
LCD_RW_DIR
LCD_RS_DIR
LCD_ON_DIR
LCD_ON
;
;
;
; Display = on
; Data Output
; Control output
B mn K Thut My Tnh
34
bra
movlw
cpfslt
bra
movlw
cpfslt
bra
movlw
mulwf
movff
movf
addwf
bsf
movff
rcall
call
return
movlw
mulwf
movff
movf
addwf
bsf
bsf
bra
xy2
xy3
xy1
xy3
.4
row
xy3
.2
row
xy1
0x40
row
PRODL,addr
col,w
addr
addr,7
addr,command
lcd_write_cmd
delay5ms
; Qua 16 cot
0x40
row
PRODL,addr
col,w
addr
addr,4
addr,2
xy2
; Qua 2 hang
p18f4520.inc
dec
B mn K Thut My Tnh
35
#define
#define
#define
#define
#define
#define
#define
#define
LCD_D4
LCD_D5
LCD_D6
LCD_D7
LCD_D4_DIR
LCD_D5_DIR
LCD_D6_DIR
LCD_D7_DIR
LATD, RD0
LATD, RD1
LATD, RD2
LATD, RD3
TRISD, RD0
TRISD, RD1
TRISD, RD2
TRISD, RD3
#define
#define
#define
LCD_E
LCD_RW
LCD_RS
LATD, RD6
LATD, RD5
LATD, RD4
; LCD E clock
; LCD read/write line
; LCD register select line
#define
#define
#define
#define
#define
#define
LCD_E_DIR
LCD_RW_DIR
LCD_RS_DIR
LCD_D
LCD_ON
LCD_ON_DIR
TRISD, RD6
TRISD, RD5
TRISD, RD4
PORTD
LATD,RD7
TRISD, RD7
code
0
goto
start
udata
;------- Bien cho LCD ---------;
delay
res
delay_1
res
command
res
data_4bit
res
row
res
col
res
addr
res
char
res
;------- Bien cho Timer0 -------;
tmr0_var1
res
decode_var
res
;-------------------------------;
PRG
start
code
call
rcall
rcall
tmr0_loop btfss
bra
rcall
B mn K Thut My Tnh
init_lcd
init_portB
init_timer0
1
1
1
1
1
1
1
1
1
1
tmr0_1
movlw
cpfseq
bra
rcall
call
bra
decode_ascii
movff
movlw
andwf
movlw
cpfslt
bra
movlw
decode_2 addwf
movff
return
decode_1 movlw
bra
init_timer0
.10
tmr0_var1
tmr0_loop
decode_ascii
lcd_print_char
tmr0_loop
PORTB,decode_var
0x0f
decode_var
0x0a
decode_var
decode_1
; Lon hon 9
0x30
; Nho hon hay bang 9
decode_var
decode_var,char
0x37
decode_2
movlw
movwf
bcf
clrf
movlw
movwf
movlw
movwf
bsf
return
.10
tmr0_var1
INTCON,TMR0IF
T0CON
0x3c
TMR0H
0xaf
TMR0L
INTCON,TMR0IF
bcf
decfsz
bra
incf
movlw
movwf
bcf
movlw
movwf
movlw
movwf
bsf
return
INTCON,TMR0IF
tmr0_var1,1
timer0_isr_1
LATB
.10
tmr0_var1
T0CON,TMR0ON
0x3c
TMR0H
0xaf
TMR0L
T0CON,TMR0ON
movlw
movwf
0x0e
ADCON1
timer0_routine
timer0_isr_1
init_portB
B mn K Thut My Tnh
PORTB
TRISB
print1
cpfseq
print2
bra
movlw
cpfseq
bra
movlw
movwf
movlw
movwf
rcall
movlw
print1
.16
col
print1
.1
row
.0
col
lcd_goto_xy
.1
; current_col = 16
row
bra
movlw
cpfseq
bra
movlw
movwf
movwf
rcall
rcall
movlw
addwf
return
; current_row = 0
movlw
movwf
rcall
call
movlw
movwf
movlw
movwf
B mn K Thut My Tnh
print2
16
col
print2
.0
row
col
lcd_clear
lcd_write_data
.1
col
LCD_RS
char,data_4bit
data_4bit
lcd_write_4bits
char,data_4bit
lcd_write_4bits
0x01
command
lcd_write_cmd
delay5ms
.0
row
.0
col
38
;current_row = 1
; current_col = 16
; Xoa LCD
;Xuat data ra LCD
; Tang col len 1
xy2
xy3
xy1
init_lcd
lcd_goto_xy
.4
row
xy3
.2
row
xy1
0x40
row
PRODL,addr
col,w
addr
addr,7
addr,command
lcd_write_cmd
rcall
movlw
movwf
movwf
call
bcf
init_portD
.0
col
row
delay15ms
LCD_RS
movlw
movwf
rcall
call
rcall
call
B mn K Thut My Tnh
0x40
row
PRODL,addr
col,w
addr
addr,4
addr,2
xy2
0x03
data_4bit
lcd_write_4bits
delay5ms
lcd_write_4bits
delay100us
39
; Qua 3 hang
;3
;3
Thc hnh Vi x l Vi iu khin
init_portD
rcall
movlw
movwf
rcall
movlw
movwf
rcall
lcd_write_4bits
0x02
data_4bit
lcd_write_4bits
0x28
command
lcd_write_cmd
;3
movlw
movwf
rcall
movlw
movwf
rcall
return
0x0c
command
lcd_write_cmd
0x06
command
lcd_write_cmd
clrf
bcf
bcf
bcf
bcf
bcf
bcf
bcf
bcf
bsf
return
LATD
LCD_D4_DIR ; Data Output
LCD_D5_DIR
LCD_D6_DIR
LCD_D7_DIR
LCD_E_DIR
; Control output
LCD_RW_DIR
LCD_RS_DIR
LCD_ON_DIR
LCD_ON
; Cap nguon cho LCD
; Display = on
; RD3 input
LCD_D6_DIR
LCD_D5_DIR
LCD_D4_DIR
; RD2 input
; RD1 input
; RD0 input
LCD_RS
LCD_RW
40
wait1
rcall
bsf
rcall
btfsc
bra
bcf
bcf
bcf
delay1us
LCD_E
delay1us
LCD_D,3
wait1
LCD_E
LCD_D7_DIR
LCD_D6_DIR
; Cho xong
; Cho phep LCD hoat dong
; Giu cham phan cung
; Kiem tra LCD xong chua ?
bcf
bcf
return
LCD_D5_DIR
LCD_D4_DIR
; RD1 output
; RD0 output
dl_15ms
movlw
movwf
rcall
decfsz
B mn K Thut My Tnh
data_4bit,0
set_bit_0
LCD_D4
data_4bit,1
set_bit_1
LCD_D5
data_4bit,2
set_bit_2
LCD_D6
data_4bit,3
set_bit_3
LCD_D7
LCD_D4
tt1
LCD_D5
tt2
LCD_D6
tt3
LCD_D7
tt4
.15
delay_1
delay1ms
delay_1
41
delay5ms
dl_5ms
delay1ms
dl_1ms
delay100us
dl100us
delay10us
dl10us
delay1us
bra
return
movlw
movwf
rcall
decfsz
bra
return
dl_15ms
movlw
movwf
rcall
decfsz
bra
return
.248
delay
delay1us
delay
dl_1ms
movlw
movwf
rcall
decfsz
bra
return
.98
delay
delay1us
delay
dl100us
movlw
movwf
rcall
decfsz
bra
return
.9
delay
delay1us
delay
dl10us
.5
delay_1
delay1ms
delay_1
dl_5ms
nop
nop
return
; Tan so 16MHz
; 1 chu ky
; 2 chu ky
3.6 Bi tp
a ) Vit chng trnh ng h thi gian thc hh:mm:ss trn LCD. Nhn nt RA4 th
chn ch nhp gi, pht, giy v bt u chy, Nhn nt RB0 tng gi, pht giy ln
cng 1.
B mn K Thut My Tnh
42
B mn K Thut My Tnh
43
S iu khin ngt:
ADCON1
ADCS2
0
0
1
X
1
1
0
1
Bc
1 2. Include file p18f4520.inc vo file ext_timer0_int.asm
Bc 3. Khi to PortB l output s dng cc lnh clrf, bcf
initFRC
clrf
LATB
; RB1-RB3 la cong xuat
bcf
TRISB,RB1
FOSC/64
B mn K Thut My Tnh
FOSC/32
44
TRISB,RB2
bcf
bcf
TRISB,RB3
movlw
.10
; khoi dong bien delay=10
movwf
delay
return
Bc 4. Khi to timer 0 to ngt 100 ms (vi xung clock 4 MHz, chn prescaler 2:1, s
m 50000), cho ngt timer 0 c u tin thp.
init_timer0
bsf
RCON,IPEN
; cho phep uu tien ngat.
bcf
INTCON2,TMR0IP
; timer0 uu tien thap
bcf
INTCON,TMR0IF
; xoa co ngat timer0
bsf
INTCON,TMR0IE
; cho phep ngat timer0
bsf
INTCON,GIEH
; cho phep ngat uu tien cao
bsf
INTCON,GIEL
; cho phep ngat uu tien thap
clrf
T0CON
; prescaler 2:1
movlw
HIGH (-50000)
; nap so dem 50000 cho timer0
movwf
TMR0H
movlw
LOW (-50000)
movwf
TMR0L
bsf
T0CON,TMR0ON
; cho phep timer0 dem
return
Bc 5. Khi to ngt ngoi 0 tch cc cnh xung.
i vi ngt ngoi INT1 v INT2, u tin ph thuc vo 2 bit INT1IP v INT2IP
trong thanh ghi INTCON3. Cn vi ngt ngoi INT0 th u tin lun l cao.
init_int0
bcf
INTCON2,INTEDG0 ; tac dong canh xuong
bcf
INTCON,INT0IF
; xoa co ngat
bsf
INTCON,INT0IE
; cho phep ngat ngoai INT0
return
Bc 6.
Vit chng trnh cho ngt ngoi 0, bt 3 n led n cng sng v khi to li
gi tr cho bin delay 1s sau th ngt timer s tt 3 n .
int0_isr
bcf
INTCON,INT0IF
bsf
LATB,RB1
bsf
LATB,RB2
bsf
LATB,RB3
movlw
.10
movwf
delay
return
Bc 7.
Vit chng trnh cho ngt timer0, sau 1s sau khi led c bt sng th n s
lm cho led tt. Kt ni vi chng trnh LCD d hin th.
Thi gian timer m ln 1 n v c tnh bng cng thc :
t = (1/(Focs/4))*prescaler = (1/(4Mhz/4))*2) =2s
Nh vy, mun c thi khong 100 ms (100000s), ta cn m 50000 ln.
timer0_isr
bcf
INTCON,TMR0IF
B mn K Thut My Tnh
45
decfsz
bra
movlw
movwf
timer0_isr_1
delay,1
timer0_isr_1 bcf
LATB,RB1 bcf
LATB,RB2 bcf
LATB,RB3
.10
delay
ADCON1
ADCS2
0
0
4.3 Chng trnh
mu yu cu
1
#include
radix
X
p18f4520.inc
dec
code1
goto
org 1
goto
0
org
goto1
0
start
08h
isr_high
18h
isr_low
1
udata
FRC cho Timer0 -------;
;------- Bien
tmr0_var1 res
FOSC/64
decode_var
res
1
1
FOSC/32
1
1
1
FOSC/2
46
cpfseq
bra
movff
swapf
rcall
call
movff
rcall
call
movlw
movwf
movwf
call
bra
run_ena
int_loop
secs,decode_var
decode_var
decode_ascii
lcd_print_char
secs,decode_var
decode_ascii
lcd_print_char
.0
row
col
lcd_goto_xy
int_loop
init_portB
call
rcall
rcall
rcall
rcall
return
init_lcd init
init_portB
init_timer0
init_int0
init_real_time
movlw
movwf
clrf
bsf
bcf
bcf
bcf
bcf
bcf
bsf
0x0e
ADCON1
LATB
TRISB,RB0
TRISB,RB1
TRISB,RB2
RISB,RB3
INTCON2,INTEDG0
INTCON,INT0IF
INTCON,IN
47
; RB1 output
; RB2 output
; RB3 output return init_int0
; Tac dong canh xuong
; Xoa co ngat canh xuong
; Cho phep ngat ngoai INT0
return
init_timer0
movlw
movwf
bsf
bcf
bcf
bsf
bsf
bsf
clrf
movlw
movwf
movlw
movwf
bsf
return
.10
tmr0_var1
RCON,IPEN
INTCON2,TMR0IP
INTCON,TMR0IF
INTCON,TMR0IE
INTCON,GIEH
INTCON,GIEL
T0CON
0x3c
TMR0H
0xaf
TMR0L
T0CON,TMR0ON
init_real_time clrf
clrf
clrf
return
secs
mins
run_ena
timer0_isr
bcf
decfsz
bra
;incf
btg
incf
movlw
movwf
bcf
movlw
movwf
movlw
movwf
bsf
return
INTCON,TMR0IF
tmr0_var1
tmr0_r_1
PORTB
LATB,RB3
secs
.10
tmr0_var1
T0CON,TMR0ON
0x3c
TMR0H
0xaf
TMR0L
T0CON,TMR0ON
bcf
clrf
cpfseq
bra
clrf
setf
INTCON,INT0IF
WREG
run_ena
int0_1
secs
run_ena
tmr0_r_1
int0_isr
48
; Xuat ra LED
; Nhay D5
int0_2
call
return
clrf
bra
delay15ms
isr_high
call
retfie
int0_isr
isr_low
call
retfie
timer0_isr
int0_1
run_ena
int0_2
end
Sau khi c chng trnh mu ta thc hin vic compile chng trnh v np xung
mch chy chng trnh nh hng dn chng 1.
4.4 Bi tp
Vit chng trnh hin th ng h th thao mm:ss trn LCD. Khi nhn nt RA4 bt u
m, bm tip th dng, bm na th chy li t u.
49
Bus I2C gm 2 dy tn hiu SCL (Serial Clock Line) v SDA (Serial Data Line) u
c ko ln ngun. D liu c truyn tng bit SDA theo tng clock ca SCL.
Hnh 11.2 l giao thc I2C. Trc khi truyn d liu, ta cn khi ng I2C bng cch
ko ln lt SDA v SCL xung mc thp. Sau 8 bit d liu s c ra tun t theo tng
cnh xung chn SCL. Clock th 9 s dnh cho bit ACK. Bit ACK ny c th l do master
gi xung hoc do slave gi v. Khi kt thc giao tip I2C, ta phi stop n bng cch ko 2
chn SCL v SDA ln mc cao.
50
STOP
START
R/W = 0
condition
condition
for write
7 bit address of
Internal address,
Data to be written
Data to be written
Data to be written
peripheral chip
into
address
N
+
1
into
address
N
into
address N + 2 A
A
A N, in peripheral
A
A
C
WK
SDA S
C
K
C
K
C
K
C
K P
Acknowledge
by peripheral
(a) General foemat to write to several pepripheral interal registers or addresses
R/W = 1
START
RESTART
R/W = 0
for write
condition
condition
for write
Internal address,
7 bit address of
7 bit address of
peripheral chip
N,
in
peripheral
peripheral
chip
A
A
A
C
SDA S
WK
STOP
condition
Data read
from addess N
C
K S
RK
Acknowledge
by peripheral
Data read
A from addess N + 1
C
K
Acknowledge by PIC
No acknowledge by PIC, set out as a
signal to terminate further transfers
(b) General format to read format several pepripheral interal registers or addresses
NP
O
A
C
K
TRISC
X X X 1 1 X X X
SSPCON1 0
0 1 1 1 0 0 0
SSPCON2
X
Automatically cleared.
RSEN
PEN
RCEN
ACKEN
ACKDT
1: No acknowledge
0: Acknowledge
ACKSTAT
SSPBUF
PIRI
X X X X
X X X
SSPIE
(b)
1: Operation complete
0: Must be cleared before operation is initiated
5.2.1 Hm i2c_init
u tin ta phi thit lp chiu input cho 2 chn SCL v SDA bng cch thit lp 2 bit
tng ng trong thanh ghi TRISC l 1.
PIC18F4520 s ng vai tr l master gi clock, ni dung trong thanh ghi SSPADD
s c dng cho b sinh clock. Tn s cho giao tip I2C s c tnh theo cng thc sau y
f = Fosc/(4*(SSPADD + 1))
Ta s chn tn s cho SCL l 100kHz v phi np vo thanh ghi ny gi tr 9 (0x09)
cho thnh anh 4MHz.
Tip theo l chn mode master cho PIC18F4520, thit lp SSPM3:SSPM0 = 1000
v enable bit SSPEN trong thanh ghi SSPCON1.
init_I2C
movlw
andwf
clrf
movwf
movwf
movlw
iorwf
bsf
bsf
movlw
movwf
bsf
return
0x3f
SSPSTAT
WREG
SSPCON1
SSPCON2
b'00011000'
SSPCON1
I2C_SCL_DIR
I2C_SDA_DIR
0x09
SSPADD
SSPCON1,SSPEN
53
; bit6,7 = 0
; Xoa 2thanh ghi
; I2C Master mode
; SCL input
; SDA input
; Fscl=100Khz
; Thanh ghi clock
; Cho phep I2C
I2C_start
btfss
bra
bcf
return
PIR1,SSPIF
I2C_wait
PIR1,SSPIF
; Cho SSPIF = 1
bsf
call
return
SSPCON2,SEN
I2C_wait
; Xoa SSPIF
SSPCON2,RSEN
I2C_wait
5.2.3 Hm i2c_stop
54
bsf
call
return
SSPCON2,PEN
I2C_wait
5.2.4 Hm i2c_write_byte
Vic gi 1 byte d liu t master xung slave c bt u khi c lnh gn vo thanh
ghi SSPBUF. Ngay lc ny c BF (Buffer Full) s bt ln 1. Qu trnh gi d liu bt u
theo tng xung clock chn SCL.
Sau 8 clock, 8 bit d liu trong thanh ghi SSPBUF c shift ht v c BF bt xung
0. Master s th chn SDA slave c th gi tn hiu ACK v master. Nu nhn c ACK,
bit ACKSTAT s c xa, ngc li bit ny s c bt ln 1. Gi tr ACK c lu trong
bit ACKDT.
Qu trnh gi ACK t slave ln master c thc hin trong clock th 9 ca SCL v
sau bit SSPIF c set ln 1.
Ngi lp trnh c th check qua cc c BF, ACKSTAT v sau cng l SSPIF
kim tra li. on code di y ch kim tra c nhn c ACK hay khng ch cha kim
tra ACK ng hay sai.
; Truyen ky tu
; Cho truyen xong
bra
btfsc
bra
call
return
I2C_w_2
I2C_w_1
SSPCON2,ACKSTAT
I2C_w_2
I2C_wait
5.2.5 Hm i2c_read_byte
Hm ny dng c 1 byte d liu t slave v. Khi bit RCEN (SSPCON2<3>) c
set ln 1, d liu t slave bt u gi vo thanh ghi SSPBUF. Sau 8 clock d liu s c
shift vo thanh ghi SSPBUF v c BF s c bt ln 1. ng thi c SSPIF cng c
set v RCEN c clear bng phn cng.
Khi c xong, c SSPIF s c xa, ta cn set ACKEN ln 1 (SSPCON2<4>) gi
ACK v cho slave. Bit ACK l 0 hay 1 c quy nh trong bit ACKDT (SSPCON2<5>).
Khi gi xong ACK clock th 9, c SSPIF s c bt ln li.
I2C_read_byte ;---- Doc dua vao bien I2C_abyte ----;
bsf
SSPCON2,RCEN
call
I2C_wait
clrf
WREG
cpfseq
I2C_Ack_bit
bra
I2C_r1
bcf
SSPCON2,ACKDT
I2C_r2
bsf
SSPCON2,ACKEN
call
I2C_wait
movff
SSPBUF,I2C_abyte
return
I2C_r1
bsf
SSPCON2,ACKDT
bra
I2C_r2
+5v
+5V
U4
8
R8
R9
6
4.7K
ADC
S2 AD
ADC
CS2
Conv
ersio
AD
n
C
Cloc
Con
k
versi
Selec
on
t bit
Cloc
k
PCF
Sele
G
ct bit
ADC
Port
PCF
Conf
G
igura
AD
tion
4.7K
ADCS2
- ADC
Convers
ion
Clock
Select
24LC256
bit
PCFG
ADC
Port
Configu
ration
Control
bits (see
Table
below)
56
ADCO
N1
ADCS
2
1
2
3
4
A A A
2 1 0 R/W
A A A A A A A
14 13 12 11 10 9 8
Chip
Select
Bits
Control
Code
A
0
A
7
Bus Activity
Master
SDA Line
Control Byte
S10
Bus Activity
Address
High Byte
AAA
0 2 10 0
Address
Low Byte
S
T
O
P
Data
P
A
C
K
A
C
K
A
C
K
A
C
K
S
T
A
R
T Control Byte
Address
High Byte
Address
Low Byte
S
T
O
P
Data Byte 1
Data Byte 0
A AA
Bus Activity
S 1 0 1 0 2 1 0 0A
C
K
P
A
C
K
57
A
C
K
A
C
K
A
C
K
SDA Line
Address
High Byte
Control Byte
A AA
S1 0 1 02 100
Bus Activity
x = dont care bit
S
T
A
R
T
Address
Low Byte
x
A
C
K
A
C
K
A
C
K
S
T
O
P
Data
Byte
Control
. Byte
A AA
S1 01 02 10 1
P
N
O
A
C
A
C
K
Bus Activity
Master
SDA Line
Bus Activity
Control
Byte
Data (n)
Data (n + 1)
Data (n + 2)
A
C
K
A
C
K
58
S
T
O
P
Data (n + x)
A
C
K
N
O
A
C
K
Khoa KH&KTMT
p18f4520.inc
dec
#define
#define
#define
#define
I2C_SCL_DIR TRISC
I2C_SDA_DIR TRISC
SLAVE_WRITE
SLAVE_READ
code
goto
0
start
,RC3
,RC4
0xA0
0xA1
udata
;------- Bien cho I2C -------;
I2C_abyte res
I2C_data
res
decode_var res
1
1
1
addr_24C256res
I2C_Ack_bit res
;-------------------------------;
2
1
PRG
code
call
init_lcd
rcall
init_I2C
movlw
0xaa
movwf
I2C_data
clrf
WREG
movwf
addr_24C256
addr_24C256 +1
rcall
Viet trong I2C_data
rcall
Doc vao I2C_data
movff
I2C_data,decode_var
swapf
decode_var
call
decode_ascii
call
lcd_print_char
movff
I2C_data,decode_var
call
decode_ascii
call
lcd_print_char
bra
$
start
ReadArrayIntAddr_24C256
movlw
andwf
clrf
movwf
movwf
movlw
iorwf
bsf
bsf
movlw
movwf
bsf
return
0x3f
SSPSTAT
WREG
SSPCON1
SSPCON2
b'00011000'
SSPCON1
I2C_SCL_DIR
I2C_SDA_DIR
0x09
SSPADD
SSPCON1,SSPEN
; bit6,7 = 0
; Xoa 2thanh ghi
; I2C Master mode
; SCL input
; SDA input
; Fscl=100Khz
; Thanh ghi clock
; Cho phep I2C
59
Khoa KH&KTMT
I2C_write_byte
I2C_restart
SLAVE_READ
movwf
call
setf
call
call
movff
return
I2C_abyte
I2C_write_byte
I2C_Ack_bit
I2C_read_byte
I2C_stop
I2C_abyte,I2C_data
I2C_start
;
; Phat byte DK
; No Ack : byte cuoi
; chuyen vao I2C_data
; Khoi dong nhan = 1
; Cho xong
; Kiem tra Ack or NoAck
; Ack
; Cho phep Ack
; Cho
; No Ack
; Truyen ky tu
; Cho truyen xong
;Slave nhan duoc ?
btfss
bra
bcf
return
PIR1,SSPIF
I2C_wait
PIR1,SSPIF
; Cho SSPIF = 1
bsf
call
return
SSPCON2,SEN
I2C_wait
; Xoa SSPIF
60
Khoa KH&KTMT
I2C_restart bsf
call
return
SSPCON2,RSEN
I2C_wait
I2C_stop
SSPCON2,PEN
I2C_wait
bsf
call
return
end
5.5 Bi tp:
Vit vo 256 byte ca EEPROM 24LC256 bt u t a ch 0000 vi ni dung t 00 n
0xFF. c li ni dung v xut d liu mi ln 32 byte ln LCD.
61
Khoa KH&KTMT
Khoa KH&KTMT
SSPSR l thanh ghi dng dch d liu ra/vo vi iu khin, SSPBUF l thanh ghi dng
c d liu t ngoi vo hoc ghi d liu truyn ra ngoi. ch nhn, 2 thanh SSPBUF v SSPSR
l 1 b buffer i, khi d liu t ngoi truyn vo c lu y trong SSPSR(8 bits) th d liu ny
AD
c truyn ti thanh ghi SSPBUF ngi dng
CS ly ra. Cn ch truyn th khi d liu c ghi
vo thanh ghi SSPBUF th cng lc d liu cng
2 - c ghi vo thanh ghi SSPSR dch ra ngoi.
AD
C
6.1.2.1 Thanh ghi SSPSTAT
Con
Bit
vers
7
6
5
4 ion
3
Read/Write ADCS2 - ADC Conversion Clock Select bit Clo
ck
PCFG
ADC
Port
Configuration
Control
bits
(see
R/W
R/W
R
R SelTable below)
R
ect
Initial Value ADCON1
0
0
0
0
0
bit
R
0
R
0
R
R
0
Bit 7 ADCS2
SMP Sample bit
PC
SPI Master mode
FG
01 = d liu vo s c ly cui chu
k xung clock
AD
00 = d liu vo s c ly gia chu
C k cung clock
Port
SPI Slave mode
Con
1SMP phi c gn bng 0
figu
Bit 6 XCKE SPI Clock Select bit
rati
Bit 0 BF BuFffer Full Status bit(dnh choonqu trnh nhn)
Con y
11 = qu trnh nhn hon thnh, SSPBUF
trol
0 = qu trnh nhn ang thc hin, SSPBUF
trng
bits
1
6.1.2.2
Thanh
ghi SSPCON1
0
(see
Tab
le
4 bel
3
SSPM3ow) SSPM2
Bit
7
6
5
2
1
0
1
WCOL
SSPOV SSPEN
CKP
SSPM1 SSPM0
Read/Write
R/W
R/W
R
R
R
R
R
1
AD
Initial Value 0
0
0
0
0
0
0
CO
F
RC
Bit 7 WCOL Write Collision Detect bit(ch dng ch truyn tn hiu)
N1
R
0
1 =/64
thanh ghi SSPBUF c ghi d liu trong khi d liu c truyn cha ht
FOSC
AD
0 = khng c ng
CS
/32
Bit 6 FOSC
SSPOV
Receive Overflow Indicator
bit(dng ch nhn tn hiu)
2
1 = c d liu mi nhn v ghi ln thanh ghi SSPBUF trong khi d liu trc
FOSC/16
0
cha c c.
FOSC
0 =/8d liu khng b ghi
0
Bit 5 SSPEN Synchronous Serial Port Enable bit
FOSC/2
1 SDO, SCK, SS c cu hnh tng ng.
1 = bt ch SPI v cc chn SDI,
0 =/4tt ch SPI
FOSC
X
Bit 4 CKP Clock Polarity Select bit
0
1 = thit lp trng thi rnh khi xung
1 clock mc cao
1 0 = thit lp trng thi rnh khi xung clock mc thp
1
Bit 3-0 SSPM3:SSPM0 Synchronous Serial Port Mode Select bit
0 0101 = ch slave, clock = chn SCK, tt chc nng ca chn SS
0
1
0
0
63
1
1
Khoa KH&KTMT
init_Port
bsf
bsf
bsf
bcf
bcf
bcf
bcf
return
movlw
movwf
bcf
bsf
bcf
SSPSTAT,CKE
SSPCON1,CKP
SSPCON1,SSPEN
SSPCON1,SSPM0
SSPCON1,SSPM1
SSPCON1,SSPM2
SSPCON1,SSPM3
0x0f
ADCON1
SPI_LAT_DIR
SPI_LATCH
SPI_SCK_DIR
; Port digital
; PortBx output
;=1
; SCK output
64
Khoa KH&KTMT
bcf
bcf
SPI_SDO_DIR
SPI_SCK
; SDO output
return
7 6 5 4 3 2 1 0
0 X0 X X
TRISC X0 X
SCK = Output
SDI =
1 if used by SPI
0 if not used by SPI; RC4 = output pin
SDO =
1 if used by SPI
0 if not used by SPI; RC4 = input pin
7 6 5 4 3 2 1 0
SSPCON1 X0 X 1
0
0
0
0
0
0
0
0
0
0
1
1
0
1
0
1
7 6 5 4 3 2 1 0
SSPSTAT
0 0 0 0 0 0
7 6 5 4 3 2 1 0
X X X
PIR1 X0 X X1XX
SSPIE =
7 6 5 4 3 2 1 0
SSPBUF
1: Transfer completed
0: Must be cleared before transfer
Khoa KH&KTMT
A
D
C
S
2
A
A D
A
A
D
A D D C C
S2
C
D
S l
- 7 on c C
LED
hai
loi
- Common Anode v Common
S
C S
2 A
Anode
2
S
2
A
D
2
- C
D
PIC18F452
C
Co
A nv
A
A
D ers
SPI C
D clock
A11 Serial
D
C io
o
RC3/SCK
D C C
n
RC5/SDO C14 Data in n
C Cl
v
C
C
o
e
D
D
D
D
C o o nD oc
r
k
n Q
Q
Q
Q
Q
o
n
v Se
s
AD
v
n
v
e lec
i
e
C
v
e
r t
o
12 Latch
r
e
Clo
r
s bit
n RB5
clock
s
(arbitrary
r
ck
s
iD
D
D
D
D
i
s
output
pin)
AD
i
o
C
P
Q
Q
Q
Q
Q
o
i
o
n C
CO
l
n
o
n
RAM
N0
o
F
n
1
15
4
2
3
C G
OUT c
AD
C
C
l
k
CO
C l l o
A
N1
o
l
o
c D b1
b3
b4
S
b2
b0
c
o
c
k
e
C
k
c
k
l
Po
Fre
k
S rt
e
S
que
S
e Co
c
e
S
ncy
e
l
t
nfi
l
e
AD
l
e gu
e
l
CS
e
c rat
b
c
e
c
t
1
i
io
t
c
t
t
n
AD
Out
t
b
b Co
CS
(c)
Circuit
b
b
i
i
ntr
0
i
i
t
P
t
ol
t
t
C
bit
P
F
s
P
AD
C
P (se
G
66
C F P C
CS
e
C
F
G
F Ta
2
F
G
G bl
G
A
e
be
D
A
AD
C
74HC595
Data out
D
Q
D
Q
D
Q
Vcc
Reset
+5V
16
10
0.1uF
D
Q
D
Q
D
Q
b5
b6
b7
OE
GND
13
8
7 6 5 4 3 2 1 0
TRISC X X 0 X 0 X X X
TRISB X X 0 X X X X X
SSPCON1 X X 0 X X X X X
SSPSTAT X X 0 X X X X X
SSPIE
SCK
SDO
bit 1 bit 0
Hnh 6-4 S kt ni PIC 18F4520 v 74HC595 dng SPI m rng cng xut
B mn K Thut My Tnh
67
bcf
call
bsf
call
return
SPI_ LATCH
delay1us
SPI_LATCH
delay1us
;=0
;=1
AD
CS2
Vi cng gii thut qut led nh bi
trn ch khc l trong chng trnh ngt
timer ta gi hm xut trc tip d liu ra cc AD
port ca vi iu khin th ra gi hm dch d
C
t vi iu khin ra cc IC ngoi vi.Chi tit hm dch nh sau:
Con
vers
ion
xuat_du_lieu;------ Xuat du lieu tu SPI_var -------;
Clo
ck
movff
SPI_var,SSPBUF
Sele
xuat1
btfss
SSPSTAT,BF
ct
bra
xuat1
bit
call
return
#include
radix
#define
#define
#define
#define
#define
#define
code
goto
udata
latch_SPI
PC
FG
AD
mu
C
Port
Con
figu
p18f4520.inc
ratio
dec
n
SPI_SCK_DIR
TRISC,RC3
Con
SPI_SDO_DIR
trol
TRISC,RC5
bits
SPI_LAT_DIR
TRISB,RB4
(see
SPI_LATCH
LATB,RB4
SPI_SCKTabl
LATC,RC3
SPI_SDOe
LATC,RC5
belo
0
w)
start
AD
CO
N1
res
1
code
AD
init_Port CS
init_SPI 2
b'11111110'
SPI_var 0
xuat_du_lieu
0
$
B mn K Thut My Tnh
68X
1
ca
liu
bsf
bsf
bsf
bcf
bcf
bcf
bcf
return
SSPSTAT,CKE
SSPCON1,CKP
SSPCON1,SSPEN
SSPCON1,SSPM0
SSPCON1,SSPM1
SSPCON1,SSPM2
SSPCON1,SSPM3
Latch_SPI
bcf
call
bsf
call
return
SPI_LATCH
delay1us
SPI_LATCH
delay1u
;=0
;=1
6.4 Bi tp
a) Vit chng trnh xut ra led 7 on cc gi tr t 0 n 9, t A n F.
b) Xc nh tc cao nht v tc nh nht ca giao tip SPI vi tn s hot ng ca thch
anh l 4Mhz.
B mn K Thut My Tnh
69
Bi 7 :
Ni dung:
Kho st b truyn ni tip ca PIC.
Tm hiu mch truyn nhn ni tip t h e o c h u n R S 2 3 2 .
Yu cu:
Vit chng trnh giao tip truyn v nhn 32 byte d liu ca vi iu khin
PIC.18F4520 t TXD sang RXD. Tc d liu thay i t 1200Hz n 56KHz.
C hay khng c parity.
B mn K Thut My Tnh
70
SBRG
TXSTA
0 0 1 0 0
0 0
RCSTA
1 0 0 1 0
OERR
Transmit register
RCREG
Receive register
PIR1 X X
X X X X
IPE1 X X
X X X X
B mn K Thut My Tnh
TXIF
RCIF
71
IPR1 X X 0 0 X X X X
TXIP high/low priority select for TX interrupts
RCIE high/low priority select for RX interrupts
RCON 1 X X X X X X X
IPEN = 1: Enable high/low interrupt structure
INTCON 1 1 X X X X X X
GIEL, global enable for low-priority interrupts
GIEH, global enable for all interrupts
B mn K Thut My Tnh
72
TRISC,6
TRISC,7
Bc 4.
Khi to cc vector ngt
code
goto
org
goto
B mn K Thut My Tnh
0
start
08h
isr_high
73
ISREnd
RcvError
btfss
bra
movlw
andwf
btfss
bra
movff
movff
swapf
rcall
call
movff
rcall
call
return
bcf
bsf
movlw
movwf
call
bra
PIR1,RCIF
ISREnd
06h
RCSTA,W
STATUS,Z
RcvError
RCREG,UART_var
UART_var,decode_var
decode_var
decode_ascii
lcd_print_char
UART_var,decode_var
decode_ascii
lcd_print_char
RCSTA,CREN
RCSTA,CREN
'L'
decode_var
lcd_print_char
ISREnd
p18f4520.inc
dec
code
0
goto
start
org
08h
goto
isr_high
B mn K Thut My Tnh
74
Thc hnh Vi x l
udata
;------- Bien cho UART ---------;
decode_var res
UART_var res
PRG
start
main1
code
call
rcall
rcall
movlw
movwf
btfss
bra
bcf
bra
1
1
init_lcd
init_RC67
init_UART
0x0f
TXREG
PIR1,TXIF
main1
PIR1,TXIF
$
TRISC,6
TRISC,7
; RC6 output
; RC7 input
19h
SPBRG
TXSTA,TXEN
TXSTA,BRGH
RCSTA,SPEN
RCSTA,CREN
PIR1,RCIF
PIE1,RCIE
INTCON,PEIE
INTCON,GIE
UART_isr
btfss
bra
movlw
andwf
btfss
bra
movff
movff
swapf
rcall
call
B mn K Thut My Tnh
PIR1,RCIF
; Co phai USART gay ngat ?
ISREnd
06h
RCSTA,W
; Kiem tra loi
STATUS,Z
; Co loi khong ?
RcvError
; Co loi
RCREG,UART_var ; Dua du lieu vao bien
UART_var,decode_var; Xuat du lieu ra LCD
decode_var
; Lay byte cao
decode_ascii
; Giai ma binary sang ma ASCII
lcd_print_char
; Xuat byte1 ra LCD
75
Thc hnh Vi x l
movff
rcall
call
ISREnd return
RcvError bcf
bsf
movlw
movwf
call
bra
isr_high
UART_isr
call
retfie
RCSTA,CREN
RCSTA,CREN
'L'
decode_var
lcd_print_char
ISREnd
end
7.3 Bi tp
a) Vit chng trnh bng hp ng gi 1 chui d liu t 0 n 31 qua cng TxD
v nhn qua RxD ri hin th ln LCD.
b) Thay i tc truyn t 1200 bauds ln 56Kbauds.
c) Thay i kim tra parity.
B mn K Thut My Tnh
76
Thc hnh Vi x l
Bi 8 :
Ni dung:
Kho st hot ng khi chuyn i A-D.
Kho st cc thanh ghi iu khin hot ng khi chuyn i A-D.
Yu cu:
Vit chng trnh c v hin th gi tr in p thay i bi bin tr.
B'00000100'
ADCON1
B'11000001'
ADCON0
0x01
ADCON2
SetupDelay
ADCON0,GO
B mn K Thut My Tnh
77
Thc hnh Vi x l
ADCON 0
- 1
ADON =
1:ADC is powered up
0:ADC is shut off to save power
B mn K Thut My Tnh
78
Thc hnh Vi x l
PIC18F452
PORTE
Power to I/O
circuitry for
individual pins
controlled by
ADCON1 selection
(Power turned off at
reset)
ADC
Ten-bit
converter
PORTA
RE2
RE2/AN7
RE1
RE1/AN6
RE0
RE0/AN5
RE5
RE5/AN4
RE4
RA4
RE3
RA3/AN3/VREF+
RE2
RA2/AN2/VREF -
RE1
RA1/AN1
RE0
RA0/AN0
ADC multiplexer
controlled by
ADCON0 selection
Analog
input
voltage
VDC
VREF +
Reference
voltage
VREF Reference voltage
switch controlled by
ADCON0 selection
0 1
ADCON0
ADCON1
ADCS0
ADCS1
B mn K Thut My Tnh
1
ADCS2
79
Thc hnh Vi x l
ADC Clock
ADCON0
ADCON1
Frequency ADCS1 ADCS0 ADCS2
FOSC /2
FOSC /4
FOSC /8
FOSC /16
FOSC /32
FOSC /64
FRC
AN3
(RA3)
AN2
(RA2)
AN1
(RA1)
VREF
+
VREF
+
0100
0101
010X
1000
1001
1010
PCFG
AN7
(RE2)
AN6
(RE1))
0000
0001
0010
0011
AN5
(RE0)
AN4
(RA5)
AN0
(RA0)
VREF +
VREF -
VDD
VSS
AN3
VSS
VDD
VSS
AN3
VSS
VDD
VSS
VREF
+
AN3
VSS
VREF
+
VREF
-
AN3
AN2
VDD
VSS
AN3
VSS
1011
AN3
AN2
1100
AN3
AN2
1101
VREF
VREF
VREF
-
AN3
AN2
1110
VDD
VSS
1111
VREF
+
VREF
-
AN3
B mn K Thut My Tnh
A
VREF
+
VREF
+
VREF
+
VREF
+
80
VSS
Thc hnh Vi x l
p18f4520.inc
dec
0
start
udata
PRG
start
code
rcall
rcall
bra
init_A_D
A_D_isr
$
A_D_isr
movlw
movwf
movlw
movwf
movlw
movwf
call
bsf
return
b'00000100'
ADCON1
b'11000001'
ADCON0
0x01
ADCON2
delay100us
ADCON0,GO
bsf
btfsc
bra
movff
return
ADCON0,GO
; Bat dau bien doi
ADCON0,GO
$-2
ADRESH,A_D_var
8.3 Bi tp
+5V
R1
6
5
K
R2
RA
470
B mn K Thut My Tnh
81
Thc hnh Vi x l
Bi 9 :
Ni dung:
Kho st khi chc nng CCP2/Timer3 capture mode .
Yu cu:
Vit chng trnh s dng chc nng capture mode o tn s v rng xung
ca mch giao ng 555.
B mn K Thut My Tnh
82
Thc hnh Vi x l
TRISC
T3CON
CCP2CON
1 0
X X X X X X 1 X
If CCP2is assigned to RC1
TRISB
x X X X 1 X X x
If CCP2is assigned to RB3
1 0 0 1
P=1
0
1
1
1
0
1
P=2
P=4
P=8
CCPR2H
0 0 0 0 0 1
Timer3
prescaler
divider
th
th
CCPR2L
CCP2 pin
Prescaler
Transfer
P
P = 1, 2, 4, or 8
TMR3L
TMR3H
Fosc/4
(internal clock)
Set
PIR2
X X Xx X X X X
CCP2IF
CCP2IE
PIE2
GIEH
X X Xx X X X X
GIEL
CPP2IP
X X X X X x
INTCON
RCON 1X X Xx X X X X x
IPR2 X X Xx X X X X
R
A
R8
6
B mn K Thut My Tnh
output
555
time
r
RC
1
2
0.1uF
83
Thc hnh Vi x l
Hnh 9-1: Tp thanh ghi s dng trong ch capture mode v mch giao ng 555
init_capture
clrf
bsf
movlw
movwf
movlw
movwf
bsf
bsf
bcf
movlw
movwf
movwf
bsf
bsf
bsf
return
capture_var
TRISC,RC1
0xb8
T3CON
0x05
CCP2CON
RCON,IPEN
IPR2,CCP2IP
PIR2,CCP2IF
0
TMR3H
TMR3L
T3CON,TMR3ON
PIE2,CCP2IE
INTCON,GIEH
; Nap capture_var = 0
; RC1 input
; Prescaler = 8
; Khoi dong T3CON
; Capture every ricing edge
; Khoi dong CCP2CON
; Enable priority level
; high level
; Xoa co ngat
; Nap bo dem
; Timer3 Bat dau dem
; Cho phep CCP2 ngat
; Cho phep ngat toan cuc
khi to chc nng capture, u tin ta phi cu hnh cho PORTC1 l input. Tip
theo khi to h s chia Prescaler thng qua vic cu hnh thanh ghi T3CON. Sau ta
khi dng ch capture bng cch cu hnh thanh ghi CCP2CON v cc thanh ghi ngt.
"p18f4520.inc"
0
start
08h
isr_high
udata
;------- Bien cho capture mode ---------;
decode_var
res
capture_var
res
thuong_so
res
so_bi_chia
res
so_chia
res
so_bcd
res
start
PRG
call
call
B mn K Thut My Tnh
1
1
3
3
3
3
code
init_lcd
init_capture
Thc hnh Vi x l
capture_var
TRISC,RC1
0xb8
T3CON
0x05
CCP2CON
RCON,IPEN
IPR2,CCP2IP
PIR2,CCP2IF
0
TMR3H
TMR3L
T3CON,TMR3ON
PIE2,CCP2IE
INTCON,GIEH
; Nap capture_var = 0
; RC1 input
; Prescaler = 8
; Khoi dong T3CON
; Capture every ricing edge
; Khoi dong CCP2CON
; Enable priority level
; high level
; Xoa co ngat
; Nap bo dem
; Timer3 Bat dau dem
; Cho phep CCP2 ngat
; Cho phep ngat toan cuc
; Xoa co ngat
; Dung dem Timer3
; Ngat lan 1
; = 0xff
; Xoa bo dem
; Timer3 Bat dau dem
call
call
movff
decode_ascii
lcd_print_char
so_bcd+2,decode_var
call
call
decode_ascii
lcd_print_char
movlw
movwf
call
movlw
movwf
call
movlw
movwf
call
bra
''
char
lcd_print_char
'H'
char
lcd_print_char
'z'
char
lcd_print_char
$
isr_high
call
retfie
chia_24bit
clrf
clrf
clrf
tstfsz
bra
tstfsz
bra
tstfsz
bra
return
chia_24_1
movf
subwf
movf
subwfb
movf
subwfb
btfss
bra
incfsz
bra
incfsz
bra
incfsz
bra
chia_24_2
return
;
;
;
;
;
;
;
capture_isr
thuong_so+2
thuong_so+1
thuong_so
so_chia+2
chia_24_1
so_chia+1
chia_24_1
so_chia
chia_24_1
so_chia+2,w
so_bi_chia+2
so_chia+1,w
so_bi_chia+1
so_chia,w
so_bi_chia
STATUS,C
chia_24_2
thuong_so+2
chia_24_1
thuong_so+1
chia_24_1
thuong_so
chia_24_1
hexa_to_bcd
clrf
so_bcd+2
clrf
so_bcd+1
clrf
so_bcd
hexa2 tstfsz
thuong_so+2
bra
hexa5
tstfsz
thuong_so+1
bra
hexa3
tstfsz
thuong_so
bra
hexa4
return
hexa5 decf
thuong_so+2
bra
hexa1
hexa3 decf
thuong_so+1
B mn K Thut My Tnh
86
Thc hnh Vi x l
thuong_so+2
hexa1
thuong_so
thuong_so+1
thuong_so+2
so_bcd+2
so_bcd+2,w
so_bcd+2
so_bcd+2
hexa2
so_bcd+1
so_bcd+1,w
so_bcd+1
so_bcd+1
hexa2
so_bcd
so_bcd,w
so_bcd
hexa2
9.3 Bi tp
Vit chng trnh s dng chc nng capture mode o rng xung mc 1 ca
mch giao ng 555
B mn K Thut My Tnh
87
Thc hnh Vi x l
88
Thc hnh Vi x l
470
RC2
J
9
RC2
BZI
R11
+
22
Valu
e
bcf
movlw
movwf
movlw
movwf
movff
bcf
bcf
movlw
movwf
movlw
movwf
return
TRISC,2
0x80
PR2
0x40
CCPR1L
CCPR1L,PWM_var
CCP1CON,CCP1X
CCP1CON,CCP1Y
0x05
T2CON
0x0f
CCP1CON
; RC2 output
; initialize PWM cycle
; Khoi dong PWM duty cycle
; Cho hien thi ra LCD
; bit 4
; bit 5
; postcale 1:1
; prescale 4, Timer2 ON
; turn buzzer on
khi to chc nng pwm, u tin ta phi cu hnh cho PORTC2 l output. Tip theo khi
to chu k ca PWM thng qua vic cu hnh thanh ghi PR2. Sau ta khi to duty cycle ca
xung pwm bng cch cu hnh thanh ghi CCPR1L.
p=18f4520
"p18f4520.inc"
org
bra
0x000000
start
udata
;------- Bien cho PWM ---------;
decode_var
res
PWM_var
res
start
call
call
movff
swapf
call
call
movff
call
call
goto
B mn K Thut My Tnh
; reset vector
1
1
init_lcd
init_pwm
PWM_var,decode_var
decode_var
decode_ascii
lcd_print_char
PWM_var,decode_var
decode_ascii
lcd_print_char
$
89
Thc hnh Vi x l
LVDE
N
IRVS
T
LVD
Reserved
0 0 0 0
0 0 0 1
0 0 1 0
0
0
0
0
0
1
1
1
1
0
1
1
1
1
0
0
0
0
1
0
0
1
1
0
0
1
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1 0
1 0
11
1 1
0
1
0
1
2.0 V 2.12 V
2.2V 2.33 V
2.4 V 2.54 V
2.5 V 2.65 V
2.7V 2.86 V
2.8V 2.97 V
3.0 V 3.18 V
3.3 V 3.50 V
3.5 V 3.71 V
3.6V 3.82 V
3.8 V 4.03 V
4.0 V 4.24 V
4.2V 4.45 V
4.5 V 4.77 V
External input on RA5/LVDIN pin
VDD
LVD circuitry
VDD
VMUX
RA
RA5/LVDIN
External
. input
pin
analog multiplexer
Select
Analog comparator
Set LVDIF IF V MUX < VIR
Clear LVDIF in software
LVDCON
RB
1.2V
internal
reference
VIR
set
5
PIR2
High-priority
interrupt
IPE2
PIE
2
TRISA
X X
X X X X X
LVDI
F
Set (for input) to use
LVDIF
external input
Low-priority
interrupt
GIEH
INTCON
INTCO
N
GIEL
X X X X X X
B mn K Thut My Tnh
PIE2 X X X X X
X X
RCON 1 X X X X X X X
RCO
N
90
LVDIP
X
X
X
X X
IPR2
X X
Thc hnh Vi x l
movlw
movwf
bsf
bsf
bsf
bsf
bcf
movlw
movwf
bsf
bsf
return
B'11111001'
ADCON1
TRISA,RA0
TRISA,RA5
RCON,IPEN
IPR2,LVDIP
PIR2,LVDIF
B'0011111'
LVDCON
PIE2,LVDIE
INTCON,GIEH
0
goto
org
goto
start
08h
isr_high
udata
PRG
start
LVD_isr
`
isr_high
call
movlw
movwf
call
movlw
movwf
call
movlw
movwf
call
movlw
movwf
call
rcall
bra
code
init_lcd
'L'
char
lcd_print_char
'V'
char
lcd_print_char
'D'
char
lcd_print_char
':'
char
lcd_print_char
init_LVD
$
bcf
bcf
movlw
movwf
call
bcf
sleep
bra
PIR2,LVDIF
INTCON,GIEH
'R'
char
lcd_print_char
PIE2,LVDIE
call
retfie
LVD_isr
; Xuat ra LCD
; Cm LVD
10.4 Bi tp
a) Vit chng trnh xut ra LED 256 mc sng, thay i sau 1 giy v xut gi tr mc
sng ln LCD.
b) Vit chng trnh s dng chc nng LVD a vi iu khin vo ch sleep khi
in p ngoi nh hn hay bng 1,2V.
c) Sa chng trnh thc hin ngt LVD khi in p ngun nh hn 2,7V.
B mn K Thut My Tnh
91
Thc hnh Vi x l