Tải bản đầy đủ (.doc) (66 trang)

Sử dụng Dspic để đo tốc độ động cơ có số xung là 100 xung, mô phỏng trên phần mềm Proteus

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.11 MB, 66 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC MỎ - ĐỊA CHẤT

TIỂU LUẬN
XỬ LÝ TÍN HIỆU TRONG CÔNG NGHIỆP
Giảng viên hướng dẫn : PGS.TS NGUYỄN ĐỨC
KHOÁT
Học viên : NGUYỄN HỮU CƯỜNG
Lớp : Tự động hóa K26
Hà Nội tháng 5 – 2014
Lời nói đầu
Hiện nay sự tiến bộ khoa học kĩ thuật trên thế giới diễn ra nhanh chóng, với sự ra
đời của hàng loạt những sản phẩm mới ứng dụng những tiến bộ ở những nước phát
triển. Đặc biệt trong những năm gần đây kĩ thuật điều khiển phát triển mạnh mẽ, có
nhiêug công nghệ điều khiển mới được ra đời để thay thế cho những công nghệ
truyền thống.
Để bắt kịp với tiến bộ khoa học kĩ thuật trên thế giới cũng như đáp ứng yêu cầu
CNH_HĐH đất nước thì ngành công nghiệp Việt Nam đang thay đổi nhanh chóng,
công nghệ và thiết bị hiện đại đang dần dần được thay thế các công nghệ lạc hậu và
thiết bị cũ. Các thiết bị công nghệ tiên tiến với hệ thống điều khiển lập trình PLC, Vi
xử lý, điện khí nén, điện tử đã và đang được ứng dụng rộng rãi trong công nghiệp
như các dây truyền sản xuất, chế biến, máy điều khiển theo chương trình CNC, các
hệ thống đèn giao thông, các hệ thống báo động…vv. Trong các trường đại học, cao
đẳng và các trường trung học đã và đang đưa các thiết bị hiện đại có khả năng lập
trình được vào giảng dạy. Một trong những loại thiết bị có ứng dụng mạnh mẽ và
đảm bảo có độ tin cậy cao là hệ thống vi xử lý
Với yêu cầu “Sử dụng Dspic để đo tốc độ động cơ có số xung là 100 xung, mô
phỏng trên phần mềm Proteus”. Em đã nhận thấy được những ưu điểm của hệ
thống điều khiển có hiệu quả cao này.
Sau quá trình học tập rèn luyện và nghiên cứu em đã tích luỹ được vốn kiến thức để
thực hiện tiểu luận của mình.


Cùng với sự hướng dẫn tận tình của thầy giáo Nguyễn Đức Khoát, đến nay em đã
hoàn thành đề tài này với nội dung sau:
1. Tìm hiểu được ngôn ngữ lập trình C cho vi điều khiển
2. Tìm hiểu nghiên cứu bộ vi điều 8 bit PIC16F877
3. Thiết kế mô hình mô phỏng dựa trên phần mềm Proteus
4. Chạy mô phỏng và hoàn thành thuyết minh.
Do thời gian nghiên cứu có hạn nên không thể tránh khỏi nhưng sai sót, em rất
mong nhận đựơc sự chỉ dẫn của thầy hướng dẫn,và sự góp ý các bạn học viên để
giúp chuyên đề của em hoàn thiện hơn, đáp ứng đầy đủ những mục tiêu đã đặt ra.
Em xin chân thành cảm ơn!
Vĩnh Phúc, ngày 8 tháng 5 năm 2014
HỌC VIÊN
Nguyễn Hữu Cường
CHƯƠNG I. TÌM HIỂU NGÔN NGỮ LẬP TRÌNH CHO VI ĐIỀU KHIỂN
I. Ngôn ngữ C cho vi điều khiển
1.1. Giới thiệu ngôn ngữ C
Trong kỹ thuật lập trình vi điều khiển nói chung, ngôn ngữ lập trình được sử dụng
thường chia làm 2 loại: Ngôn ngữ bậc thấp và Ngôn ngữ bậc cao.
Ngôn ngữ bậc cao là các ngôn ngữ gần vơi ngôn ngữ con người hơn, do đó
việc lập trình bằng các ngôn ngữ này trở nên dễ dàng và đơn giản hơn. Có thể kể
đến một số ngôn ngữ lập trình bậc cao như C, Basic, Pascal… trong dó C là ngôn
ngữ thông dụng hơn cả trong kỹ thuật vi điều khiển. Về bản chất, sử dụng các ngôn
ngữ này thay cho ngôn ngữ bậc thấp là giảm tải cho lập trình viên trong việc nghiên
cứu các tập lệnh và xây dựng các cấu trúc giải thuật. Chương trình viết bằng ngôn
ngữ bậc cao cũng sẽ được một phần mềm trên máy tính gọi là trình biên dịch
(Compiler) chuyển sang dạng hợp ngữ trước khi chuyển sang mã máy.
Khi sử dụng ngôn ngữ C người lập trình không cần hiểu sâu sắc về cấu trúc
của bộ vi điều khiển. Có nghĩa là với một người chưa quen với một vi điểu khiển
cho trước sẽ xây dựng được chương trình một cách nhanh chóng hơn, do không phải
mất thời gian tìm hiểu kiến trúc của vi điều khiển.

1.2. Ngôn ngữ C
1.2.1. Kiểu dữ liệu
a. Kiểu dữ liệu trong C
Kiểu Số Byte Khoảng giá trị
Char 1 -128 – +127
Unsigned char 1 0 – 255
Int 2 -32768 - +32767
Unsigned int 2 0 - 65535
Long 4 -2147483648 - +2147483647
Unsigned long 4 0 – 4294697295
Float 4
b. Kiểu dữ liệu trong Keil C
Kiểu Số bit
Bit 1
Sbit 1
Sfr 8
Sfr16 16
c. Mảng
Mảng là một tập hợp nhiều phần tử cùng một kiểu giá trị và chung một tên.
Các phần tử của mảng phân biệt với nhau bởi chỉ số hay số thứ tự của phần tử trong
dãy phẩn tử. Mỗi phần tử có vai trò như một biến và lưu trữ được một giá trị độc lập
với các phần tử khác của mảng. Mảng có thể là mảng một chiều hoặc mảng nhiều
chiều
Khai báo:
- Cú pháp: Tên_kiểu Vùng_nhớ Tên_mảng[số_phần_tử_mảng];
d. Con trỏ
Con trỏ là một biến dùng để chứa địa chỉ mà không chứa giá trị, hay giá trị
của con trỏ chính là địa chỉ khoảng nhớ mà nó trỏ tới.
Loại con trỏ Kích thước
Con trỏ tổng quát 3 byte

Con trỏ XDATA 2 byte
Con trỏ CODE 2 byte
Con trỏ DATA 1 byte
Con trỏ IDATA 1 byte
Con trỏ PDATA 1 byte
1.2.2. Phép toán
Phép gán kí hiệu: “=”.
- Cú pháp: Biến_1 = Biến_2;
Trong đó Biến_2 có thể là giá trị xác định cũng có thể là biến.
a. Phép toán số học
Phép toán ý nghĩa Ví dụ
+ Phép cộng X=a+b
- Phép trừ X=a-b
* Phép nhân X=a*b
/ Phép chia lấy phần nguyên X=a/b: (a=9, b=2 → X=4)
% Phép chia lấy phần dư a%b : (a=9, b=2 → X=1)
b. Phép toán Logic
AND: &&
OR: ||
NOT: !
c. Các phép toán so sánh:
d. Phép toán thao tác Bit
Phép toán Ý nghĩa Ví dụ
& Phép và (AND) Bit_1 & Bit_2
| Phép hoặc (OR) Bit_1 | Bit_2
! Phép đảo (NOT) !Bit_1
^ Phép hoặc loại trừ (XOR) Bit_1 ^ Bit_2
<< Dịch trái a<<3
>> Dịch phải a>>4
~ Lấy bù theo bit ~a

1.2.3. Cấu trúc chương trình C
a. 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
b. Chỉ thị tiền xử lý
+ Phép thay thế #define
+ Phép chèn tệp #include
+ Phép lựa chọn biên dịch #ifdef
* Chỉ thị #define
- Cú pháp: #define Tên_thay_thế dãy_kí_tự
* Chỉ thị #include
- Cú pháp:
Phép
toán
ý nghĩa Ví dụ
> So sánh lớn hơn a>b : 4>5 các giá trị 0
>= So sánh lớn hơn hoặc bằng a>=b : 6>=2 các giá trị 1
< So sánh nhỏ hơn a<b : 6<7 các giá trị 1
<= So sánh nhỏ hơn hoặc bằng a<=b : 8<=5 các giá trị 0
== So sánh bằng nhau a==b : 6==6 các giá trị 1
!= So sánh khác nhau a!=b : 9!=9 các giá trị 0
Cách 1: #include<tên_tệp>
Cách 2: #include“tên_tệp”
* Chỉ thị #ifdef
- Cú pháp:
Cách 1: #ifdef ten_macro
Đoạn chương trình

#endif
Cách 2: #ifdef ten_macro
Đoạn chương trình 1
#else
Đoạn chương trình 2
#endif
* Chỉ thị #ifndef
- Cú pháp:
Cách 1: #ifndef ten_macro
Đoạn chương trình
#endif
Cách 2: #ifndef ten_macro
Đoạn chương trình 1
#else
Đoạn chương trình 2
#endif
1.2.4. Các lệnh cơ bản trong C
+ Câu lệnh rẽ nhánh if:
- Cấu trúc: if(dieu_kien)
{
// Đoạn chương trình
}
- Cấu trúc: if(dieu_kien)
{
// Đoạn chương trình 1
}
else
{
// Đoạn chương trình 2
}

+ Câu lệnh lựa chọn:
Cấu trúc: switch(bien)
{
case gia_tri_1: {//các câu lệnh break;}
……………………………………
case gia_tri_n: {//các câu lệnh break;}
}
+ Vòng lặp xác định:
Cấu trúc: for(n=m;n<l;n++)
{
// các câu lệnh xử lí
}
+ Vòng lặp không xác định while:
Cấu trúc: while(dieu_kien)
{
// các câu lệnh
}
+ 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);
1.3. Trình biên dịch Keil C (compiler)
1.3.1. Khởi tạo cho Project.
Để tạo 1 project mới chọn project → New project như sau:
Đánh tên và chuyển đến thư mục bạn lưu project.bạn nên tạo mỗi một thư mục cho
1 project. rồi chọn save. Hộp thoại sau hiện ra:
Trong này có 1 loạt các hãng điện tử sản xuất 8051. bạn lập trình cho con nào thì
chọn con đấy, kích chuột vào dấu + để mở rộng các con IC của các hang. ở đây ta
lập trình cho AT89C51 của hang ATMEL nên ta chọn như trên.

Khi chọn chip thì ngay lập tức 1 bảng hiện ra 1 số tính năng của chip các bạn có thể
nhìn thấy: 8051 based fully static 24Mhz …. nhập OK. Để tạo một file code các bạn
chọ file → new hoặc ấn ctrl+N. như sau:
Cửa sổ text1 hiện ra. Tiếp theo bạn chọn File → save As hoặc Ctrl+S, để lưu File
mặc dù chưa có gì như sau:
Được cửa sổ sau:
Các bạn nhập tên vào text box file name.chú ý tên gì cũng được nhưng không được
thiếu đuôi mở rộng .C, và nhấn SAVE.
Trong ô bên trái màn hình, cửa sổ PROJECT WORKSPACE, các bạn mở rộng cái
target 1 ra như sau:
Nhấp chuột phải nên SOURCE GROUP, chọn Add file to Group “Source Group 1”
hộp thoại hiện ra chọn file .C mà các bạn vừa SAVE rồi nhấn Add 1lấn rồi nhấn
Close. nếu bạn nhấn Add 2 lần nó sẽ thong báo là file đã add bạn chỉ việc OK rồi
nhấn Close. Được như sau:
Bây giờ trong hình nhìn thấy trong Source Group 1 có file VIDU.C. các bạn nhấp
chuột phải vào vùng soạn thảo file VIDU.C để thêm file thư viện. Chon Insert
“#include<REGX51.H>”.
Phần cuối cùng của công việc khởi tạo là các bạn viết lời giải thích cho dự án của
mình. phần này rất cần thiết vì nó để người khác hiểu mình làm gì trong project này
và khi mình cần sử dụng lại code đọc lại còn biết nó là cái gì.
1.4. Soạn thảo chương trình.
Ta viết thử 1 chương trình làm ví dụ. khi viết xong mỗi dòng lệnh nên giải thích
dòng lệnh đó làm gì. Ví dụ:
1.5. Biên dịch một chương trình.
Sau khi soạn thảo xong nhấn Ctrl+S để nhớ. Nhớ xong các bạn biên dịch chương
trình bắng cách ấn phím F7 hoặc chọn Build target là biểu tượng ngay trên cửa sổ
Workspace, như trên hình:
Để biên dịch chương trình thành file HEX các bạn chọn: Project→option for
‘target 1’ như hình vẽ:
Trong hộp thoại hiện ra, hãy check vào Creat HEX File như chỉ dẫn: chọn thẻ táp

target nhập lại tần số thạch anh là 12Mhz.
Để mô phỏng các bạn chon Debug→Start/stop debug session hoặc ấn Ctrl+F5,
hoặc nhấn vào Icon chữ D màu đỏ trong cái kính lúp trên thanh công cụ.
Để chạy chương trình các bạn ấn chuột phải vào màn hình soạn thảo, rồi ấn F11.mỗi
làn ấn sẽ chạy 1 lệnh.khi debug nếu các bạn chờ hàm delay lâu quá 1000 lần lặp các
bạn nhấn ctrl+F11 để bỏ qua hàm hoặc ấn F10 để chạy từng dòng lệnh
II. Ví dụ minh họa: Điều khiển Led đơn, Led 7 thanh và nút nhấn
1.1. Hiển thị Led đơn
Bài toán:Ghép nối LED đơn với chân P1.0 của vi điều khiển, viết chương trình
điều khiển LED nhấp nháy với thời gian trễ là 1s.
+ Chương trình điều khiển:
/*==================Bo tien xu li===================*/
#include<AT89x51.h> // Dinh kem file thu vien
#define bat 1 // Dinh nghia gia tri bat den Led
#define tat 0 // Dinh nghia gia tri tat den Led
/*==================khai bao bien==================*/
sbit Led = P1^0; // Khai bao bien Led kieu bit chan P1.0
/*================= Khai bao hàm==================*/
/* ham tre */
void delay(long time)
{
while(time );
}
/* ham chinh */
void main(void)
{
while(1)
{
Led = bat; // bat Led
delay(25000); // tre 1s

Led = tat; // tat Led
delay(25000); //tre 1s
}
}
1.2. Hiển thị LCD
1.2.1. Ghép nối vi điều khiển với LCD 16x2.
- Sơ đồ ghép nối LCD với vi điều khiển:
Bài toán : Hãy viết chương trình hiển thị trên LCD:
Dòng 1 chữ “VIETNAM” bằng cách hiển thị tưng kí tự
Dòng 2 chữ "VI DIEU KHIEN" bằng cách hiển thị cả chữ. Với sơ đồ mạch cho dướí
đây.
Chương trình:
/*=========bo tien xu li===============*/
#include<AT89x51.h>
#include<string.h>
/*===========khai bao bien toan cuc============*/
sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
sbit BF = 0xA7; // co ban, bit DB7.
sbit RS = P3^0; // chon thanh ghi
sbit RW = P3^1; // doc/ghi
sbit EN = P3^2; //cho phep chot du lieu
/*===========cac chuong trinh con cua LCD==========*/
/* kiem tra su san sang cua LCD */
void wait(void)
{
RS=0; //chon thanh ghi lenh
RW=1; //đoc tu LCD
LCDdata=0xff; //gia tri 0xff
while(BF) //kiem tra co ban
{

EN=0; //dua xung cao xuong thap đe chot.
EN=1; //dua chan cho phep len cao
}
}
/* thiet lap lenh cho LCD */
void LCDcontrol(unsigned char x)
{
RS=0;//chon thanh ghi lenh
RW=0;//ghi len LCD.
LCDdata=x ;// gia tri x
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//đoi LCD san sang.
}
/* Khoi tao LCD */
void LCDinit(void)
{
LCDcontrol(0x38);//2 dong va ma tran 5x7
LCDcontrol(0x0e);//bat man hinh, bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/* thiet lap du lieu cho LCD */
void LCDwrite(unsigned char c)
{
RS=1;//ghi du lieu
RW=0;//ghi du lieu len LCD
LCDdata=c;//gia tri C
EN=1;//cho phep muc cao
EN=0;//xung cao xuong thap
wait();//cho

}
void LCDwrites(unsigned char *s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++){
LCDwrite(*(s+count));
}
}
/*=====================chuong trinh tre================*/
void delay(long time)
{
while(time );
}
/*========================ham chinh==================*/
void main(void)
{
LCDinit(); // khoi tao LCD
LCDcontrol(0x82);// dua con tro den vi tri thu 4 dong 1
LCDwrite(‘V’);
LCDwrite(‘I’);
LCDwrite(‘E’);
LCDwrite(‘T’);
LCDwrite(‘ ’);
LCDwrite(‘N’);
LCDwrite(‘A’);
LCDwrite(‘M’);
LCDcontrol(0xC0);
LCDwrites("VI DIEU KHIEN");
while(1); //vong lap vo han

}
}
CHƯƠNG II. NGHIÊN CỨU KHẢO SÁT BỘ VI ĐIỀU KHIỂN 8 BÍT
PIC16F877
1. Giới thiệu bộ vi điều khiển 8 bít
Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong
các lĩnh vực kỹ thuật và đời sống xã hội, đặc biệt là trong kỹ thuật tự động
hoá và điều khiển từ xa. Giờ đây với nhu cầu chuyên dụng hoá, tối ưu (thời
gian, không gian, giá thành), bảo mật, tính chủ động trong công việc ngày
càng đòi hỏi khắt khe. Việc đưa ra công nghệ mới trong lĩnh vực chế tạo
mạch điện tử để đáp ứng những yêu cầu trên là hoàn toàn cấp thiết mang tính
thực tế cao.
1.1. Khái niệm về bộ vi điều khiển
Để hiểu khái niệm về bộ vi điều khiển, ta có thể làm phép so sánh nó với bộ
vi xử lý công dụng chung như sau:
Ta biết rằng, các bộ vi xử lý công dụng chung như họ Intel x86 (8086,
80286, 80386, 80486 và Pentium) hoặc họ Motorola 680x0(6800, 68010,
68020, 68030, 68040 vv ) không có RAM, ROM và không có các cổng ra
vào trên chip Với lý do đó mà chúng được gọi là các bộ vi xử lý công dụng
chung.
Một nhà thiết kế hệ thống sử dụng một bộ vi xử lý công dụng chung chẳng
hạn như Pentium hay 68040 sẽ phải bổ xung thêm RAM, ROM, các cổng
vào ra và các bộ định thời ngoài để làm cho chúng hoạt động được. Mặc dù
việc bổ xung các RAM, ROM, các cổng vào ra sẽ làm cho hệ thống cồng
kềnh lên nhưng nó lại có ưu điểm khi sử dụng các bộ vi xử lý này là rất linh
hoạt. Chẳng hạn như người thiết kế có thể quyết định về số lượng RAM,
ROM, và các cổng vào ra cần thiết sao cho phù hợp với khả năng, mục đích
sử dụng của hệ thống.
Điều này không thể có đối với các bộ vi điều khiển. Bởi vì, một bộ vi điều
khiển đã có một CPU (một bộ vi xử lý) cùng với một số lượng RAM, ROM,

các
cổng vào ra và một bộ định thời trên cùng một chíp. Hay nói cách khác là bộ
vi
xử lý, RAM, ROM, các cổng vào ra và một bộ định thời cùng được nhúng
trên
một chip. Do vậy người thiết kế không thể bổ xung thêm bộ nhớ ngoài, số
các
cổng vào ra hoặc bộ định thời cho nó. Với số lượng RAM, ROM và số các
cổng
vào ra cố định như vậy là một mặt hạn chế (k m linh hoạt) xong nó lại thật sự

tưởng đối với những ứng dụng mang tính chuyên biệt, tối ưu về giá thành, tối
ưu
về không gian
Hiện nay trên thị truờng có các bộ vi điều khiển 8 bít chính là. 6811 của
Motorola, 8051 của Intel, Z8 của Xilog và Pic16x của Microchip Technology.
Mỗi loại trên đây đều có một tập lệnh và thanh ghi riêng duy nhất, nên chúng
đều không tương thích lẫn nhau. Cũng có những bộ vi điều khiển 16 bít và 32 bít
được
sản xuất ra bởi các hãng sản xuất chíp khác nhau.
1.2. Những yêu cầu để lựa chọn một bộ vi điều khiển là:
. Đáp ứng nhu cầu tính toán của bài toán một cách hiệu quả về mặt giá thành
và đầy đủ chức năng có thể nhìn thấy được, (khả dĩ).
. Có sẵn các công cụ phát triển phần mềm chẳng hạn như các trình biên
dịch trình hợp ngữ và gỡ rối.
. Nguồn các bộ vi điều khiển có sẵn nhiều và tin cậy.
1.3. Các tiêu chuẩn lựa chọn một bộ vi điều khiển:
Tiêu chuẩn đầu tiên và trước hết trong lựa chọn một bộ vi điều khiển là nó
phải đáp ứng nhu cầu bài toán về mặt công suất tính toán, giá thành và hiệu
quả. Trong khi phân tích các nhu cầu của một dự án dựa trên bộ vi điều khiển,

chúng ta trước hết phải biết là bộ vi điều khiển nào là 8 bít, 16 bít hay 32 bít
có thể đáp ứng tốt nhất nhu cầu tính toán của bài toán một cách hiệu quả nhất.
. Những tiêu chuẩn được đưa ra để cân nhắc là:
. Tốc độ: Tốc độ lớn nhất mà bộ vi điều khiển hỗ trợ là bao nhiêu.
. Kiểu đóng vỏ: Đó là kiểu 40 chân DIP hay QFP hay là kiểu đóng vỏ khác.
Đây là điều quan trọng đối với yêu cầu về không gian, kiểu lắp ráp và tạo
mẫu thử cho sản phẩm cuối cùng.
. Công suất tiêu thụ: Điều này đặc biệt khắt khe đối với những sản phẩm
dùng pin, ắc quy.
. Dung lượng bộ nhớ RAM và ROM trên chíp. . Số
chân vào - ra, bộ định thời, số ngắt trên chíp.
. Khả năng dễ dàng nâng cấp cho hiệu suất cao hoặc giảm công suất tiêu
thụ.
. Giá thành cho một đơn vị: Điều này quan trọng quyết định giá thành cuối
cùng của sản phẩm mà một bộ vi điều khiển được sử dụng.
2. Bộ Vi điều khiển 8 bit PIC16F877
2.1. Đặc tính nổi bật của bộ vi xử lí.
+ Sử dụng công nghệ tích hợp cao RISC CPU.
+ Người sử dụng có thể lập trình với 35 câu lệnh đơn giản.
+ Tất cả các câu lệnh thực hiện trong một chu kì lệnh ngoại trừ một số câu
lệnh rẽ nhánh thực hiện trong 2 chu kì lệnh.
+ Tốc độ hoạt động là: - Xung đồng hồ vào là DC- 20MHz
- Chu kỳ lệnh thực hiện trong 200ns
+ Bộ nhớ chương trình Flash 8Kx14
words + Bộ nhớ Ram 368x8 bytes
+ Bộ nhớ EFPROM 256x 8 bytes
- Khả năng của bộ vi xử lí này
+ Khả năng ngắt ( lên tới 14 nguồn ngắt trong và ngắt
ngoài ) + Ngăn nhớ Stack được phân chia làm 8 mức
+ Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián

tiếp. + Nguồn khởi động lại (POR)
+ Bộ tạo xung thời gian (PWRT) và bộ tạo dao động (OST)
+ Bộ đếm xung thời gian (WDT) với nguồn dao động trên chíp (nguồn dao động RC
) hoạt động đáng tin cậy.
+ Có mã chương trình bảo vệ.
+ Phương thức cất giữ SLEEP
+ Có bảng lựa chọn dao động.
+ Công nghệ CMOS FLASH /EEPROM nguồn mức thấp ,tốc độ
cao. + Thiết kế hoàn toàn tĩnh .
+ Mạch chương trình nối tiếp có 2 chân. + Xử
lý đọc /ghi tới bộ nhớ chương trình . + Dải
điện thế hoạt động rộng : 2.0V đến 5.5V +
Nguồn sử dụng hiện tại 25 mA
+ Dãy nhiệt độ công nghiệp và thuận lợi .
+ Công suất tiêu thụ thấp:
< 0.6mA với 5V, 4MHz
20 A với nguồn 3V, 32 kHz
< 1 A nguồn dự phòng.
Các đặc tính nổi bật của thiết bị ngoại vi trên chip
+ Timer0: 8 bít của bộ định thời, bộ đếm với hệ số tỷ lệ trước
+ Timer1: 16 bít của bộ định thời, bộ đếm với hệ số tỷ lệ trước, có khả năng
tăng trong khi ở chế độ Sleep qua xung đồng hồ được cung cấp bên ngoài.
+ Timer 2: 8 bít của bộ định thời, bộ đếm với 8 bít của hệ số tỷ lệ trước, hệ số
tỷ lệ sau
+ Có 2 chế độ bắt giữ, so sánh, điều chế độ rộng xung(PWM).
+ Chế độ bắt giữ với 16 bít, với tốc độ 12.5 ns, chế độ so sánh với 16 bít, tốc
độ giải quyết cực đại là 200 ns, chế độ điều chế độ rộng xung với 10 bít.
+ Bộ chuyển đổi tín hiệu số sang tương tự với 10 bít .
+ Cổng truyền thông nối tiếp SSP với SPI phương thức chủ và I2C(chủ/phụ)
+ Bộ truyền nhận thông tin đồng bộ, dị bộ(USART/SCL) có khả năng phát

hiện 9 bít địa chỉ.
+ Cổng phụ song song (PSP) với 8 bít mở rộng, với RD, WR và CS điều
khiển.
.Sơ đồ các chân PIC16F87X.
.
Sơ đồ khối bộ vi điều khiển PIC16F87X
2.2. So sánh với bộ vi điều khiển 8051
*Bộ vi điều khiển 8051 là bộ VĐK đầu tiên thuộc họ VĐK x51 được sản xuất
bởi công ty Intel, Siemens, Advanced Micro Devices, Fujitsu, Philips.
Các đặc điểm chung của bộ VĐK này:
. 4KB ROM
. 128 B RAM
. 4 cổng I/O 8 bit
. 2 Timer 16 bit
. Có khả năng quản lý được 64 KB bộ nhớ mã chương trình ngoài (ROM
ngoài).
. Có khả năng quản lý được 64 KB bộ nhớ dữ liệu ngoài (RAM ngoài) .
Có bộ xử lý logic riêng (thao tác trên các bit)
. Có thể thao tác trực tiếp được 210 bit (các bit này đã được địa chỉ hoá) .
Có 5 ngắt
. Dùng nguồn dao động ngoài
. Dùng điện áp 5V để cho chip hoạt động
*Cổng P0: Có dạng cực máng hở và có 8 chân (8 bit) là cổng vào/ra hoặc là
cổng chuyển dữ liệu và địa chỉ.
*Cổng P1: Là cổng vào/ra có 8 chân (8 bit).
*Cổng P2: Có 8 chân (8 bit) là cổng vào/ra hoặc là cổng chuyển dữ liệu và
địa chỉ.
*Cổng P3: Có 8 chân, cổng này có thể là cổng vào/ra 8 bit hay còn có các
chức năng quan trọng khác như phục vụ cho ngắt, các bộ định thời, việc
truyền nhận dữ liệu truyền thông nối tiếp, đọc và ghi các bộ nhớ ngoài…

Sơ đồ khối của VĐK 8051:
Timer 0
Timer 1
Int 1
Int 0
Interupt
control
CPU
Oscilator
Serial Ports
Registers
Bus
RAM128
bytes
I / O Ports
ROM
4 K
Timer 0
Timer 1
Serial port
T
P0 P2
P1 P3
TxD RxD
GND
Như vậy có thể thấy đặc điểm đầu tiên mà PIC16F877 đem lại và nổi bật so
với VĐK
8051 là dòng PIC16F877 những đặc tính kĩ thuật hơn hẳn so với bộ VĐK
8051 thể hiện ở những điểm sau:
VĐK8051 VĐK PIC16F877

Đặc tính Số lượng Đặc tính Số
lượng
ROM trên chíp 4K byte ROM trên chíp 8K
RAM 128 byte RAM 368 byte
Bộ định thời 2 Bộ định thời 3
Các chân vào ra 32 Các chân vào ra 40
Cổng nối tiếp 1 Cổng nối tiếp 2
Nguồn ngắt 6 Nguồn ngắt 14
Ngoài những đặc tính trên thì bộ vi điều khiển PIC16F877 còn có một đặc
điểm hơn hẳn so với 8051 là có 10 bít chuyển đổi A/D trên chíp điều này sẽ giúp
chúng ta không phải mất một bộ chuyển đổi (sẽ dẫn đến kết nối dây trở nên
phức
tạp).
Một đặc điểm nữa là bộ vi điều khiển PIC16F877 có bộ tạo dao động chủ
trên chíp điều này sẽ tránh được những sai số không cần thiết trong việc tạo
xung dao động, vi điều khiển PIC16F877 có khả năng tự Reset bằng bộ
WDT, và có thêm 256 byte EEPROM.
2.3. Sự tổ chức bộ nhớ Pic16F877.
Pic16F877 có 3 khối bộ nhớ. Bộ nhớ chương trình PLASH, bộ nhớ dữ liệu
RAM, bộ nhớ EEPROM.
2.3.1. Sự tổ chức bộ nhớ chương trình FLASH và Stack nhớ.
Vi điều khiển PIC16F877 có một bộ đếm chương trình 13 bit và có 8Kx14
từ mã của bộ nhớ chương trình FLASH, được chia thành 4 trang mỗi trang
2Kx14 từ mã.
Khi Reset địa chỉ bắt đầu thực hiện chạy là 0000h, Vector ngắt bắt đầu
0004h.
Stack có 8 mức dùng để lưu địa(PC) chỉ lệnh thực hiện tiếp theo sau lệnh
CALL và khi xẩy ra ngắt.
Bản đồ bộ nhớ chương trình và các ngăn xếp.

×