Báo Cáo Thực Tập Tốt Nghiệp –
LỜI CẢM ƠN
! " #$ % &
ThS.Phạm Thành Nam!'()#*+,-%#./01
2# 3
4562(#,%%768
"19:# ;<=&>6Đinh Quý Long,
Nguyễn Thế Dũng#*&# ;+&?6#@"01#A2
B4(+18C,,<"D3
Trang 1
Thái Nguyên, tháng 3 năm 2015
Báo Cáo Thực Tập Tốt Nghiệp –
MỤC LỤC
Trang 2
Báo Cáo Thực Tập Tốt Nghiệp –
DANH SÁCH CÁC HÌNH VẼ
Trang 3
Báo Cáo Thực Tập Tốt Nghiệp –
DANH SÁCH CÁC BẢNG BIỂU
Trang 4
Báo Cáo Thực Tập Tốt Nghiệp –
LỜI NÓI ĐẦU
(;E+# ;<#*F"C2@;E+
GGH3%@# ;<I;J=&> #@1D
1-@1K6I#*(LM# ;<&/1D
1%NO#P6GQG(B=GH3
R# ;<;OI11;E+# ;<9I11
&/1<3S,&>G"6,<6;B
# ;<&# B"=!RQ1LBDC(
3<#1D:M(B";I('(
= &"H(BT(L%./19:
3R,< G&:L&/GU:
N# ;B";I(L12GQGL1+1<
#GQG3
VW1X:Q2#*##LCL#.# YTìm hiểu, khảo
sát, xây dựng bài thực hành chuyển đổi ADC trên modul MMC-100 với 8051
NG:,DGH"G&ZZ![\\&&
/GU:B";I(B(3
@G# ]^Y
[Y_C( `\a[3
bY,< ;:# ;<#(JZZ![\\3
^Y:<#_cd3
C,:# U9 LBI6+#?
>;L#II1X%3
Trang 5
Em chân thành cảm ơn!
Thái Nguyên, tháng 3 năm 2015
Báo Cáo Thực Tập Tốt Nghiệp –
Trang 6
Báo Cáo Thực Tập Tốt Nghiệp –
CHƯƠNG 1: TỔNG QUAN VỀ 8051
e/ # ;<`\a[6B#]W06D
J3f/ O&+1,# ;<`\a[3
1.1 Giới thiệu chung
g,[3[hc`ijab
c`ijab&1"%`\a[IklZ"1&%@/m&(B3n"%
WS?1DGH(,%@/m&(BI<#?I(
3do"&#<G5c`ijab1IL%.&+1,nklZ_?%@
/m&(B;#LL%.I(klZ,%@/m&(B#?I(%N
L%.&+1,nklZ3
1.2 Sơ đồ giải thuật
Z$G5"M(`\a[# I;<#IK;(6p
(dhn6GKGP1qmn6GS1;I
Trang 7
Báo Cáo Thực Tập Tốt Nghiệp –
#Arr,0# Is\DJ;(6(htl6
#kd6uk6#.(-6GO&T31&>N@B4*W1
@1"%`\a[Ib\/B4_(SDGH"
W13",L1<SB=GHS1#IK
s\/bdhn"(-+11"%3
1.2.1 Giới thiệu về họ MSC-51
Zj!a[&h# ;<G*h2&BW3h"%<
&`\a[`\^[3B1vZj!a[S?1ODGH#
;<3R=&>"w2B4FW0GO&K#?:
%N L#@WGO&("kcZ@3
c`ijabW1O#$SvB(Ys'w%@/-#I
< I( &+1 , ( xnklZy6 [b` w2 kcZ6 ^b # htl6 b
hZktlzk[{w62TIW0bDT6[G(#@
&;G(#@l!ghn3"#I6c`ijab#?L;L/&
o#@#LD;B4|?(1 I<&:(
OL#@L;BW6L#@xhdrZldyB}GXnz;
U1~1kcZ62t2614L14L1H#@3
L#@BWB}&@GkcZOB}2%@G(#@&;
J#@M(WODJ;#L;k2B243
1.2.2 Sơ đồ khối của AT89S52
Trang 8
Báo Cáo Thực Tập Tốt Nghiệp –
g,[3bj#];4
1.2.3 Sơ đồ chân của AT89S52
g,[3^j#]c`ijab
Trang 9
Báo Cáo Thực Tập Tốt Nghiệp –
1.2.4 Chức năng các chân của AT89S52
c`ijabIWs\IDJ#W+13#I
IbsIGH;~1xIo([IbDJy6|GI<
#@#W+1$## ;<$&1
M(%BGO&%B#.(-3
w[3[DJM(c`ijab
Các port:
Port 0:n\&1I(DJF^b!^iM(c`ijab3
L;LAK;G5%@/F@6IIDJ#
hl34/L;LA&/I%@/F@6I#?;L?1O(%B#.(
-%BGO&3
Trang 10
Báo Cáo Thực Tập Tốt Nghiệp –
Port 1:n[&1hl"[!`3#?;S1[3\61[3[6
1[3b6I<G5(L1/L%.L31[;ID
J;6,+0-#?G5(L1/L%.%"3
Port 2:nb&[1IGH;~1"b[!b`#?G5
#W+1$&%2(M(%B#.(-#4/L%.G5%@
/F@3
Port 3:n^&1IGH;~1"[\![•3M(1
I DJ6GH<#_I&"/#$S#$
%M(c`ijabF%B(Y
w[3bDJM(n^
w 2 DJ<#_
n^3\ kV €GO&4L1
n^3[ Vd €(GO&4L1
n^3b h\ €TD
n^3^ h[ €TD[
n^3s \ €2t2D\
n^3a [ €2t2D
n^3{ uk SGO&&"%@/
n^3• kd S#GO&X%"
Các ngõ tín hiệu điều khiển:
Ngõ tín hiệu PSEN:
nj&S"€(FbiIGH1~1#%@/
,F@#?I#~lM(11~1#%2F
@3
njFDW1(Z&&2c`ijab&W&3*
&M(,#?#X1C(%BGO&#?4X(
&%"c`ijab#<*&3'c`ijab,
klZ@njB}FD&[3
Ngõ tín hiệu điều khiển ALE(Address latch Enable):
Trang 11
Báo Cáo Thực Tập Tốt Nghiệp –
'c`ijabW%@/%"61\IDJ&%B#.(-
%BGO&G#I1#GO&#.(-3S(crF
D^\G5&S# ;<#<#(?1##.(-GO&;
;L40/h43
S(Fcr&@;(1\#I(9
&#.(-W1"4#.(-:#@3
w@G(#@#?S?1%"c`ijab6;B=GHc`ijab
L;L-;L4"(H,}B#]3B4
(B=GHc`ijab&[bZ•3
s\xy#?4&"]3ScrI4#@%N[t{
&B4G(#@"S1I<#?G5&S&;1
;M(43cr#?G5&€&+1,1
c`ijab3
Ngõ tín hiệu EA\(External Access):
Sc‚F^[#?W&"D[$D\3LF
D[6c`ijab,XklZ@;#.(-W1`'w3
LFD\6c`ijabB},X%@/F@3c‚
#?&W&W1]b[R;&+1,1c`ijab3
Ngõ tín hiệu RST (Reset):
€kjFi&€2B2M(c`ijab3;€S
#(&"(SW&b;ƒ6(%"#?1O.
S?1#<;F#@43;W1#:#@k2B23
Trang 12
Báo Cáo Thực Tập Tốt Nghiệp –
1.2.5 Sơ đồ khối điều khiển AT89S52 trên modul MMC-100
g,[3s'4# ;<B=GH# ;<c`ijab
1.3 Giới thiệu ngôn ngữ C cho 8051
;E+&+1,# ;<I6O&+1,#?B=
GH(&b&YO%+W1O%+(3
Trang 13
Báo Cáo Thực Tập Tốt Nghiệp –
O%+(&OO6G#I
&+1,%NOF"GQG#3I<;<
#L@B4O&+1,%+(6w(B6n(B(&„GI&
OGH;E+# ;<3R %W6B=GH
O(O%+W1&&+1,""
D+1&G:W0+3,L%N
O%+(8B}#?@1 "S&,%"G.
x1&2y<B(G?1O/;<B(*3
'B=GHO&+1,;<BBT W0
M(%@# ;<3Io(&/@(C2/@#<;<
/B}G:#?,@(I6G;
1W(,<;L0M(# ;<#I3RB=GH&
,#*G:/#I8GQG6I<B=GH%@
$B=(O(@13
1.3.1 Kiểu dữ liệu
Kiểu dữ liệu trong C
w[3^;<GO&
Kiểu Số Byte Khoảng giá trị
Char [ ![b`…†‡[b•
Unsigned char [ \…†baa
Int b !^b•{`…†‡^b•{•
Unsigned int b \…†{aa^a
Long s !b[s•s`^{s`…†‡b[s•s`^{s•
Unsigned long s \…†sbisi{•bia
Float s
* Khai báo biến:
Cú pháp:Kiểu_dữ_liệu Vùng_nhớTên_biến _at_ Đia_chỉ;
Ví dụ: zB2G(G((ˆ
Trang 14
Báo Cáo Thực Tập Tốt Nghiệp –
';(%%LI<&%L.%(#3
Ví dụ: (,YB2G(ˆ
…\ˆ
(-YB2G(…\ˆ
I<;(% %L5@;<@&03
Ví dụ:zB2G66•6ˆ
-#.5/YX;‰R5Š/‹1~1G5I<-(
5/B=GH#<&O%LB=GH,35/
I<B=GH&Y
ld6dcc6dccw6hdcc6ndcc6Vdc3';;(%5/
,G.'2&B}$#.#I&5/dcc3
w[3sn5%@/
Vùng nhớ Ý nghĩa
CODE w@/*],
DATA w@/GO&][b`w2W1M(kcZ# ;<
BDATA w@/GO&I"#.#.(-%6N5/dcc
IDATA w@/GO&][b`w2(M(kcZ# ;<
-IF@B4G9# ;<B(
PDATA w4/GO&]ba{w26#?+1%F#.(-
#$"n\
XDATA w@/GO&IG&?I<&"#L{s'w6#?
+1%F#.(-#$"n\nb
* Định nghĩa lại kiểu
Cú pháp:Typedef Kiễu_dữ_liệu Tên_biến;
"Š%LB(B}#?B=GH@;<GO&/I<G5
#<;(%%L;3
Ví dụ:12G2Œa•aŽˆ
d5"a;(%(%L"(%I;<GO&&[<a
1=Ya(6%ˆ
Trang 15
Báo Cáo Thực Tập Tốt Nghiệp –
Kiểu dữ liệu trong Keil C
w[3a;<GO&
Kiểu Số bit
Bit [
Sbit [
Sfr `
Sfr16 [{
bit:G5#<;(%%LI.\$@(%L&"
5kcZM(# ;<3';(%%L;<%,G.'2&B}$#.
5/B=GH&wdcc3
sbit, sfr, sfr16YG5#<#.o((DJ$
_"# ;<G5#<+1#GO&[%6`%6[{%3
1.3.2 Mảng
Z&@+1?1 1=5@;<.@"3
1=M(1%/(%F-B4(B4D:M(1=
G*1v=3Z|1=I(9@%L&O#?@.
#@&+1/1=;M(3
ZI<&@ $ 3
Khai báo:
Cú pháp:Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng];
'%K4B41=(B}IIB41=%W;,3
Ví dụ: zB2GG(((•aŽ6%•bŽ•^Žˆ
R/;(%"(B}IY(&@ a1=3Z%&
( 6_B41=&{3
-B4M(%T#XB4\3ZI%(" 1W1#
#M%W"-B43
Ví du:n=b Y
Trang 16
Báo Cáo Thực Tập Tốt Nghiệp –
%•\Ž•[Ž�
'LY%•\Ž&B(
1.3.3 Con trỏ
'(;(%@%L6%L#IB}#?W11@;/%(]
@B4%2W#.G5#<&O.3.(-#"M(;/#I
S&#.(-M(%L#?;(%3
K&@%LG5#<D(#.(-;D(.6(.M(
KS&#.(-;/IK/3
R/5/H<K/5/#ILG&?1H@
#@&/M(5/#I3K_C;;#./5/
B}IG&?&/W,+4W"B=GHKH<3
w[3{K
Loại con trỏ Kích thước
K_C ^%2
KVdcc b%2
Kld b%2
Kdcc [%2
Khdcc [%2
Kndcc [%2
Khai báo biến con trỏ:
Cú pháp: Kiểu_Dữ_liệu Vùng_nhớ *Tên_biến;
Ví dụ: •Š1ˆ
&G((•&Š1ˆ
';-€5/KB}#?&K_C3
Trang 17
Báo Cáo Thực Tập Tốt Nghiệp –
1.3.4 Kiểu dữ liệu cấu trúc
'<GO&W0&@+1?1%L6;<W
0;#?%<.%F@"GW3;<GO&W0G5#<&O
.6I&"C(#L(3
Định nghĩa và khai báo biến cấu trúc:
Định nghĩa:12G2ŒB•
'(%%L1ˆ
‘"Š;<ŠWŠ0ˆ
Khai báo: Tên_kiểu_cấu_trúc Vùng_nhớ Tên_biến;
Ví dụ:12G2ŒB•
(G(ˆ
(ˆ
2(ˆ
‘d(2Š12ˆ
d(2Š12G(26G(2Š(•aŽˆ
1.3.5 Phép toán
Phép gán kí hiệu: “=”.
!011YwLŠ[…wLŠbˆ
#IwLŠbI<&.#.8I<&%L3
Phép toán số học
w[3•1~1B4
Phép toán Ý nghĩa Ví dụ
+ n~1@ X = a+b;
- n~1X X = a-b;
* n~1 X = a*b;
/ n~1 ( &W 1 X = a/b;
Trang 18
Báo Cáo Thực Tập Tốt Nghiệp –
" x(…i6%…b’V…sy
% n~1(&W1G X = a%b;
x(…i6%…b’V…[y
Phép toán Logic
w[3`1~1&
Chức năng Phép toán
cd &&
lk ||
l !
Các phép toán so sánh
w[3i1~1BB
Phép
toán
ý nghĩa Ví dụ
> jB&/ a>b
s†aB}(.\
>= j B &/
$%N
a>=b
{†…bB}(.[
< jBK a<b
{“•B}(.[
<= j B K
$%N
a<=b
`“…aB}(.\
== jB%N( a==b
{……{B}(.[
!= jB;( a!=b
i”…iB}(.\
Phép toán thao tác Bit
w[3[\n~1(w
Phép Ý nghĩa Ví dụ
Trang 19
Báo Cáo Thực Tập Tốt Nghiệp –
toán
& n~1xcdy Bit_1 & Bit_2
| n~1$xlky Bit_1 | Bit_2
! n~1#xly !Bit_1
^ n~1 $&X
xVlky
Bit_1 ^ Bit_2
<< d. a<<3
>> d.1 a>>4
~ rW%52% ~a
Phép toán kết hợp
w[3[[n~1;L?1
Phép toán Ví dụ
+= a+=5 <=> a=a+5
-= a-=5 <=> a=a-5
*= a*=5 <=> a=a*5
/= a/=5 <=> a=a/5
%= a%=5 <=> a=a%5
1.3.6 Cấu trúc chương trình C
Cấu trúc chương trình
Cấu trúc:
1. Khai báo chỉ thị tiền xử lý
2. Khai báo các biến toàn cục
3. Khai báo nguyên mẫu các hàm
4. Xây dựng các hàm và chương trình chính
Ví dụ:
// Khai báo chỉ thị tiền xử lý:
#include<regx51.h>
#include<string.h>
Trang 20
Báo Cáo Thực Tập Tốt Nghiệp –
#define Led1 P1_0
//*********************************
// Khai báo biến toàn cục:
Unsigned char code Led_arr[3];
Unsigned char data dem;
Unsigned int xdata X;
//*********************************
// Khai báo nguyên mẫu hàm
Void delay(unsigned int n);
bit kiemtra(unsigned int a);
//*********************************
// Xây dựng các hàm và chương trình chính:
void delay(unsigned int n)
{
Khai báo biến cục bộ;
Mã chương trình trễ;
}
Void main() // Chương trình chính
{
Khai báo biến cụ bộ;
Mã chương trình chính;
}
Bit kiemtra(unsigned int a)
{
Khai báo biến cục bô;
Mã chương trình kiểm tra biến a;
}
Trang 21
Báo Cáo Thực Tập Tốt Nghiệp –
Chú ý:g;;(%"U1#?G:/I
&#I3eSGH"G‰%;2(xB2G(y‹#*#?;(%
"UF""I<G:F%W;,.S
,3
"0(";(%"U/(6
G:1HFB((3LB}IC2&+1,
68+&?2&G26,;LB=(&|B(3
Chỉ thị tiền xử lý
-. B=&>;1&&M(O&&
01B,]/;%"G.3'G.@
,,;1S%,](B#?
G.3/;G.6& =&>B}-&>%46B(#I%-&>
B}#?G.3I%(-&>#?G5&Y
+n~1(L#Define
+n~171#Include
-. =&>01(L,T_D%"
G.6A4,&6C3
* Chỉ thị #Define: -.•G2Œ21~1((L#3
Cú pháp: #Define Tên_thay_thế dãy_kí_tự
Z@"Š(ŠLI<#?#.o(& &6/;#.
o(&11I#.o(%N-.Y
#Undef Tên_thay_thế
Ví dụ:•G2Œ2[\\
* Chỉ thị #Include: -.•&G2%,%"G.+@GM(1
;71,](B3
Cú pháp:
Cách 1:#include<tên_tệp>
Trang 22
Báo Cáo Thực Tập Tốt Nghiệp –
Cách 2:#include“tên_tệp”
Ví dụ:
[Y•&G2“2a[3†
e12a[3B}#?,Hh#<7
,]3
bY•&G2‰2a[3‹
e12a[3B}#?,HD(,]
L;I/,Hh3
'471$HD(,
],"Š1B}%(]#GUHD(13
Chú thích trong chương trình
RL0S,NH#SS>o(M(&6
#,$#@L&,3RL0SB}
01#I<<#?,GQG(I6
B=(&|#$01(2&,8(#*&F&"
(3
0S,B};F#L,(
B,,G.B}%KC(W&0S;%"G.,
B(*3
rS#?#$B(GW‰//‹L0S-L"@G9$
$1GW‰\*‹‰*\‹3
1.3.7 Các lệnh cơ bản trong C
+ Câu lệnh rẽ nhánh if:
Cấu trúc 1: if(dieu_kien){
// Đoạn chương trình
}
Trang 23
Báo Cáo Thực Tập Tốt Nghiệp –
Giải thích:LG2Š;2#0,=&S&%"9B(,
C(3
Cấu trúc 2: if(dieu_kien){
// Đoạn chương trình 1
}
else{
// Đoạn chương trình 2
}
Giải thích:LG2Š;2#0,=&S‰,[‹%"9
B(,=&>‰,b‹3
+ Câu lệnh lựa chọn Switch:
Cấu trúc: switch(biến)
{
case gia_tri_1: //các câu lệnh break;
case gia_tri_2://các câu lệnh break;
……………………………………
case gia_tri_n://các câu lệnh break;
Default://các câu lệnh
}
Giải thích:ƒ%LI.%N.M((B2,:
& D (B2#I6 B( #I ;K W 0 &
‰%2(;ˆ‹3L;I(B215?1,:&G2Œ(&3
+ Vòng lặp xác định For:
Cấu trúc: for( x=n ; điều_kiện ; phép_toán )
{
// các câu lệnh xử lí
}
Trang 24
Báo Cáo Thực Tập Tốt Nghiệp –
Giải thích: &%L6&.#.3/"9&$1B}.%(
#%LY…6];<(L# Š;#0,:&=&>6
B(#I:n~1ŠN#@#L# ;3j(#I&;<(
&# Š;6L9#0,:L16LB(B};K9&$13
19ŒI<;;(%6ŒB}%KC(1
#I6U1I#MbGW‰;‹3
+ Vòng lặp không xác định while:
Cấu trúc: while(dieu_kien)
{
// các câu lệnh
}
Giải thích:/ " , B} ;< (# Š;6L #0 ,
:&6B(#IC(&;<(# Š;39L# Š;B(
,;K9&$1(3
+ Vòng lặp không xác định do while:
Cấu trúc: do
{
// các câu lệnh
} while(dieu_kien);
Giải thích:/"#,:&B(#I;<
(# Š;L#0,&$1&:&L16LB(,;K
9&$13
Trang 25