Mục Lục
I. Giới thiệu chung
1. Mở Đầu .
2 . Giới thiệu đề tài
3. Giới thiệu thành viên trong nhóm .
4. §Þnh híng thiÕt kÕ .
5. Các bước thực hiện
II . Lý thuyết thực hiện
1. Cơ sơ lý thuyết .
2. Sơđồ nguyên lý .
3. Phân tích chức năng từng khối .
4. Giới thiệu linh kiện chính
Vi điều kiển AT89C51 .
III. Phần mềm thực hiện hệ thống
IV. Thiết kế mạch
VII. Kết Luận .
VIII. Tài liệu tham khảo .
44 trang |
Chia sẻ: lethao | Lượt xem: 6402 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Đo và điều khiển tốc độ động cơ dùng vi điều khiển 8051, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
}
void CMoPhongDlg::OnHangdonvi()
{
if(m_5==9) m_5=0;
else
m_5++;
CString s;
s.Format("%d",m_5);
m_led5.SetWindowText(s);
m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5;
}
void CMoPhongDlg::OnHangnghin()
{
if(m_2==9) m_2=0;
else
m_2++;
CString s;
s.Format("%d",m_2);
m_led2.SetWindowText(s);
m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5;
}
void CMoPhongDlg::OnHangtram()
{
if(m_3==9) m_3=0;
else
m_3++;
CString s;
s.Format("%d",m_3);
m_led3.SetWindowText(s);
m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5;
}
void CMoPhongDlg::OnHangvan()
{
if(m_1==9) m_1=0;
else
m_1++;
CString s;
s.Format("%d",m_1);
m_led1.SetWindowText(s);
m_vong=m_1*10000+m_2*1000+m_3*100+m_4*10+m_5;
}
void CMoPhongDlg::OnPause()
{
KillTimer(1);
}
void CMoPhongDlg::OnReset()
{
m_1=m_2=m_3=m_4=m_5=m_6=m_7=m_8=m_9=m_10=0;
// thiet lap ve khong
m_led1.SetWindowText("0");
m_led2.SetWindowText("0");
m_led3.SetWindowText("0");
m_led4.SetWindowText("0");
m_led5.SetWindowText("0");
m_led6.SetWindowText("0");
m_led7.SetWindowText("0");
m_led8.SetWindowText("0");
m_led9.SetWindowText("0");
m_led10.SetWindowText("0");
KillTimer(1);
}
void CMoPhongDlg::OnReverse()
{
if(temp==TRUE)
temp=FALSE;
else
{
temp=TRUE;
}
}
void CMoPhongDlg::OnDraw(CDC *pDC)
{
CRect rectWin;
GetWindowRect(rectWin);
rectWin.top+=32;
CWnd*pWnd=GetDlgItem(IDC_DISPLAY);
CRect rectD;
pWnd->GetWindowRect(rectD);
int cx,cy;
cx=rectD.CenterPoint().x;
cy=rectD.CenterPoint().y;
cx-=rectWin.left;
cy-=rectWin.top;
CBrush brush(RGB(0,255,0));
CBrush * oldBrush=pDC->SelectObject(&brush);
CPen *pen=new CPen(PS_SOLID,1,RGB(0,0,255));
CPen*oldPen =pDC->SelectObject(pen);
pDC->Ellipse(cx-50,cy-50,cx+50,cy+50);
CPen*pen1=new CPen(PS_SOLID,3,RGB(255,0,0));
CPen*oldPen1 =pDC->SelectObject(pen1);
double angle;
angle =m_degree*3*3.14/180;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
angle+=3.14/3;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
angle+=3.14/3;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
angle+=3.14/3;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
angle+=3.14/3;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
angle+=3.14/3;
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
pDC->MoveTo(cx,cy);
pDC->LineTo(cx+(int)(50*sin(angle)),cy-(int)(50*cos(angle)));
pDC->SelectObject(oldBrush);
pDC->SelectObject(oldPen);
pDC->SelectObject(oldPen1);
}
void CMoPhongDlg::OnTimer(UINT nIDEvent)
{
if(temp==TRUE)
{
m_degree++;
if(m_degree>=120) m_degree=0;
}
else
{
m_degree--;
if(m_degree<=0) m_degree=120;
}
if(m_10<9)
m_10++;
else
{
m_10=0;
if(m_9<9)
m_9++;
else
{
m_9=0;
if(m_8<9)
m_8++;
else
{
m_8=0;
if(m_7<9)
m_7++;
else
{
m_7=0;
if(m_6<9)
m_6++;
else
MessageBox("Tran So","Warning",MB_OK);
}
}
}
}
t++;
if(t==100)
{
t=0;
CString s6,s7,s8,s9,s10;
s6.Format("%d",m_1);
s7.Format("%d",m_2);
s8.Format("%d",m_3);
s9.Format("%d",m_4);
if(m_5<=2)
s10.Format("%d",m_5+1);
else
if((m_5>2)&&(m_5<5))
s10.Format("%d",m_5-1);
else
if(m_5==5||m_5==7)
s10.Format("%d",m_5);
else
if((m_5>5)&&m_5<7)
s10.Format("%d",m_5+1);
else
s10.Format("%d",m_5-1);
m_led6.SetWindowText(s6);
m_led7.SetWindowText(s7);
m_led8.SetWindowText(s8);
m_led9.SetWindowText(s9);
m_led10.SetWindowText(s10);
}
CClientDC pDC(this);
OnDraw(&pDC);
CDialog::OnTimer(nIDEvent);
}
void CMoPhongDlg::OnStart()
{
UpdateData(TRUE);
SetTimer(1,(int)(1000/m_vong),NULL);
}
CScrollBar* CMoPhongDlg::GetScrollBarCtrl(int nBar) const
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::GetScrollBarCtrl(nBar);
}
void CMoPhongDlg::OnDestroy()
{
CDialog::OnDestroy();
KillTimer(1);
}
void CMoPhongDlg::OnButton1()
{
OnOK();
}
b. PhÇn giao diÖn
II. Lý Thuyết thực hiện.
Cơ sở lý thuyết.
Sơ đồ khối
Khối nhập dữ liệu
Khối nguồn
Khối khuếch đại
Khối xử lý trung tâm
Khối thu phát
Động cơ
Khối hiển thị (LCD)
Khối mạch động lực
Sơ đồ nguyên lý.
III.Phân tích chức năng từng khối.
a .Khối vi xử lý
b. Khối hiển thị.
c.Khối nhập giá trị tốc độ.
d.Khối đo tốc độ động cơ.
e.Khối động lực
g.Khèi nguån
h.Khèi ®éng c¬
IV.Giới thiệu linh kiện sử dụng trong mạch:
1 - IC khuếch đại LM324
2 - Vi điều khiển 80c52
3 – LCD. ,74HC14,®iÖn trë quang….
4 - Một số linh kiện phụ khc: thạch anh 12 Mhz, sensor thu phát hồng ngoại, tụ 33p, tụ 10 uF, trở...
5 - Môtơ điện một chiều DC 12V
V .Mô tả các modul
1.Khối vi xử lý Điều khiển tốc độ động cơ:
Giới thiệu:
Mục đích của điều khiển tốc độ động cơ là đưa ra tín hiệu biểu diễn tốc độ yêu cầu, và điều khiển động cơ theo tốc độ đấy. Bộ điều khiển có thể có hoặc không thật sự đo tốc độ động cơ. Nếu có thì goi là điều khiển tốc độ có phản hồi hoặc điều khiển tốc độ vòng kín, nếu không thì gọi là điều khiển tốc độ vòng mở. Điều khiển tốc độ có phản hồi tốt hơn nhưng phức tạp hơn.
Động cơ có rất nhiều kiểu, và đầu ra của bộ điều khiển tốc độ của động cơ với các dạng khác nhau là khác nhau.
Lý thuyết điều khiển tốc độ động cơ một chiều:
Tốc độ của động cơ một chiều tỉ lệ trực tiếp với nguồn cấp, vì vậy nếu ta giảm điện áp cung cấp từ 12V xuống 6V, động cơ sẽ chạy với tốc độ bằng một nửa trước đó.
Bộ điều khiển tốc độ động cơ làm việc trên nguyên lý biến đổi điện áp trung bình cấp cho động cơ. Có thể đơn giản chỉ bằng cách điều chỉnh điện áp cung cấp, nhưng như thế sẽ không hiệu quả. Cách tốt hơn là tắt nguồn cấp cho động cơ thật nhanh. Nếu động tác tắt này đủ nhanh thì động cơ không kịp nhận ra sự thay đổi đó mà chỉ nhận ra được hiệu ứng trung bình thôi. Khi bật, nguồn có giá trị 12V; khi tắt, nguồn có giá trị 0V. Nếu ta tắt nguồn với một lượng thời gian bằng với khi nó được bật thì động cơ sẽ nhận được giá trị trung bình là 6V, và sẽ chạy chậm đi theo tỉ lệ đó.
Chuyển mạch để bật tắt nguồn này gọi là on-off switching, được chế tạo bằng MOSFET.
Ta dùng vi xử lý 8051.
Nh÷ng tÝnh chÊt ®Æc trng cña hä vi ®iÒu khiÓn MCS-51:
* §¬n vÞ xö lý trung t©m (CPU) 8 bit ®· ®îc tèi u ho¸ ®Ó ®¸p øng c¸c chøc n¨ng ®iÒu khiÓn .
* Khèi l«gic (ALU) xö lý theo bit nªn thuËn tiÖn cho c¸c phÐp to¸n logic Boolean.
* Bé t¹o dao ®éng gi÷ nhÞp ®îc tÝch hîp bªn trong víi tÇn sè 12MHz.
* Giao diÖn nèi tiÕp cã kh¶ n¨ng ho¹t ®éng song song, ®ång bé.
* C¸c cæng vµo/ra hai híng vµ tõng ®êng dÉn cã thÓ ®îc ®Þnh ®Þa chØ mét c¸ch t¸ch biÖt.
* Cã n¨m hay s¸u nguån ng¾t víi hai møc u tiªn .
* Hai hoÆc ba bé ®Õm ®Þnh thêi 16 bit.
* Bus vµ khèi ®Þnh thêi t¬ng thÝch víi c¸c khèi ngo¹i vi cña bé vi xö lý 8085/8088.
* Dung lîng cña bé nhí ch¬ng tr×nh (ROM) bªn ngoµi cã thÓ lªn tíi 64 kbyte.
* Dung lîng cña bé nhí d÷ liÖu (RAM) bªn ngoµi cã thÓ lªn tíi 64 kbyte.
* Dung lîng cña bé nhí ROM bªn trong cã thÓ lªn ®Õn 8 kbyte.
* Dung lîng bé nhí RAM bªn trong cã thÓ ®¹t ®Õn 256 byte.
* TËp lÖnh phong phó.
2.1. CÊu tróc chung :
2.1.1. S¬ ®å khèi :
S¬ ®å khèi tæng qu¸t cña mét vi ®iÒu khiÓn 8051 cã thÓ ®îc m« t¶ nh sau:
CÊu tróc cña vi ®iÒu khiÓn 8051.
Bé t¹o dao ®éng
CPU
§iÒu khiÓn ng¾t.
Nguån ng¾t trong.
4Kbyte
Bé nhí ch¬ng tr×nh trong.
128byte
Bé nhí
RAM
trong
2bé ®Õm / ®Þnh thêi
Khèi
®.khiÓn qu¶n lý Bus.
Port
0
Port
1
Port
2
Port
3
Giao diÖn nèi tiÐp.
XTAL 1.2
|PSEN/ALE
Cæng I/O
8 bit
Cæng I/O
§chØ cao D÷ liÖu 8 bit
Cæng I/O
§chØ thÊp
D÷ liÖu 8 bit
Cæng I/O
C¸c chøc n¨ng ®¾c biÖt
D÷ liÖu 8 bit
Nguån ng¾t ngoµi
§Õm sù kiÖn.
Chøc n¨ng cña tõng khèi :
* Khèi xö lý trung t©m CPU:
PhÇn chÝnh cña bé vi xö lý lµ khèi xö lý trung t©m (CPU=Central Processing Unit ), khèi nµy cã chøa c¸c thµnh phÇn chÝnh :
+Thanh ghi tÝch luü (ký hiÖu lµ A );
+Thanh ghi tÝch luü phô (ký hiÖu lµ B ) thêng ®îc dïng cho phÐp nh©n vµ phÐp chia ;
+Khèi logic sè häc (ALU=Arithmetic Logical Unit) ;
+Tõ tr¹ng th¸i ch¬ng tr×nh (PSW= Program Status Word );
+Bèn b¨ng thanh ghi .
+Con trá ng¨n xÕp (SP=Stack Point) còng nh con trá d÷ liÖu ®Ó ®Þnh ®Þa chØ cho bé nhí d÷ liÖu ë bªn ngoµi;
Ngoµi ra, khèi xö lý trung t©m cßn chøa:
-Thanh ghi ®Õm ch¬ng tr×nh (PC= Progam Counter );
-Bé gi¶i m· lÖnh;
-Bé ®iÒu khiÓn thêi gian vµ logic;
Sau khi ®îc Reset, CPU b¾t ®Çu lµm viÖc t¹i ®Þa chØ 0000h, lµ ®Þa chØ ®Çu ®îc ghi trong thanh ghi chøa ch¬ng tr×nh (PC) vµ sau ®ã, thanh ghi nµy sÏ t¨ng lªn 1 ®¬n vÞ vµ chØ ®Õn c¸c lÖnh tiÕp theo cña ch¬ng tr×nh.
*Bé t¹o dao ®éng:
Khèi xö lý trung t©m nhËn trùc tiÕp xung nhÞp tõ bé t¹o dao ®éng ®îc l¾p thªm vµo, linh kiÖn phô trî cã thÓ lµ mét khung dao ®éng lµm b»ng tô gèm hoÆc th¹ch anh. Ngoµi ra, cßn cã thÓ ®a mét tÝn hiÖu gi÷ nhÞp tõ bªn ngoµi vµo.
*Khèi ®iÒu khiÓn ng¾t:
Ch¬ng tr×nh ®ang ch¹y cã thÓ cho dõng l¹i nhê mét khèi logic ng¾t ë bªn trong. C¸c nguån ng¾t cã thÓ lµ: c¸c biÕn cè ë bªn ngoµi, sù trµn bé ®Õm/bé ®Þnh thêi hay cã thÓ lµ giao diÖn nèi tiÕp. TÊt c¶ c¸c ng¾t ®Òu cã thÓ ®îc thiÕt lËp chÕ ®é lµm viÖc th«ng qua hai thanh ghi IE (Interrupt Enable) vµ IP (Interrupt Priority).
*Khèi ®iÒu khiÓn vµ qu¶n lý Bus :
C¸c khèi trong vi ®iÒu khiÓn liªn l¹c víi nhau th«ng qua hÖ thèng Bus néi bé ®îc ®iÒu khiÓn bëi khèi ®iÒu khiÓn qu¶n lý Bus.
*C¸c bé ®Õm/®Þnh thêi:
Vi ®iÒu khiÓn 8051 cã chøa hai bé ®Õm tiÕn 16 bit cã thÓ ho¹t ®éng nh lµ bé ®Þnh thêi hay bé ®Õm sù kiÖn bªn ngoµi hoÆc nh bé ph¸t tèc ®é Baud dïng cho giao diÖn nèi tiÕp. Tr¹ng th¸i trµn bé ®Õm cã thÓ ®îc kiÓm tra trùc tiÕp hoÆc ®îc xo¸ ®i b»ng mét ng¾t.
*C¸c cæng vµo/ra:
Vi ®iÒu khiÓn 8051 cã bèn cæng vµo/ra (P0 .. P3), mçi cæng chøa 8 bit, ®éc lËp víi nhau. C¸c cæng nµy cã thÓ ®îc sö dông cho nh÷ng môc ®Ých ®iÒu khiÓn rÊt ®a d¹ng. Ngoµi chøc n¨ng chung, mét sè cæng cßn ®¶m nhËn thªm mét sè chøc n¨ng ®Æc biÖt kh¸c.
*Giao diÖn nèi tiÕp:
Giao diÖn nèi tiÕp cã chøa mét bé truyÒn vµ mét bé nhËn kh«ng ®ång bé lµm viÖc ®éc lËp víi nhau. B»ng c¸ch ®Êu nèi c¸c bé ®Öm thÝch hîp, ta cã thÓ h×nh thµnh mét cæng nèi tiÕp RS-232 ®¬n gi¶n. Tèc ®é truyÒn qua cæng nèi tiÕp cã thÓ ®Æt ®îc trong mét vïng réng phô thuéc vµo mét bé ®Þnh thêi vµ tÇn sè dao ®éng riªng cña th¹ch anh.
*Bé nhí ch¬ng tr×nh:
Bé nhí ch¬ng tr×nh thêng lµ bé nhí ROM (Read Only Memory), bé nhí ch¬ng tr×nh ®îc sö dông ®Ó cÊt gi÷ ch¬ng tr×nh ®iÒu khiÓn ho¹t ®éng cña vi ®iÒu khiÓn.
*Bé nhí sè liÖu:
Bé nhí sè liÖu thêng lµ bé nhí RAM (Ramdom Acces Memory), bé nhí sè liÖu dïng ®Ó cÊt gi÷ c¸c th«ng tin t¹m thêi trong qu¸ tr×nh vi ®iÒu khiÓn lµm viÖc.
2.1.2. Sù s¾p xÕp ch©n ra cña vi ®iÒu khiÓn 8051:
PhÇn lín c¸c bé vi ®iÒu khiÓn 8051 ®îc ®ãng vµo vá theo kiÓu hai hµng DIL(Dual In Line) víi tæng sè lµ 40 ch©n ra, mét sè Ýt cßn l¹i ®îc ®ãng vá theo kiÓu h×nh vu«ng PLCC (Plastic Leaded Chip Carrier) víi 44 ch©n vµ lo¹i nµy thêng ®îc dïng cho nh÷ng hÖ thèng cÇn thiÕt ph¶i tiÕt kiÖm diÖn tÝch.
8051
P1.0
P1.1
P1.2
P1.4
P1.5
P1.3
P1.6
P1.7
RST
(TxD) P3.1
( |INT0) P3.2
(RxD) P3.0
( |INT1) P3.3
(T0) P3.4
(T1) P3.5
( |RD) P3.7
XTAL2
( |WR) P3.6
XTAL2
GND
VCC + 5V
P0.0 (A/D 0)
P0.1 (A/D 1)
P0.3 (A/D 3)
P0.4 (/D 4)
P0.2 (A/D 2)
P0.5 (A/D 5)
P0.6 (A/D 6)
P0.7 (A/D 7)
ALE
|PSEN
|EA
P2.7 (A15)
P2.6 (A14)
P2.5 (A13)
P2.3 (A11)
P2.2 (A10)
P2.4 (A12)
P2.1 (A9)
P2.0 (A8)
H×nh 2.2: S¬ ®å ch©n cña vi m¹ch 8051 DIL.
B¶ng 2.1: Chøc n¨ng c¸c ch©n cña vi ®iÒu khiÓn 8051.
Ch©n
Ký hiÖu
Chøc n¨ng
1-->8
P1.0-->P1.7
Cæng gi¶ hai híng P1, cã thÓ tù do sö dông
9
Reset
Lèi vµo Reset, khi ho¹t ®éng ë møc High(1)
10-->17
P3.0-->P3.7
Cæng gi¶ hai híng P3, s¾p xÕp tÊt c¶ c¸c ®êng dÉn víi chøc n¨ng ®Æc biÖt
18
XTAL2
Lèi ra cña bé dao ®éng th¹ch anh bªn trong
19
XTAL1
Lèi vµo cña bé dao ®éng th¹ch anh bªn trong
20
Vss
Nèi m¸t ( 0V )
21-->28
P2.0-->P2.7
Cæng gi¶ hai híng P2, chøc n¨ng ®Æc biÖt lµ c¸c ®êng dÉn ®Þa chØ A8..A15
29
|PSEN
Progam Strobe Enable, xuÊt ra c¸c xung ®äc dïng cho bé nhí ch¬ng tr×nh bªn ngoµi
30
ALE
Address Latch Enable, xuÊt ra c¸c xung ®iÒu khiÓn ®Ó lu tr÷ trung gian c¸c ®Þa chØ
31
|EA
External Access, khi ®îc nèi víi m¸t lµ ®Ó lµm viÖc víi ROM ngo¹i vi
32-->39
P1.0-->P1.7
Cæng hai híng cùc m¸ng hë P0 hay Bus d÷ liÖu hai híng dïng cho ROM, RAM vµ thiÕt bÞ ngo¹i vi ®ång thêi còng chuyÓn giao 8 bit ®Þa chØ thÊp
40
Vdd
Nguån nu«i d¬ng ( +5V )
C¸c ch©n ra cña bé vi ®iÒu khiÓn 8051 gåm cã:
*EA: §ãng vai trß quyÕt ®Þnh xem vi ®iÒu khiÓn lµm viÖc víi ch¬ng tr×nh bªn trong hay bªn ngoµi. Víi lo¹i 8051 kh«ng cã ROM trong th× ch©n nµy ph¶i ®îc nèi víi m¸t. Lo¹i th«ng thêng cã thÓ lµm viÖc tuú theo c¸ch lùa chän gi÷a ROM trong hay ROM ngoµi, khi ®ang ë chÕ ®é lµm viÖc víi bé nhí ROM trong, lo¹i cã chøa bé nhí ROM cã thÓ truy nhËp tù ®éng lªn bé nhí ch¬ng tr×nh bªn ngoµi.
*Reset: Tr¹ng th¸i Reset ®îc thiÕt lËp b»ng c¸ch gi÷ tÝn hiÖu Reset ë møc cao trong thêi gian Ýt nhÊt lµ 2 chu kú m¸y.
*ALE: TÝn hiÖu chèt 8 bit ®Þa chØ thÊp trong suèt qu¸ tr×ng truy nhËp bé nhí më réng. Th«ng thêng tÝn hiÖu ALE ®îc ph¸t ra víi tÇn sè b»ng 1/6 tÇn sè dao ®éng th¹ch anh vµ cã thÓ sö dông víi môc ®Ých ®Þnh thêi gian hoÆc xung nhÞp ®ång hå ngoµi. Tuy nhiªn, tÝn hiÖu ALE sÏ bÞ bá qua trong mçi qu¸ tr×nh truy nhËp bé nhí d÷ liÖu ngoµi.
*PSEN: TÝn hiÖu ®äc bé nhí ch¬ng tr×nh ngoµi, khi vi ®iÒu khiÓn truy nhËp bé nhí ch¬ng tr×nh néi th× PSEN ®îc ®Æt ë møc cao.
*XTAL1, XTAL2: Mét bé t¹o tÝn hiÖu gi÷ nhÞp víi tÇn sè ®îc x¸c ®Þnh bëi bé céng hëng th¹ch anh ®îc l¾p thªm vµo, tÇn sè nµy x¸c ®Þnh tèc ®é lµm cña bé vi ®iÒu khiÓn. Th«ng thêng c¸c lÖnh ®îc thùc hiÖn b»ng 1/12 tÇn sè dao ®éng cña th¹ch anh.
C¸c bé ®Õm cè thÓ lµm viÖc trong nhiÒu chÕ ®é kh¸c nhau. Khi ho¹t ®éng nh lµ bé ®Þnh thêi, c¸c bé ®Õm nhËn ®îc c¸c xung tõ mét bé chia tríc ë bªn trong, bé nµy chia tÇn sè riªng cña bé céng hëng th¹ch anh cho 12 .
Thay cho mét bé ®Þnh thêi 16 bit, mét bé ®inh thêi 8 bit cã thÓ ®îc t¹o ra b»ng viÖc n¹p tù ®éng sau khi cÊp nguån, c¸c xung dÉn tõ bªn ngoµi vµo qua T0 vµ T1 còng cã thÓ ®îc ®Õm, c¸c xung nµy cã tÇn sè cùc ®¹i b»ng 1/24 gi¸ trÞ tÇn sè cña bé céng hëng th¹ch anh.
*P0..P3: C¸c c«ng vµo/ra.
Cæng P3 còng ®¶m nhËn mét sè chøc n¨ng ®Æc biÖt cña bé vi ®iÒu khiÓn :
Ch©n Ký hiÖu Chøc n¨ng
P3.0 RxD NhËn d÷ liÖu vµo bé nhí qua cæng nèi tiÕp
P3.1 TxD TruyÒn d÷ liÖu vµo bé nhí qua cæng nèi tiÕp
P3.2 |INT0 Ng¾t ngoµi 0
P3.3 |INT1 Ng¾t ngoµi 1
P3.4 T0 Lèi vµo cña Timer 0
P3.5 T1 Lèi vµo cña Timer 1
P3.6 |WR ViÕt vµo bé nhí
P3.7 |RD §äc bé nhí
2.2 Tæ chøc bé nhí:
CÊu tróc chung cña bé nhí:
TÊt c¶ c¸c vi ®iÒu khiÓn thuéc hä MCS-51 ®Òu ph©n chia bé nhí thµnh hai vïng ®Þa chØ cho bé nhí d÷ liÖu vµ bé nhí ch¬ng tr×nh. Sù ph©n chia logic gi÷a bé nhí d÷ liÖu vµ bé nhí ch¬ng tr×nh cho phÐp truy nhËp bé nhí d÷ liÖu b»ng 8 bit ®Þa chØ gióp cho viÖc lu tr÷ vµ thao t¸c d÷ liÖu nhanh h¬n.Tuy nhiªn, chóng ta cã thÓ sö dông ®Þa chØ bé nhí d÷ liÖu 16 bit th«ng qua thanh ghi DPTR.
Bé nhí ch¬ng tr×nh lµ lo¹i bé nhí chØ cho phÐp ®äc, kh«ng cho phÐp ghi. Mét sè vi ®iÒu khiÓn ®îc tÝch hîp s½n bé nhí ch¬ng tr×nh bªn trong víi dung lîng kho¶ng 4kbyte hay 8 kbyte, sè cßn l¹i ph¶i sö dông bé ch¬ng tr×nh më réng mµ qu¸ tr×nh truy nhËp ®îc thùc hiÖn th«ng qua sù ®iÒu khiÓn b»ng tÝn hiÖu PSEN (Progam Strobe Enable).
Tuy nhiªn, vi ®iÒu khiÓn 8051 cho phÐp ta sö dông ®Õn 64kbyte bé nhí ch¬ng tr×nh b»ng c¸ch sö dông c¶ bé nhí ch¬ng tr×nh bªn trong vµ bªn ngoµi.
Bé nhí sè liÖu chiÕm gi÷ vïng ®Þa chØ ph©n chia cña bé nhí ch¬ng tr×nh. Dung lîng cña bé nhí d÷ liÖu cã thÓ më réng lªn tíi 64 kbyte. Trong qu¸ tr×nh truy nhËp bé nhí sè liÖu, CPU ph¸t ra c¸c tÝn hiÖu ®äc vµ tÝn hiÖu viÕt sè liÖu th«ng qua c¸c ch©n RD vµ WR.
00H
0000H
Bé nhí Ch¬ng tr×nh
Bé nhí Sè liÖu
Bé nhí më
réng
Bé nhí
më
réng
|PSEN
|WR
|RD
FFH
|EA=1
Bé nhí
trong
|EA=0
Bé nhí ngoµi
FFFFH
H×nh 2.3: CÊu tróc bé nhí cña hä MCS-51.
Chóng ta cã thÓ kÕt hîp bé nhí ch¬ng tr×nh më réng víi bé nhí sè liÖu më réng b»ng c¸ch cho hai tÝn hiÖu RD vµ PSEN qua mét cæng logic AND, lèi ra cña cæng AND nµy sÏ t¹o tÝn hiÖu ®äc cho bé nhí më réng.
Bé nhí ch¬ng tr×nh:
Sau khi Reset, CPU b¾t ®Çu thùc hiÖn ch¬ng tr×nh tõ ®Þa chØ 0000H. Vïng ®Çu cña bé nhí ch¬ng tr×nh lµ vïng chøa c¸c vector ng¾t, mçi ng¾t ®îc ph©n chia mét vïng ®Þa chØ cè ®Þnh trong trong bé nhí ch¬ng tr×nh. Khi xuÊt hiÖn ng¾t, CPU sÏ nh¶y tíi ®Þa chØ nµy, ®©y còng lµ ®Þa chØ ®Çu cña ch¬ng tr×nh con phôc vô ng¾t. C¸c vector ng¾t c¸ch nhau 8 byte, v× vËy nÕu ch¬ng tr×nh con phôc vô ng¾t qu¸ dµi (>8 byte) th× t¹i vector ng¾t ta ph¶i ®Æt mét lÖnh nh¶y kh«ng ®iÒu kiÖn tíi vïng ®Þa chØ kh¸c chøa ch¬ng tr×nh con phôc vô ng¾t.
Bé nhí sè liÖu:
PhÝa bªn ph¶i cña H×nh 2.3 biÓu diÔn kh«ng gian bé nhí d÷ liÖu cña MCS-51. Chóng ta cã thÓ sö dông tíi 64 Kbyte bé nhí sè liÖu ngo¹i vi. §é réng bus ®Þa chØ cña bé nhí sè liÖu ngoµi cã thÓ lµ 8 bit hoÆc 16 bit. Bus ®Þa chØ réng 8 bit thêng ®îc sö dông ®Ó liªn kÕt víi mét hoÆc nhiÒu ®êng vµo ra kh¸c ®Ó ®Þnh ®Þa chØ cho RAM theo trang. Trong trêng hîp bus ®Þa chØ réng 16 bit, cæng P2 sÏ ph¸t ra 8 bit ®Þa chØ cao cßn cæng P1 sÏ ph¸t ra 8 bit ®Þa chØ thÊp. B»ng c¸ch nµy, ta cã thÓ truy nhËp trùc tiÕp lªn bé nhí d÷ liÖu ngoµi víi ®é lín tèi ®a lµ 64 Kbyte.
Bé nhí sè liÖu trong ®îc chia ra lµm 3 vïng:
+128 byte cao.
+128 byte thÊp.
+Vïng dµnh cho c¸c thanh ghi chøc n¨ng ®Æc biÖt (SFR).
§Þa chØ cña bé nhí sè liÖu trong lu«n lµ 8 bit, vµ cã thÓ qu¶n lý ®îc 256 byte bé nhí.
Tuy nhiªn, trªn thùc tÕ c¸ch ®Þnh ®Þa chØ cña bé nhí RAM trong cã thÓ qu¶n lý tíi 384 byte.
B¶n ®å bé nhí trªn chÝp:
7F
FF
F0
F7
F6
F5
F4
F3
F2
F1
F0
B
RAM ®a dông
E0
E7
E6
E5
E4
E3
E2
E1
E0
ACC
D0
D7
D6
D5
D4
D3
D2
D1
D0
PSW
30
B8
-
-
-
BC
BB
BA
B9
B8
IP
2F
7F
7E
7D
7C
7B
7A
79
78
2E
77
76
75
74
73
72
71
70
B0
B7
B6
B5
B4
B3
B2
B1
B0
P.3
2D
6F
6E
6D
6C
6B
6A
69
68
2C
67
66
65
64
63
62
61
60
A8
AF
AC
AB
AA
A9
A8
IE
2B
5F
5E
5D
5C
5B
5A
59
58
2A
57
56
55
54
53
52
51
50
A0
A7
A6
A5
A4
A3
A2
A1
A0
P2
29
4F
4E
4D
4C
4B
4A
49
48
28
47
46
45
44
43
42
41
40
99
Kh«ng ®îc ®Þa chØ ho¸ bit
SBUF
27
3F
3E
3D
3C
3B
3A
39
38
98
9F
9E
9D
9C
9B
9A
99
98
SCON
26
37
36
35
34
33
32
31
30
25
2F
2E
2D
2C
2B
2A
29
28
90
97
96
95
94
93
92
91
90
P1
24
27
26
25
24
23
22
21
20
23
1F
1E
1D
1C
1B
1A
19
18
8D
Kh«ng ®îc ®Þa chØ ho¸ bit
TH1
22
17
16
15
14
13
12
11
10
8C
Kh«ng ®îc ®Þa chØ ho¸ bit
TH0
21
0F
0E
0D
0C
0B
0A
09
08
8B
Kh«ng ®îc ®Þa chØ ho¸ bit
TL1
20
07
06
05
04
03
02
01
00
8A
Kh«ng ®îc ®Þa chØ ho¸ bit
TL0
1F
Bank 3
89
Kh«ng ®îc ®Þa chØ ho¸ bit
TMOD
18
88
8F
8E
8D
8C
8B
8A
89
88
TCON
17
Bank 2
87
Kh«ng ®îc ®Þa chØ ho¸ bit
PCON
10
0F
Bank 1
83
Kh«ng ®îc ®Þa chØ ho¸ bit
DPH
08
82
Kh«ng ®îc ®Þa chØ ho¸ bit
DPL
07
Bank thanh ghi 0
81
Kh«ng ®îc ®Þa chØ ho¸ bit
SP
00
(MÆc ®Þnh cho R0 -R7)
88
87
86
85
84
83
82
81
80
P0
Thanh ghi ghi chøc n¨ng ®Æc biÖt (SFR= Special Function Registers):
Vi ®iÒu khiÓn 8051 lµ mét bé vi ®iÒu khiÓn ®a n¨ng víi nhiÒu chÕ ®é ho¹t ®éng kh¸c nhau ®îc thiÕt lËp th«ng qua c¸c thanh ghi chøc n¨ng ®Æc biÖt SFRs.
C¸c thanh ghi chøc n¨ng ®Æc biÖt cña vi ®iÒu khiÓn 8051 gåm cã:
+P0, P1, P2, P3: C¸c cæng vµo ra, mçi bÝt øng víi 1 ch©n cña vi ®iÒu khiÓn. C¸c ch©n nµy ho¹t ®éng ë møc logic ©m.
+SP (Stack Pointer): §©y lµ con trá ng¨n xÕp cña vi ®iÒu khiÓn. Thanh ghi nµy cho biÕt ®Þa chØ truy nhËp tiÕp theo trong bé nhí RAM.
+DPH, DPL (Data Pointer High, Data Pointer Low): T¹o thµnh 1 cÆp thanh ghi con trá d÷ liÖu DPTR 16 bit.
+PCON (Power Control): Thanh ghi nµy ®îc sö dông ®Ó ®iÒu khiÓn c«ng suÊt cña vi ®iÒu khiÓn. Ngoµi ra bit PCON.7 con cho phÐp sñ dông ®Ó t¨ng gÊp ®«i tèc ®é baud khi truyÒn qua cæng nèi tiÕp.
+TCON (Timer Control): ThiÕt lËp cÊu h×nh lµm viÖc cho bé Timer/Counter.
+TMOD (Timer Mode): X¸c ®Þnh chÕ ®é lµm viÖc cho tõng bé Timer/Counter.
+TL0/TH0 (Timer 0 Low/High): CÆp thanh ghi t¬ng øng víi Timer0.
+TL1/TH1 (Timer 1 Low/High): CÆp thanh ghi t¬ng øng víi Timer1.
+SCON (Serial Control): ThiÕt lËp cÊu h×nh cho cæng nèi tiÕp.
+SBUF (Serial Buffer): Bé ®Öm khi truyÒn hoÆc nhËn d÷ liÖu qua cæng nèi tiÕp.
+IE (Interrupt Enable): Cho phÐp ng¾t hoÆc cÊm ng¾t.
+IP (Interrupt Priority): ThiÕt lËp møc u tiªn cho c¸c ng¾t.
+PSW (Program Status Word ): Thanh ghi tõ tr¹ng th¸i ch¬ng tr×nh lu tr÷ mét sè bit quan träng ®îc ®Æt hoÆc xo¸ bëi c¸c lÖnh cña 8051: cê nhí, cê nhí phô, cê trµn vµ cê ch½n lÎ. Ngoµi ra, 2 bit RS0 vµ RS1 trong PSW cßn cho phÐp chän b¨ng thanh ghi ®Ó lµm viÖc trong bé nhí RAM trong.
+ACC (Accumulator): Thanh ghi tÝch luü, ®©y lµ mét trong nh÷ng thanh ghi ®îc sö dông nhiÒu nhÊt trong vi ®iÒu khiÓn 8051. Thanh ghi nµy cã ký hiÖu lµ A.
+B (B Register): Thanh ghi B ®îc sö dông khi thùc hiÖn c¸c phÐp to¸n nh©n, chia vµ còng cã thÓ ®îc dïng nh thanh ghi phô hay thanh ghi lu tr÷ sè liÖu t¹m thêi.
C¸c thanh ghi chøc n¨ng ®Æc biÖt sÏ cã thÓ ®îc nhËn mét tr¹ng th¸i nµo ®ã cè ®Þnh mçi khi vi ®iÒu khiÓn Reset (tuú thuéc vµo mçi thanh ghi). Sau ®©y lµ b¶ng tr¹ng th¸i cña c¸c thanh ghi ngay sau khi Reset:
B¶ng 2.2: Tr¹ng th¸i khi reset cña c¸c thanh ghi.
Register
Reset to
Register
Reset to
Register
Reset to
A
00H
P2
FFH
SCON
00H
B
00H
P3
FFH
TCON
00H
DPTR
00H
PCON
0.......B
TMOD
00H
IE
0..00000B
0...0000B
TH0
00H
IP
...00000B
PSW
00H
TH1
00H
P0
FFH
SP
07H
TL0
00H
P1
FFH
SBUF
..H
TH1
00H
2.Khối hiÓn thÞ
Nối ghép LCD với vi xử lý 8051: LCD gồm có hai hàng hàng đơn vị, hàng chục, hàng trăm. Hàng đầu là giá trị nhập vào ®Ó động cơ chạy, hàng thứ hai là giá trị mà thực chất động cơ chạy và được hiển thị trên LCD.
Hoạt động của LCD:
Trong những năm gần đây, màn hình tinh thể lỏng LCD (Liquid Crystal Display) ngày càng được sử dụng rộng rãi và đang dần thay thế các đèn LED (7 thanh và nhiều thanh). Đó là do các nguyên nhân sau:
-Màn hình LCD có giá thành hạ
-Khả năng hiển thị số, ký tự và đồ hoạ tốt hơn nhiều so với đèn LED (đèn LED chỉ hiển thị được số và một số ký tự).
-Sử dụng thêm một bộ điều khiển làm tươi LCD và như vậy giải phóng CPU khỏi công việc này. Còn đối với đèn LED luôn cần CPU (hoặc bằng cách nào đó) để duy trì vieec hiển thị dữ liệu.
-Dễ dàng lập trình các ký tự và đồ hoạ.
Mô tả chân của LCD:
LCD giới thiệu ở đây có 14 chân. Chức năng của các chân được trình bày trong bảng như sau:
Chân
Ký hiệu
I/O
Mô tả
1
VSS
-
Đất
2
VCC
-
Dương nguồn +5V
3
VEE
-
Nguồn điều khiển tương phản
4
RS
I
RS = 0 chọn thanh ghi lệnh
RS = 1 chọn thanh ghi dữ liệu
5
R/W
I
R/W = 1 đọc dữ liệu
R/W = 0 ghi
6
E
I/O
Cho phép
7
DB0
I/O
Bus dữ liệu 8 bits
8
DB1
I/O
Bus dữ liệu 8 bits
9
DB2
I/O
Bus dữ liệu 8 bits
10
DB3
I/O
Bus dữ liệu 8 bits
11
DB4
I/O
Bus dữ liệu 8 bits
12
DB5
I/O
Bus dữ liệu 8 bits
13
DB6
I/O
Bus dữ liệu 8 bits
14
DB7
I/O
Bus dữ liệu 8 bits
RS (Register Select) - chọn thanh ghi:
Có hai thanh ghi rất quan trọng bên trong LCD. Chân RS được dùng để chọn các thanh ghi này. Nếu RS = 0 thì thanh ghi mã lệnh được chọn, cho phép người dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v…Nếu RS = 1 thì thanh ghi dữ liệu được chọn và cho phép người dùng gửi dữ liệu cần hiển thị lên LCD.
R/W (Read/Write) – chân đọc/ghi:
Chân vào đọc/ghi cho phép người dùng đọc/ghi thông tin từ/lên LCD. R/W = 0 thì đọc, R/W = 1 thì ghi.
E (Enable) – chân cho phép:
Chân E được LCD sử dụng để chốt thông tin hiện có trên chân dữ liệu. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức Cao-xuống-thấp được áp đến chân E để LCD chốt dữ liệu trên chân dữ liệu. Xung này phải rộng tối thiểu 450ns.
6.D0 – D7:
Đây la 8 chân dữ liệu 8 bits, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD.
Để hiển thị chữ cái và con số, mã ASCII của các chữ cái từ A đến Z, a đến z, và các con số tự 0 – 9 được gửi đến các chân này khi RS = 1.
Cũng có các mã lệnh được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ.
Cũng có thể sử dụng RS = 0 để kiểm tra bit cờ bận xem LCD đã sẵn sàng nhận thông tin chưa. Khi R/W = 1 và RS = 0 thì cờ bận D7 thực hiện các chức năng như sau: Nếu D7 = 1 (cờ bận bằng 1) có nghĩa LCD đang bận các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào, còn nếu D7 = 0 thì LCD sẵn s
Các file đính kèm theo tài liệu này:
- Đo và điều khiển tốc độ động cơ dùng vi điều khiển 8051.doc