Professional Documents
Culture Documents
Bao Cao VI Xu Ly
Bao Cao VI Xu Ly
Bao Cao VI Xu Ly
1. Thí nghieäm 1: Vieát chöông trình thöïc hieän ñoïc lieän tuïc traïng thaùi nuùt nhaán ñöôïc
noái ñeán P1.0 vaø hieån thò ra Led ñöôïc noái taïi chaân P1.1 ( bit thöù 1 cuûa port 1)
ORG 2000H
MAIN:
MOV C,P1.0
MOV P1.1,C
SJMP MAIN
END
1. Khi nhaán coù 2 ñeøn saùng cuøng luùc: khi mình nhaán P1.0 ( ñeøn saùng) thì döõ lieäu töø P1.0
ñöôïc chuyeån qua P1.1 thoâng qua côø C, thôøi gian chuyeån quaù nhanh ( thôøi gian thöïc hieän
leänh laø vaøi micro giaây) => ta nhìn seõ thaáy 2 ñeøn cuøng saùng/taét cuøng luùc.
2. Caùc bit cuûa 4 port ñöôïc söû duïng trong thì nghieäm treân: Vì EME-MC8 thieát keá hoat ñoäng ôû
cheá ñoä 3 bus, neân port 0: bus döõ lieäu, port 2: bus ñòa chæ, P3.0, P3.1, P3.6, P3.7 duøng laøm
bus ñieàu khieån. Caùc chaân coøn laïi cuûa caùc port ñeàu coù theå duøng trong thí nghieäm naøy.
1. Thí nghieäm 2: Vieát chöông trình taïo xung vuoâng 1Hz ñöôïc noái ñeán chaân P1.0 vôùi taàn
soá dao ñoäng duøng trong heä thoáng laø 11.059MHz
ORG 2000H
LAP:
CPL P1.0
ACALL DL
SJMP LAP
DL:
MOV R5,#10
L2:
MOV R6,#100
L1:
MOV R7,#250
DJNZ R7,$
DJNZ R6,L1
DJNZ R5,L2
RET
END
Duøng voøng laëp ñeå taïo treã 0.5s, vôùi giaù trò naïp cho R5, R6, R7 nhö treân tính theo coâng
thöùc gaàn ñuùng laø t=2*m*n*p
Vôùi giaù trò naïp: R5 = 10, R6 = 200, R7 = 250 ñeå giaûm sai soá.
b. Duty cycle: 30% - taàân soá 0.5Hz
ORG 2000H
LAP:
MOV R1,#3
MOV R2,#7
CLR P1.0
LAP1:
ACALL DL
DJNZ R1,LAP1
SETB P1.0
LAP2:
ACALL DL
DJNZ R2,LAP2
SJMP LAP
DL:
L2: MOV R5,#4
L1: MOV R6,#200
MOV R7,#250
DJNZ R7,$
DJNZ R6,L1
DJNZ R5,L2
RET
END
1. Thí nghieäm 3:
ORG 2000H
MAIN:
CPL P1.0
ACALL DL500
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R7,#10
LOOP:
MOV TH0,#HIGH(-50000) ; giaù trò naïp laø 50000*10 = 500000us = 0.5s
MOV TL0,#LOW(-50000)
SETB TR0
CLR TF0
CLR TR0
DJNZ R7,LOOP
RET
END
ORG 2000H
LJMP MAIN
ORG 000BH
LJMP ISRT0
MAIN:
MOV TMOD,#01H
SETB TF0
MOV IE,#82H
MOV R7,#11
SJMP $
ISRT0:
DJNZ R7,NAP
CPL P1.0
MOV R7,#10
SJMP KT
NAP:
CLR TR0
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
KT: RETI
END
4. Thí nghieäm 4: Vieát chöông trình laøm cho led noái ñeán chaân P1.0 chôùp taét vôùi taàn
soá coù theå taêng hoaëc giaûm baèng caùch nhaán nuùt noái ñeán chaân P1.1 hoaëc P1.2. Chu kì
chôùp taét trung bình laø 1s
ORG 2000H
MAIN:
CPL P1.0
MOV A,#10
JNB P1.1,KT_GIAM
DEC A ;Khi nhaán P1.1 thì f taêng => Chu kyø giaûm => giaûm R7
MOV R7,A
KT_GIAM:
JNB P1.2,LAP
INC A
MOV R7,A
LAP:
ACALL DL500
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV TL0,#LOW(-25000)
SETB TR0
CLR TF0
CLR TR0
RET
END
BAØI TAÄP:
1. Vieát chöông trình thöïc hieän coång logic: XOR 2 ngoõ vaøo
ORG 2000H
MAIN:
CLR A
MOV C,P1.0
MOV ACC.0,C
MOV R0,A
MOV C,P1.1
MOV ACC.0,C
XRL A,R0
MOV C,ACC.0
MOV P1.5,C
SJMP MAIN
END
ORG 2000H
MAIN:
CLR A
MOV DPTR,#TABLE
MOV R7,#8
LAP:
MOVC A,@A+DPTR
ACALL DL500
INC A
DJNZ R7,LAP
SJMP MAIN
DL500:
MOV TMOD,#01H
MOV R6,#10
LOOP:
MOV TL0,#LOW(-50000)
SETB TR0
CLR TF0
CLR TR0
DJNZ R6,LOOP
RET
TABLE:
DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H,0FFH
END
3. Vieát chöông trình thöïc hieän pheùp logic: P1.5 = (P1.0 XOR P1.1) AND
P1.2)
ORG 2000H
MAIN:
CLR A
MOV C,P1.0
MOV ACC.0,C
MOV R0,A
MOV C,P1.1
MOV ACC.0,C
XRL A,R0
MOV ACC.0,C
ANL A,R0
MOV C,ACC.0
MOV P1.5,C
SJMP MAIN
END
1. Thí nghieäm 1:Vieát chöông trính thöïc hieän boä ñeám töø 0->9 vaø hieån
thò treân led 7 ñoaïn, moãi laàn caùch nhau 2s
ORG 2000H
MAIN:
MOV R7,#10
MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2S
MOV DPTR,#0000H
MOVX @DPTR,A
INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2S:
MOV R6,#40
MOV TMOD,#01H
LAP:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
DJNZ R6,LAP
RET
TABLE:
DB 70H,71H,72H,73H,74H,75H,76H,77H,78H,79H
END
2. Thí nghieäm 2:
a. Vieát chöông trình hieån thò giaù trò 1234 leân led 7 ñoaïn
ORG 2000H
MAIN:
MOV R7,#4
MOV R5,#0
LOOP:
MOV DPTR,#TABLE
MOV A,R5
MOVC A,@A+DPTR
ACALL DL2MS
MOV DPTR,#0000H
MOVX @DPTR,A
INC R5
DJNZ R7,LOOP
SJMP MAIN
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
TABLE:
END
b. Thay ñoåi chöông trình ñeå giaù trò 1234 coù theå hieån thò thoâng qua maõ
BCD neùn chöùa trong caëp thanh ghi R7 & R6,Bieát R7 laø MSB
ORG 2000H
MAIN:
MOV R7,#12H
MOV R6,#34H
MOV A,R7
ANL A,#0F0H
SWAP A
ADD A,#70H
MOV R1,A ; R1 chöa gía trò 71H töông öùng vôùi giaù trò 1 ñöôc xuaát ra led 1
MOV A,R7
ANL A,#0FH
ADD A,#0B0H
MOV R2,A ; R2 chöa giaù trò 0B2H töông öùng vôùi giaù trò 1 ñöôïc xuaát ra led
2
MOV A,R6
ANL A,#0F0H
SWAP A
ADD A,#0D0H
MOV R3,A ; R3 chöa giaù trò 0D3H töông öùng vôùi giaù trò 1 ñöôïc xuaát ra led
3
MOV A,R6
ANL A,#0FH
ADD A,#0E0H
MOV R4,A ; R4 chöa giaù trò 0E4H tröông öùng vôùi giaù trò 1 ñöôc xuaát ra led
4
LAP:
MOV DPTR,#0
MOV A,R1
MOVX @DPTR,A
ACALL DL2MS
MOV A,R2
MOVX @DPTR,A
ACALL DL2MS
MOV A,R3
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
3. Thí nghieäm 3: Vieát chöông trình hieån thò giaù trò nhò phaân trong thanh ghi R7 leân led
7 ñoaïn
ORG 2000H
MAIN:
MOV B,#10
MOV A,R7
DIV AB
MOV B,#10
DIV AB
LAP:
MOV DPTR,#0
MOV A,R2
ADD A,#0B0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R3
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R4
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
SJMP LAP
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
BAØI TAÄP:
1. Ñeám soá töø 0-99 (giaû söû <100) xuaát ra led 7 ñoaïn. Moãi laàn xuaát
caùch nhau
ORG 2000H
MAIN:
MOV DPTR,#0
MOV R7,#0
MOV R6,#0
NHAY:
INC R7
MOV R7,#0
INC R6
SKIP:
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL2MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
SJMP NHAY
DL2MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-2000)
MOV TL0,#LOW(-2000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
2. Vieát chöông trình ñeám töø 0-60 roài laëp laïi, moãi laàn ñeám caùch nhau 1s
ORG 2000H
MOV R6,#0
MOV R7,#0
LOOP1:
LOOP:
MOV DPTR,#0
MOV A,R7
ADD A,#0E0H
MOVX @DPTR,A
ACALL DL5MS
MOV A,R6
ADD A,#0D0H
MOVX @DPTR,A
ACALL DL5MS
DJNZ R5,LOOP
INC R7
CJNE R7,#0AH,LOOP1
MOV R7,#0
INC R6
CJNE R6,#6,LOOP1
MOV R6,#0
SJMP LOOP1
DL5MS:
MOV TMOD,#01H
MOV TH0,#HIGH(-5000)
MOV TL0,#LOW(-5000)
SETB TR0
JNB TF0,$
CLR TF0
CLR TR0
RET
END
ORG 2000H
MAIN:
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY1
SJMP MAIN
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'E'
ACALL WRITETEXT
MOV A,#'L'
ACALL WRITETEXT
MOV A,#' 'O’
ACALL WRITETEXT
MOV A,#'’W'
ACALL WRITETEXT
MOV A,#'’O'
ACALL WRITETEXT
MOV A,#'’R'
ACALL WRITETEXT
MOV A,#'’L'
ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
END
BAØI TAÄP:
Viết chương trình hiển thị chuỗi: “DHBK TPHCM” chạy treân maøn hình, khi hết
maøn hình thì chạy ngược lại, lặp lại quaù trình treân
ORG 2000H
MAIN:
MOV DPTR,#8000H
MOV R1,#6
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY
LAP1:
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP1
MOV R1,#6
LAP:
ACALL WRITECOM
ACALL DELAY
DJNZ R1,LAP
MOV R1,#6
SJMP LAP1
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
MOV A,#'D'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'B'
ACALL WRITETEXT
MOV A,#'K'
ACALL WRITETEXT
MOV A,#' '
ACALL WRITETEXT
MOV A,#'T'
ACALL WRITETEXT
MOV A,#'P'
ACALL WRITETEXT
MOV A,#'H'
ACALL WRITETEXT
MOV A,#'C'
ACALL WRITETEXT
MOV A,#'M'
ACALL WRITETEXT
RET
; ===============================================Chương trình DELAY
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
DELAY:
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
END
ORG 2000H
MAIN:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
MOV DPTR,#TABLE
LAP:
CLR A
MOVC A,@A+DPTR
INC DPTR
ACALL OUT_CHAR
JNZ LAP
SJMP $
JNB TI, $
CLR TI
MOV SBUF, A
RET
TABLE:
2. Thí nghiệm 2: Nhận kí tự từ port nối tiếp hiển thị ra LCD (tốc ñộ port chọn
laø 9600pbs)
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN:
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
DJNZ R4,LAP1
MOV R4,#16
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL WRITE_TEXT
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
UART_INIT:
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
LCD_INIT:
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END
3. Thí nghiệm 3: Nhận kí tự từ port nối tiếp hiển thị ra LCD ñồng thời phaùt ra
lại port nối tiếp (tốc ñộ port chọn laø 9600pbs)
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16 ; gaùn R4 = 16 ñể nhập chữ đñủ treân haøng 1 rồi xuống haøng 2
LAP1:
ACALL IN_CHAR
ACALL WRITE_TEXT
ACALL OUT_CHAR
DJNZ R4,LAP1
MOV R4,#16
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL WRITE_TEXT
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR: ; phaùt kí tự ra port nối tiếp
CLR TI
MOV SBUF, A
RET
JNB RI, $
CLR RI
MOV A, SBUF
RET
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
MOV R7, #100
DEL1:
MOV R6, #250
DJNZ R6, $
DJNZ R7, DEL1
RET
WRITE_TEXT: ; ghi kí tự ra LCD
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
END
BAØI TAÄP:
Viết chương trình nhập kí töï töø baøn phím veà laøm coâng vieäc sau ñaây:
a. Kiểm tra xem kí tự nhận ñược laø A-Z hoặc a-z thì hiển thị leân LCD
b. Kiểm tra xem kí tự nhận nhaán ñöôïc số từ 0-9 thì hiển thị qua led 7 ñoạn
c. Nếu nhấn phím Enter thì xuống haøng maõ ASCII 13H
d. Nếu nhấn phím ESC thì xoùa maøn hình LCD maõ ASCII 27H
ORG 2000H
EN BIT P3.4
RS BIT P3.5
MAIN:
MOV DPTR, #8000H
ACALL LCD_INIT
ACALL UART_INIT
ACALL CLEAR
LOOP:
MOV R4,#16
LAP1:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP1
MOV R4,#16
ACALL WRITE_COM
LAP2:
ACALL IN_CHAR
ACALL NHANKYTU
ACALL OUT_CHAR
DJNZ R4,LAP2
ACALL CLEAR
SJMP LOOP
MOV SCON,#52H
MOV TMOD,#20H
MOV TH1,#-3
SETB TR1
RET
OUT_CHAR:
CLR TI
MOV SBUF, A
RET
IN_CHAR:
JNB RI, $
CLR RI
MOV A, SBUF
RET
MOV A,#38H
ACALL WRITE_COM
MOV A,#0EH
ACALL WRITE_COM
MOV A,#06H
ACALL WRITE_COM
RET
CLEAR:
MOV A,#01H
ACALL WRITE_COM
RET
WAIT_LCD:
MOV R7, #100
DEL1:
RET
WRITE_TEXT:
ACALL WAIT_LCD
SETB RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
WRITE_COM:
ACALL WAIT_LCD
CLR RS
MOVX @DPTR, A
SETB EN
CLR EN
RET
;=========Chương trình con kiểm tra kí tự nhận ñược từ Port nối tiếp veà xử lí theo ñề baøi
NHANKYTU:
PUSH ACC
CJNE A,#13,SKIP1
ACALL WRITE_COM
SJMP THOAT
SKIP1:
CJNE A,#27,TIEP
ACALL CLEAR
SJMP THOAT
;............................................................................................................ki ểm tra 0-9
TIEP:
CJNE A,#30H,$+3
JNC KTRA3
SJMP THOAT
KTRA3:
CJNE A,#3AH,$+3
JC XUAT_LED
CJNE A,#41H,$+3
JNC KTRA1
SJMP THOAT
KTRA1:
CJNE A,#5BH,$+3
;............................................................................................................ki ểm tra a-z
CJNE A,#61H,$+3
JNC KTRA2
SJMP THOAT
KTRA2:
CJNE A,#7BH,$+3
JC XUAT_LCD
XUAT_LED:
PUSH DPH
PUSH DPL
MOV DPTR,#0
ANL A,#0FH
ADD A,#0E0H
MOVX @DPTR,A
ACALL DELAY_2MS
POP DPL
POP DPH
SJMP THOAT
XUAT_LCD:
ACALL WRITE_TEXT
THOAT:
POP ACC
RET
DELAY_2MS:
MOV R1,#4
LAP9:
MOV R2,#250
DJNZ R2,$
DJNZ R1,LAP9
RET
END
BAØI 5: THÍ NGHIỆM ÑIEÀU KHIEÅN ADC
1. Thí nghieäm 1: Vieát chöông trình thöïc hieän ñoïc ñieän aùp cuûa bieán trôû
treân keânh 0 vaø hieån thò ra led 7 ñoaïn.
ORG 2000H
MAIN:
MOV A,#0
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV DPTR,#0000H
MOV B,#10
DIV AB
MOV R7,B
MOV B,#10
DIV AB
ORL A,#0B0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,B
ORL A,#0D0H
MOVX @DPTR,A
ACALL DELAY_1MS
MOV A,R7
ORL A,#0E0H
MOVX @DPTR,A
ACALL DELAY_1MS
SJMP MAIN
DELAY_100US:
MOV R6,#200
DJNZ R6,$
RET
DELAY_1MS:
MOV R6,#5
LOOP:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LOOP
RET
END
2. Thí nghieäm 2: Vieát chöông trình ñoïc ñieän aùp cuûa keânh 0 vaø hieån thò
leân LCD
ORG 2000H
MAIN:
MOV A,#0
MOVX @DPTR,A
ACALL DELAY_100US
MOVX A,@DPTR
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV DPTR,#8000H
ACALL CLEAR
ACALL INIT_LCD
ACALL HIEN_CHU
ACALL DELAY1
SJMP MAIN
INIT_LCD:
MOV A,#38H
ACALL WRITECOM
MOV A,#0EH
ACALL WRITECOM
MOV A,#06H
ACALL WRITECOM
RET
CLEAR:
MOV A,#01H
ACALL WRITECOM
RET
WRITECOM:
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_50MS
RET
WRITETEXT:
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY2
RET
HIEN_CHU:
ACALL WRITETEXT
MOV A,B
ACALL WRITETEXT
MOV A,R2
ACALL WRITETEXT
RET
DELAY_50MS:
MOV R3,#100
LOOP1:
MOV R7,#250
DJNZ R7,$
DJNZ R3,LOOP1
RET
MOV R6,#3
LOP1:
MOV R5,#200
LOP:
MOV R4,#250
DJNZ R4,$
DJNZ R5,LOP
DJNZ R6,LOP1
RET
DELAY2:
MOV R3,#1
LOOP2:
MOV R7,#50
DJNZ R7,$
DJNZ R3,LOOP2
RET
DELAY_100US:
MOV R6,#200
DJNZ R6,$
RET
END
1. Thí nghieäm 1: Vieát chöông trình hieån thò kí töï A leân LED ma traän.
ORG 2000H
LOOP:
MOV A,#0
MOV R7,#8
LAP:
MOV R4,A
ACALL XUAT_COT
MOV A,R4
MOV DPTR,#HANG
MOVC A,@A+DPTR
ACALL DL2MS
MOV A,R4
INC A
DJNZ R7,LAP
SJMP LOOP
XUAT_COT:
MOVX @DPTR,A
RET
XUAT_HANG:
RET
DL2MS:
MOV R6,#4
LAP1:
MOV R5,#250
DJNZ R5,$
DJNZ R6,LAP1
RET
END
2. Thí nghieäm 2: Vieát chöông trình chaïy chöõ A B töø phaûi sang traùi hieån
thò leân LED ma traän
ORG 2000H
TT:
MOV R4,#10
MOV R0,#0
MOV DPTR,#CHAR
MOV R5,#24
LOOP1:
MOV R2,DPH
MOV R3,DPL
LOOP:
MOV DPH,R2
MOV DPL,R3
MOV R1,#8
MOV A,#00000001B
LAP:
ACALL HT_COT
PUSH ACC
CLR A
MOVC A,@A+DPTR
ACALL HT_HANG
INC DPTR
POP ACC
RL A
DJNZ R1, LAP
DJNZ R4,LOOP
MOV R4,#10
INC R0
MOV A,R0
MOV DPTR,#CHAR
ADD A,DPL
MOV DPL,A
DJNZ R5,LOOP1
SJMP TT
CHAR:
DB 0EEH, 0EDH, 03H, 0FFH, 0FFH,00H, 76H, 76H, 76H, 89H, 0FFH, 0FFH,
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
HT_COT:
PUSH DPH
PUSH DPL
MOV DPTR,#0C000H
MOVX @DPTR,A
POP DPL
POP DPH
RET
HT_HANG:
PUSH DPH
PUSH DPL
MOV DPTR,#0A000H
MOVX @DPTR,A
ACALL DELAY_1MS
POP DPL
POP DPH
RET
DELAY_1MS:
MOV R7,#5
DL:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DL
RET
END
1. Thí nghieäm 1: Vieát chöông trình cho pheùp ñoäng cô chaïy theo chieàu
thuaän trong voøng 2s, nghæ 2s, chaïy theo chieàu ngöôïc 2s, nghæ 2s vaø laëp
laïi.
ORG 2000H
MAIN:
MOVX @DPTR,A
ACALL DL2S
MOV A,#00H ;ñoäng cô döøng
MOVX @DPTR,A
ACALL DL2S
MOVX @DPTR,A
ACALL DL2S
MOV A,#00H
MOVX @DPTR,A
ACALL DL2S
SJMP LOOP
DL2S:
MOV R5,#40
LAP1:
MOV R6,#100
LAP:
MOV R7,#250
DJNZ R7,$
DJNZ R6,LAP
DJNZ R5,LAP1
RET
END
2. Thí nghieäm 2: Vieát chöông trình ñieàu khieån ñoäng cô vôùi phöông phaùp
PWM, trong ñoù thôøi gian “baät” cuûa xung laø 50% chu kyø.
ORG 2000H
LJMP MAIN
LJMP ISRT0
LJMP ISRT1
MAIN:
MOV A,#01H
MOVX @DPTR,A
MOV TMOD,#11H
SETB TF0
SJMP $
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-500)
MOV TL1,#LOW(-500)
SETB TR1
RETI
CLR ACC.0
CLR ACC.1
MOVX @DPTR,A
RETI
END
3. Thí nghieäm 3: Vieát chöông trình ñieàu khieån ñoäng cô vôi phöông phaùp
PWM, trong ñoù thôøi gian “baät” cuûa xung laàn löôït laø 20%, 50%, 80% chu
kyø. Moãi ñoä roäng xung caùch nhau 5s. Qui trình ñöôïc laëp laïi lieân tuïc.
ORG 2000H
LJMP MAIN
ORG 200BH
LJMP ISRT0
ORG 201BH
LJMP ISRT1
MAIN:
MOV R7,#250
MOV R6,#20
MOV R3,#0
MOV DPTR,#0E000H
MOV A,#01H
MOVX @DPTR,A
MOV TMOD,#11H
SETB TF0
MOV IE,#8AH
SJMP $
ISRT0:
CJNE R3,#0,NHAY
DJNZ R7,LOP
DJNZ R6,LOP1
INC R3
MOV R6,#20
MOV R7,#250
SJMP LOP2
LOP1:
MOV R7,#250
LOP:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-200)
MOV TL1,#LOW(-200)
SETB TR1
SJMP THOAT
NHAY:
CJNE R3,#1,NHAY1
DJNZ R7,LOP2
DJNZ R6,LOP3
INC R3
MOV R6,#20
MOV R7,#250
SJMP LOP2
LOP3:
MOV R7,#250
LOP2:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-500)
MOV TL1,#LOW(-500)
SETB TR1
SJMP THOAT
NHAY1:
DJNZ R7,LOP4
DJNZ R6,LOP5
MOV R3,#0
MOV R6,#20
MOV R7,#250
SJMP THOAT
LOP5:
MOV R7,#250
LOP4:
SETB ACC.0
CLR ACC.1
MOVX @DPTR,A
CLR TR0
MOV TH0,#HIGH(-1000)
MOV TL0,#LOW(-1000)
SETB TR0
CLR TR1
MOV TH1,#HIGH(-800)
MOV TL1,#LOW(-800)
SETB TR1
SJMP THOAT
THOAT:
RETI
ISRT1:
CLR ACC.0
CLR ACC.1
MOVX @DPTR,A
RETI
END
4. Thí nghieäm 4: Vieát chöôg trình thöïc hieän vieäc taêng hoaëc giaûm daàn
toác ñoä ñoäng cô nhôø hai nuùt nhaán P1.4 vaø P1.5. Khi khoâng nhaán nuùt,
toác ñoä ñoäng cô khoâng ñoåi. Khi nuùt P1.4 ñöôïc nhaán vaø giöõ thì toác ñoä
ñoäng cô taêng daàn. Khi nuùt P1.5 ñöôïc nhaán vaø giöõ thì toác ñoä ñoäng cô
giaûm daàn.
ORG 2000H
MAIN:
MOV DPTR,#0E000H
MOV R3,#5
MOV R4,#5
KT:
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
NHAY1:
INC R3
DEC R4
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
NHAY2:
INC R4
DEC R3
SKIP2:
MOV A,#01H
MOVX @DPTR,A
ACALL DLC
MOV A,#00H
MOVX @DPTR,A
ACALL DLT
SJMP KT
DLC:
MOV R6,03H
LAP1:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LAP1
RET
DLT:
MOV R6,04H
LAP:
MOV R5,#100
DJNZ R5,$
DJNZ R6,LAP
RET
END
BAØI 1: THÍ NGHIỆM VÔÙI LED ÑÔN
1. Thí nghieäm 1: Vieát chöông trình chôùp taét LED ñöôïc noái ñeán chaân RC2
cuûa PIC 16F690 vôùi taàn soá chôùp taét laø 1Hz.
#include <16F690.h>
#use fast_io(c)
void main()
set_tris_C(0x00);
output_C(0x00);
while(1)
{
output_high(pin_C0);
delay_ms(500);
output_low(pin_C0);
delay_ms(500);
}
1. Thí nghieäm 2: Vieát chöông trình thöïc hieän maïch LED chaïy ñöôïc noái ñeán
4 LED port C cuûa PIC 16F690 nhö sau, bieát thôøi gian giöõa caùc traïng thaùi
S (saùng) vaø T (taét) la 0.5s: STTT – TSTT – TTST – TTTS – STTT - .....
#include <16F690.h>
#use fast_io(c)
void main()
int i;
set_tris_C(0x00);
output_C(0x00);
while(1)
{
while(i<4)
{
port_C = a[i];
delay_ms(500);
i++;
}
i = 0;
}
1. Thí nghieäm 3: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Giaù trò maïch ñeám taêng leân 1 ñôn vò caùch nhau 1s.
#include <16F690.h>
#use fast_io(c)
int const a[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
void main()
{
int i;
set_tris_C(0x00);
output_C(0x00);
while(1)
{
while(i<16)
{
output_C(a[i]);
delay_ms(1000);
i++;
}
i = 0;
}
}
1. Thí nghieäm 4: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Maïch chæ ñeám khi SW1 ñöôïc nhaán.
#include <16F690.h>
#use fast_io(C)
void main()
int i;
set_tris_C(0x00);
output_C(0x00);
while(1)
{
while(i<16)
{
if (input(pin_a0)==0)
{
output_C(a[i]);
delay_ms(1000);
i++;
}
}
i = 0;
}
}
1. Thí nghieäm 5: Vieát chöông trình thöïc hieän maïch ñeám leân baét ñaàu töø 0
ñeán 15, keát quaû xuaát ra 4 LED ñôn ñöôïc noái ñeán port C cuûa PIC16F690.
Trong quaù trình ñeám neáu SW1 ñöôïc nhaán thì seõ thöïc hieän ñeám ngöôïc taïi
giaù trò ñoù veà 0. Sau ñoù laïi thöïc hieän ñeám leân töø 0.
#include <16F690.h>
#use fast_io(c)
#use fast_io(a)
void main()
{
int i;
set_tris_C(0x00);
output_C(0x00);
while(1)
{
while(i<16)
{
output_C(a[i]);
delay_ms(1000);
if (input(pin_a0)==0)
{
lap: if (i==0)
{
while(i<16)
{
output_C(a[i]);
delay_ms(1000);
i++;
}
}
else //i>0
{
while(i!=0)
{
output_c(a[i]);
delay_ms(500);
i--;
}
}
}
}
i = 0;
}
1. Thí nghieäm 1: Vieát chöông trình thöïc hieän maïch ñeám leân töø 0 ñeán F (soá
Hex), keát quaû xuaát ra LED 7 ñoaïn, giaù trò boä ñeám taêng leân 1 ñôn vò
caùch nhau moãi 0.5s
#include<16F690.h>
#use fast_io(c)
#use fast_io(a)
0x01,0x02, 0x05,0x03,0x03} ;
int const c[16] = {0x0f,0x01,0x06,0x03,0x09,0x0b,0x0f,0x01,0x0f,0x0b,0x0d,
0x0f,0x0e, 0x07,0x0e,0x0c} ;
void main()
{
int i = 0;
set_tris_c(0);
set_tris_a(0);
while(1)
{
while(i<16)
{
output_c(c[i]);
output_a(a[i]);
delay_ms(500);
i++;
}
i = 0;
}
}
1. Thí nghieäm 1: Vieát chöông trình ñoïc giaù trò ñieän aùp cuûa bieán trôû RP1
vaø xuaát möùc ñieän aùp töông öùng vôùi giaù trò ñieän aùp ñoïc ñöôïc ra LED
(duøng ADC vôùi ñoä phaân giaûi 10 bits) ñöôïc cho bôûi baûng sau:
Möùc (ngoõ ra boä ADC) Giaù trò hieån thò treân LED
0 – 63 0
64 – 127 1
128 – 191 2
... ...
832 – 895 D
896 – 959 E
960 – 1023 F
#include <16f690.h>
#include <math.h>
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(a)
void main()
{
int16 adc;
set_tris_c(0);
set_tris_a(1);
setup_adc(adc_clock_internal);
setup_adc_ports(sAN0);
set_adc_channel(0);
delay_us(10);
while(1)
{
adc = read_adc();
adc = adc/16;
output_c(adc);
}
1. Thí nghieäm 2: Vieát chöông trình ñoïc giaù trò ngoõ ra ADC vôùi ñoä phaân
giaûi 10 bits duøng ñeå ñieàu khieån thôøi gian chôùp taét LED ñôn ñöôïc noái
ñeán chaân RC0 cuûa PIC 16F690.
#include <16f690.h>
#include <math.h>
#use delay(clock = 4000000)
#use fast_io(c)
#use fast_io(a)
void main()
{
int adc;
set_tris_c(0);
set_tris_a(1);
setup_adc(adc_clock_internal);
setup_adc_ports(sAN0);
set_adc_channel(0);
delay_us(10);
while(1)
{
adc = read_adc();
adc = adc*4;
output_c(0xff);
delay_ms(adc+100);
output_c(0x00);
delay_ms(adc+100);
}