GIỚI THIỆU TỔNG QUAN VỀ HỌ 8051 Vi điều khiển 8051 – Mô tả phần cứng Vi điều khiển 8051 là một trong những họ vi điều khiển 8bit thông dụng nhất trên thế giới. Vi điều khiển này được chế tạo lần đầu tiên bởi hãng Intel, sau đó được các hãng khác chế tạo dưới dạng các dẫn xuất khác nhau. Các dẫn xuất này đều có chung một kiến trúc giống với vi điều khiển 8051 kinh điển. Thêm vào đo, tùy theo từng loại mà các chip dẫn xuất được tích hợp thêm các ngoại vi khác nhau (như ADC, SPI, EEPROM, capturecompare channels…), tính năng cũng được nâng cao để phù hợp với các ứng dụng ngày càng phức tạp. Trước hết xin giới thiệu một số tính năng của họ vi điều khiển 8051 (lưu ý là những tính năng này là của vi điều khiển 8051 kinh điển): CPU 8bit được thiết kế tối ưu cho các ứng dụng điều khiển. Co cac khả năng xử lý bit logic. Không gian bộ nhớ chương trình 64Kbyte. Không gian bộ nhớ dữ liệu 64 Kbyte. Tích hợp 4Kbyte bộ nhớ chương trình trên chip. Tích hợp 128byte bộ nhớ RAM trên chip.
Trang 1BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
Trang 2A.GIỚI THIỆU TỔNG QUAN VỀ HỌ 8051
Vi điều khiển 8051 – Mô tả phần cứng
Vi điều khiển 8051 là một trong những họ vi điều khiển 8bit thông dụngnhất trên thế giới Vi điều khiển này được chế tạo lần đầu tiên bởi hãng Intel,sau đó được các hãng khác chế tạo dưới dạng các dẫn xuất khác nhau Cácdẫn xuất này đều có chung một kiến trúc giống với vi điều khiển 8051 kinhđiển Thêm vào đo, tùy theo từng loại mà các chip dẫn xuất được tích hợpthêm các ngoại vi khác nhau (như ADC, SPI, EEPROM, capture/comparechannels…), tính năng cũng được nâng cao để phù hợp với các ứng dụngngày càng phức tạp
Trước hết xin giới thiệu một số tính năng của họ vi điều khiển 8051(lưu ý là những tính năng này là của vi điều khiển 8051 kinh điển):
- CPU 8bit được thiết kế tối ưu cho các ứng dụng điều khiển
- Co cac khả năng xử lý bit logic
- Không gian bộ nhớ chương trình 64Kbyte
- Không gian bộ nhớ dữ liệu 64 Kbyte
- Tích hợp 4Kbyte bộ nhớ chương trình trên chip
- Tích hợp 128byte bộ nhớ RAM trên chip
- Có 32 đường vàoo/ra 2 chiều cố thể định địa chỉ đến từng bit
- Tích hợp 02 timer 16bit
- Tích hợp UART song song
- Cấu trúc ngắt với 06 nguồn/05 vector ở 02 mức ưu tiên khác nhau
- Tích hợp mạch bộ dao động trên chip
Vi điều khiển được giới thiệu ở đây được sản xuất theo công nghệ CMOS.Một số loại vi điều khiển thông dụng thuộc họ 8051 có thể kể ra như:AT89C2051( 20 chân), AT89C4051( 20 chân), AT89C51( 40 chân),
Trang 3AT89C52( 40 chân), AT89S51( 40 chân), AT89S52( 40 chân),AT89S53( 40 chân)
Sau đây là sơ đồ khối tổng quan của 8051
Trang 4I-Cấu trúc phần cứng họ 8051( AT 89S52)
Sơ đồ chân AT 89S52
Bộ vi điều khiển AT89S52 gồm các khối chức năng chính sau đây:
CPU( Central Processing Unit) bao gồm:
- Thanh ghi tích luỹ A
- Thanh ghi tích luỹ phụ B, dùng cho phép nhân và phép chia
- Đơn vị logic học( ALU: Arithmetic Logical Unit)
Trang 5- Từ trạng thái chương trình( PSW: Progam Status Word)
- Bốn băng thanh ghi
- Con trỏ ngăn xếp
Bộ nhớ chương trình( Bộ nhớ ROM) gồm 8Kb Flash.
Bộ nhớ dữ liệu( Bô nhớ RAM) gồm 256 bytes.
Bộ UART( Universal Ansynchronous Receiver and Tranmitter) làm chức
năng truyền nhận nối tiếp, nhờ khối này, AT89S52 có thể giao tiếp với máytính qua cổng COM
3 bộ Timer /Counter 16 bít thực hiện các chức năng định thời và đếm sự
kiện
WDM( Watch Dog Timer) được dùng để phục hồi lại hoạt động của
CPU khi nó bị treo bởi một nguyên nhân nào đó WDM ở AT89S52 gồmmột bộ Timer 14 bít, một bộ Timer 7 bít, thanh ghi WDTPRG( WDTprogramable) điều khiển Timer 7 bit và một thanh ghi chớc năng WDTRST(WDM register) Bình thường WDT không hoạt động( bị cấm), để cho phépWDT, các giá trị 1EH và E1H cần phải được ghi liên tiếp vào thanh ghiWDTRST Timer 14 bit của WDT sẽ đếm tăng dần sau mỗi chu kỳ đồng hồcho đến giá trị 16383 thì xảy ra tràn Khi xảy ra tràn, chân RTS sẽ được đặt
ở mức cao trong thời gian 96.Tosc (Tossc=1/Fosc) và AT89S52 sẽ đượcreset Khi WDT hoạt động, ngoại trừ reset phần cứng và reset do WDT trànthì không có cách nào cấm được WDT, vì vậy khi sử dụng WDT thì cácđoạn mã chương trình phải được đặt trong các khe thời gian từ khi giữa cáclần WDT được khởi tạo lại
Trang 6Sơ đồ khối của bộ vi điều khiển 89S52
Trang 7II- Sơ đồ các chân và chức năng
1 Port 0(P0.0-P0.7 hay từ chân 32 đến chân 39): Gồm 8 chân, ngoài chức
năng xuất nhập ra, Port 0 còn là Bus đa hợp dữ liệu và địa chỉ( AD0-AD7),chức năng này sẽ được sử dụng khi AT89S52 giao tiếp với thiết bị ngoài cókiến trúc Bus
Trang 82 Port 1( P1.0-P1,7 hay từ chân 1 đến chân 8) : Có chức năng xuất nhập
theo bit và byte Ngoài ra, 3 chân P1.5, P1.6, P1.7 được dùng để nạp ROMtheo chuẩn ISP, 2 chân P1.0 và P1.1 được dùng cho bộ Timer 2
3 Port 2( P2.0- P2.7 hay từ chân 21 đến chân 28): Là một port có công
dụng kép: là đường xuất nhập hoặc là byte cao của bus địa chỉ đối với cácthiết kế dùng bộ nhớ mở rộng
4 Port 3( P3.0- P3.7 hay từ chân 10 đến chân 17): Mỗi chân trên port 3
ngoài chức năng xuất nhập ra còn có một chức năng riêng:
Trang 9
Bit Tên Chức năng
P3.0 RXD Dữ liệu nhận cho port nối tiếp
P3.1 TXD Dữ liệu phát cho port nối tiếp
P3.2 INT0 Ngắt 0 bên ngoài
P3.3 INT1 Ngắt 1 bên ngoài
P3.4 T 0 Ngõ vào của Timer/Counter 0P3.5 T 1 Ngõ vào của Timer/Counter 1P3.6 WR Xung ghi bộ nhớ dữ liệu bên ngoàiP3.7 RD Xung đọc bộ nhớ dữ liệu bên ngoài
5 RST( Reset- chân 9):
Mức tích cực của chân này là mức 1, để reset ta phải đưa mức 1(5V)đến chân này với thời gian tối thiểu 2 chu kỳ máy( tương đương 2uS đối vớithạch anh 12MHz
Trạng thái của các thanh ghi khi reset, khi reset thì trạng thái của cácthanh ghi không thay đổi
Trang 10
6 Cỏc ngừ vào bộ dao động Xtal1, Xtal2:
Bộ tạo dao động được tích hợp bờn trong 89S52 Khi sử dụng 89S52,người ta chỉ cần nối thêm tụ thạch anh và các tụ Tần số tụ thạch anh thường
là 12 Mhz-24Mhz
7 EA( External Access):
EA thường được mắc lên mức cao(+5V) hoặc mức thấp( GND) Nếu
ở mức cao, bộ vi điều khiển thi hành chương trình từ ROM nội Nếu ở mứcthấp, chương trinh chỉ được thi hành từ bộ nhớ mở rộng
8 ALE( Address Latch Enable):
Trang 11ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửađầu của chu kỳ bộ nhớ Sau đó các đường port 0 dùng để xuất hoặc nhập dữliệu trong nửa chu kỳ sau của bộ nhớ.
9 PSEN( Program Store Enable):
PSEN là điều khiển để cho phép bộ nhớ chương trình mở rộng vàtrường được nối đến chân /OE ( Output Enable) của một EPROM để chophép đọc các bytes mã lệnh
PSEN sẽ ở mức thấp trong thừi gian đọc lệnh Các mã nhị phân củachương trình được đọc từ EPROM qua Bus và được chốt vào thanh ghi lệnhcủa bộ vi điều khiển để giải mã lệnh Khi thi hành chương trình trong ROMnội, PSEN sẽ ở mức thụ động( mức cao)
10 Vcc, GND:
AT89S52 dùng nguồn một chiều có dải điện áp từ 4V-5.5V được cấpqua chân 40(+) và chân 20(-)
Trang 12unsigned char mode = 0;
unsigned char hrs,min,sec,date,month,year;
Trang 13void display()
{
lenh(ve_dau_dong_thu_nhat);
lenh(tat_con_tro); lcd_gotoxy(2,4);
Trang 14if(hrs==24) hrs=0;while(!up);
display();
}else if (down==0)
{hrs ;
Trang 15display();
}display();
if(ok==0 || mode==0) goto escape;
break;
case 2://change minutes
if (up==0)
{min++;
if(min==60)min=0;
while(!up);
display();
}else if (down==0)
{if(min==0)min=60;
min ;
while(!down);
display();
}if(ok==0 || mode==0) goto escape; break;
case 3: //change seconds
Trang 16}display();
if(ok==0 || mode==0) goto escape;
break;
case 4: // chinh ngay
if (!up)
{date ++;
if (month == 2 && date > 28 ) date = 1;
if ((month == 1 || month == 3 || month == 5 ||month == 7 || month == 8 || month == 10 || month == 12) && date > 31)date = 1;
if ((month == 4 || month == 6 || month == 9 ||month == 11 ) && date > 30) date = 1;
while(!up);
display();
}else if (!down)
{date ;
if (date == 0 && month == 2 ) date = 28;
if ((month == 1 || month == 3 || month == 5 ||month == 7 || month == 8 || month == 10 || month == 12) && date == 0)date = 31;
Trang 17month == 11 ) && date == 0) date = 30;
while(!down);
display();
}if(ok == 0 || mode == 0) goto escape; break;
case 5://chinh thang
if (up==0)
{month ++;
if(month > 12) month =1;
while(!up);
display();
}else if (down==0)
{min ;
if(month == 0) month = 12;
while(!down);
display();
}if(ok==0 || mode == 0) goto escape;
Trang 18case 6://chinh nam
if (up==0)
{year++;
if(year == 100 ) year = 1;
while(!up);
display();
}else if (down==0)
{year ;
if(year == 0)year = 99;
while(!down);
display();
}if(ok==0 || mode == 0) goto escape; break;
Trang 19if(hrs==24)
{hrs=0;
date ++;
Trang 20date = 1;
month ++;
}
if ((month == 1 || month == 3 || month == 5 || month == 7
|| month == 8 || month == 10 || month == 12) && date >31)
{date = 1;
month ++;
if(month > 12)
{month = 1;
year ++;
if(year == 100) year = 0;
}}
if ((month == 2 || month == 4 || month == 6 || month == 9
|| month == 11 ) && date >30)
{date = 1;
month ++;
}}
}}
}
}
Trang 21void ngat_hien_thi_thoi_gian_timer_0 (void) interrupt 1{
void lenh(unsigned char LCDcmd);
void write_data(unsigned LCD_data);
void write(char *s);
void khoi_tao_LCD(void);
void write_num(unsigned int number);
void lcd_gotoxy(unsigned char row,unsigned char column);void delay(unsigned int ms)
{
unsigned int i;
Trang 23void write_data(unsigned LCD_data){
Trang 24void write_num(unsigned int number)
Trang 25II Sơ Đồ Nguyên Lý và Mạch In
III.Nguyên Lý hoạt Động
Dùng timer đếm xung để định thời gian,dùng thạch anh 12MHz tức làtrong 1 giây nó sẽ tạo ra 12 triệu xung.con 89 thực hiện lệnh sau mỗi 12xung thạch anh tức là timer đếm đc 1 triệu xung thỡ sẽ được 1 giây cứ thế ta
sẽ có được thời gian cần tính trong con này có tất cả 3 timer, ta dùng 1 timer
để đếm thời gian dùng 1 timer để hiển thị timer này sẽ ngắt liên tục để đọcthời gian mà bộ timer kia làm được
C.ĐÁNH GIÁ
Ưu Điểm: Chi phí sản xuất thấp
Dể sử dụngTuy nhiên trong quá trinh thực hiện chúng em vẫn còn gặp nhiều nhữngsai sót Mong quý thầy(cô) tham gia đóng góp ý kiến để chúng em hoànthiện hơn
Chúng em xin chân thành cảm ơn!