You are on page 1of 20

Lời nói đầu

Ngày nay cùng với sự phát triển của các ngành khoa học kĩ thuật, mà kĩ thuật điện tử
đóng vai trò quan trọng hầu hết các lĩnh vực khoa học kĩ thuật , quản lý, công nghiệp tự
động hóa , thong tin liên lạc…vv do đó là những sinh viên ngành điện tử .thế hệ tương lai
của đát nước cần phải nắm vững các kiến thức và vận dụng một cách có hiệu quả nhằm
góp phần vào sự phát triển của khoa học kĩ thuật nước nhà rộng hơn là khoa học thế giới
trong ngành điện tử.trong phạm vi lần này chúng em được giao đề tài :”ghép nối hai vi
điều khiển 89S52 hiển thị trên màn hiển thị LCD 16x2” . đây chỉ là ứng dụng nhỏ của
môn học vi điều khiển nhưng qua quá trình thiết kế và thi công đề tài này thì chúng em
đã rút ra được rất nhiều kinh nghiệm thực tiễn quý báu cho bẩn thân .Mục đích của đề tài
là tạo cho học sinh chúng em làm quen với họ vi điều khiển 8051.cụ thể ở đây là IC
AT89S52.từ đó lập trình cho vi điều khiển của các IC khác.Từ thử nghiệm của những
ứng dụng về họ VĐK 8051 đơn giản và gần gũi trên sách VĐK họ 8051,một số sách
tham khảo cùng một vài trang web về chuyên ngành điện tử . Chúng em đã tìm tòi nhiều
ứng dụng khác và phát triển ứng dụng đó vào đời sống hằng ngày cần thiết.

Mặc dù có nhiều cố gắng để hoàn thành xong đồ án môn học bằng kiến thức dã được học
và một số tài liệu khác nhưng cũng không tránh khỏi những thiếu xót. Do vậy chúng
em ,những người thực hiện đề tài rất mong nhận được sự đóng góp của quý thầy cô và
các bạn để đề tài lần sau được hoàn thiện hơn. Cuối cùng chúng em xin chân thành cảm
ơn quý thầy cô và các bạn.
Phần 1 : tìm hiểu cơ bản về linh kiện quan trọng sử dụng trong mạch (IC
AT89S52 và module LCD 16x2) .
1. IC AT89S52.
• Một số hình ảnh thực tế của AT89S52

• Hình ảnh sơ đồ chân :


• Cấu tạo IC 89S52 có

1 > CPU (CPU central processing unit ):


+ 8_bit data bus ; 16_bit address bus ; không gian địa chỉ 64kbyte .
+ Thanh ghi tích lũy A :
+ Thanh ghi tích lũy phụ B :
+ Đơn vị logic học(ALU) :
+ Thanh ghi từ trạng thái chương trình :
+ Bốn băng thanh ghi :
+ Con trỏ ngăn xếp :
2 > bộ nhớ (Memory) :
+ Bộ nhớ chương trình (Rom) gồm 8Kbyte Flash , ghi xóa hàng nghìn lần .
+ Bộ nhớ dữ liệu (dạng SRAM) gồm 256 byte (chứa ngăn xếp – Stack) .
+ Vùng thanh ghi có chức năng đặc biệt SFR (Special Funtion Register)
.

+ Bộ UART có chức năng truyền nhận nối tiếp .


Cổng nối tiếp trong 8051 chủ yếu được dùng trong các ứng dụng có yêu cầu
truyền thông với máy tính, hoặc với một vi điều khiển khác. Liên quan đến cổng nối tiếp
chủ yếu có 2 thanh ghi: SCON và SBUF. Ngoài ra, một thanh ghi khác là thanh ghi
PCON (không đánh địa chỉ bit) có bit 7 tên là SMOD quy định tốc độ truyền của cổng nối
tiếp có gấp đôi lên (SMOD = 1) hay không (SMOD = 0).
Dữ liệu được truyền nhận nối tiếp thông qua hai chân cổng P3.0(RxD) và
P3.1(TxD).
Thanh ghi SBUF là thanh ghi 8bit chứa dữ liệu truyền hoặc nhận. Về thực
chất có hai thanh ghi dữ liệu khác nhau, một dành để chứa dữ liệu truyền đi, một
để chứa d ữ liệu nhận được. Cả hai thanh ghi này đều có chung một tên là SBUF,
tuy nhiên CPU hoàn toàn phân biệt được một cách dễ dàng. Khi ta muốn truyền dữ liệu
đi, ta phải ghi vào thanh ghi SBUF (ví dụ viết lệnh mov SBUF,a), còn khi muốn đọc kiểm
tra dữ liệu nhận về ta phải đọc thanh ghi SBUF (ví dụ viết lệnh
mov a,SBUF). CPU sẽ căn cứ vào việc thanh ghi SBUF nằm ở vị trí toán hạng
đích (toán hạng bên trái) hay toán hạng nguồn (toán hạng bên phải) để quyết
định sẽ truy nhập ( đọc/ghi) thanh ghi SBUF nào. Người l ập trình không cần phải
quan tâm xử lý vấn đề này.
Thanh ghi quy định chế độ hoạt động và điều khiển cổng nối tiếp là thanh ghi
SCON (đánh địa chỉ bit).
SM0 SM1 SM2 REN TB8 RB8 TI RI

Bit SM0, SM1, SM2 quy định chế độ hoạt động của cổng nối tiếp. Thông thường
để tr uyền thông giữa 2 vi điều khiển hoặc giữa 1 vi điều khiển và 1 máy tính, giá
trị của bit SM2 được đặt bằng 0. Khi truyền thông theo kiểu mạng đa vi
xử lý(multiprocessor communication), SM2 được đặt bằng 1. Hai bit SM0 và SM1 thực
sự là các bit quy định chế độ hoạt động của cổng nối tiếp, chúng tạo ra 4
tổ hợp(00,01,10 và 11)ứng với 4 chế độ hoạt động mô tả trong bảng sau.
SM0 SM1 Chế độ Khung dữ liệu Baud rate

0 0 0 -Đồng bộ 8 bit SBUF Fosc/12

0 1 1-Dị bộ 8 bit SBUF Thay đổi được

1 0 2-Dị bộ 8bit Fosc/32


SBUF- RB8/TB8 hoặc
Fosc/64

1 1 3-Dị bộ 8bit Thay đổi được


SBUF-RB8/TB8

Chế độ 0: là chế độ truyền đồng bộ duy nhất. Chân RxD sẽ là tín hiệu
truyền/nhận dữ liệu, chân TxD là tín hiệu xung nhịp. Bit LSB (bit 0) của dữ liệu
được truyền đi trước tiên. Tốc độ truyền cố định và bằng 1/12 giá trị thạch anh.
Chế độ 1: là chế độ truyền dị bộ 8 bit. Dữ liệu 8 bit được đóng khung bởi một bit
Start (= 0) ở đầu và một bit Stop (=1)ở cuối trước khi được truyền đi. Tốc độ
truyền thay đổi được theo ý người lập trình.
Chế độ 2: là chế độ truyền dị bộ 9 bit. Dữ liệu 9 bit được ghép thành bởi 8bit
trong thanh ghi SBUF và bit RB8 (trường hợp nhận về) hoặc TB8 (trường hợp truyền đi)
trong thanh ghi SCON. Ngoài ra các bit Start và Stop vẫn được gắn bình ở đầu và cuối
khung truyền. Trong chế độ này, tốc độ truyền chỉ có thể chọn
được ở 1 trong 2 mức: 1/32 hoặc 1/64 giá trị của thạch anh (tùy thuộc vào giá trị
của bit SMOD trong thanh ghi PCON đã nói ở trên).
Chế độ 3: cũng là chế độ truyền dị bộ 9 bit, khác với chế độ 2 ở chỗ tốc độ truyền
có thể thay đổi được theo ý người lập trình như trong chế độ 1.
Bit REN trong thanh ghi SCON là bit cho phép nhận dữ liệu. Dữ liệu chỉ được
nhận qua cổng nối tiếp khi bit này = 1.
BitTB8 là bit dữ liệu thứ 9 trong trường hợp truyền đi 9 bit (8 bit kia trong thanh
ghi SBUF).
BitRB 8 là bit dữ liệu thứ 9 trong trường hợp nhận về 9 bit (8 bit kia trong thanh
ghi SBUF).

Bit TI là cờ ngắt truyền, báo hiệu việc truyền 1 khung dữ liệu đã hoàn tất.

Bit RI là cờ ngắt nhận, báo hiệu việc nhận 1 khung dữ liệuđã hoàn tất.
Để tạo ra tốc độ tr uyền (Baud rate) của c ổng nối tiếp trong 8051, phải
Dùng đến timer1 ở chế độ Auto Reload 8bit. Giá trị nạp lại chứa trong thanh ghi TH1
được tính toán theo công thức sau (phụ thuộc vào Baud rate mong muốn và giá trị của
thạch anh).
Tóm lại để sử dụng cổng nối tiếp của 8051, hãy thực hiện các bước sau:
-Chọn chế độ cho cổng nối tiếp (đồng bộ/dị bộ, 8bit/9bit...), từ đ ó chọn
được giá trị cho các bit trong thanh ghi SCON. Lưu ý xóa các bit TI và RI.
-Chọn tốcđộ truyền mong muốn, từ đ ó tính ra giá trị của thanh ghi TH1.
Cho timer1 chạy ở chế độ Auto Reload 8bit (không dùng ngắt tràn timer1).
-Đặt mức ưu tiên ngắt và cho phép ngắt cổng nối tiếp nếu muốn.
-Bắt đầu quá trình truyền dữ liệu bằng một lệnh ghi dữ liệu muốn truyền vào thanh ghi
SBUF. Quá trình truyền kết thúc thì cờ TI sẽ tự động đặt lên 1.
-Khi một khung dữ liệu đã được nhận đầy đủ, cờ RI sẽ tự động đặt lên 1 và người lập trình
lúc này có thể dùng lệnh đọc thanh ghi SBUFđể lấy dữ liệu nhận được ra xử lý.

+ 3 bộ nhớ timer/counter 16 bit thức hiện chức năng định thời và đếm sự kiện .
+ Khối điều khiển ngắt với 2 nguồn ngắt ngoài và 4 nguồn ngắt trong .có 6 trang thái ngắt
Tên ngắt Nguyên nhân gây ra ngắt Địa chỉ Mức độ Cờ báo ngắt
vector ngắt ưu tiên
Ngắt ngoài 0 Tín hiệu INTO thay đổi mức 0x0003 1 IE0(TCON)
logic 10,hoặc oqr mức logic
0
Ngắt timer/counter 0 đếm tràn 0x000B 2 TF0(TCON)
timer/counter0 trên
Ngắt ngoài 1 Tín hiệu INT1 thay đổi mức 0x0013 3 IE1(TCON)
logic 10,hoặc oqr mức logic
0
Ngắt timer/counter 1 đếm tràn 0x001B 4 TF1(TCON)
timer/counter1 trên
Ngắt cổng nối cổng nối tiếp nhận được 0x0023 5 TI,TR(SCON)
tiếp hoặc truyền xong 1 khung
dữ liệu đầy đủ
Ngắt timer/counter2 đếm tràn 0x002B 6 TX2,EXF2(T2CON)
timer/counter2 trên hoặc tín hiệu T2EX
thay đổimức logic10

Các cờ báo ngắt do INT1, INT0, Timer 0, Timer 1 bi xóa khi CPU xử lý chương trình ngắt .
còn cờ ngắt của cổng nối tiếp và ngắt do Timer 2 không tự động xóa, mà người dung phải xóa
bằng phần mềm.
+ bộ lập trình ( ghi chương trình lên Flash ROM ) cho phép người sử dụng có thể nạp các
chương trình cho chip mà không cần các bộ nạp chuyên dụng .
+ Bộ chia tần số với hệ số chia là 12 .
+ 4 cổng xuất nhập song song với 32 chân .
8051 có 4 cổng vào ra song song, có tên lần lượt là P0, P1, P2 và P3. Tất cả các
cổng này đều là cổng vào ra hai chiều 8bit. Các bit của mỗi cổng là một chân trên chip,
như vậy mỗi cổng sẽ có 8 chân trên chip.
Hướng dữ liệu (dùng cổng đó làm cổng ra hay cổng vào) là độc lập giữa các cổng
và giữa các chân (các bit) trong cùng một cổng. Ví dụ, ta có thể định nghĩa cổng P0 là
cổng ra, P1 là cổng vào hoặc ngược lại một cách tùy ý, với cả 2cổng P2 và P3 còn lại
cũng vậy. Trong cùng một cổng P0, ta cũng có thể định nghĩa chân P0.0 là cổng vào,
P0.1 lại là cổng ra tùy ý.
Liên quan đến mỗi cổng vào/ra song song của 8051 chỉ có một thanh ghi SFR
( thanh ghi chức năngđặc biệt) có tên trùng với tên của cổng. Ta có các thanh ghi P0
dùng cho cổng P0, thanh ghi P1 dùng cho cổng P1 …Đây là các thanh ghi đánh địa chỉ
đến từng bit (bit addressable), do đó ta có thể dùng các lệnh tác động bit đối với các bit
của các thanh ghi này. Mỗi thanh ghi này gồm 8bit tương ứng với các chân (bit) của
cổng đó. Khi một chân (bit) cổng nào đó
được dùng làm cổng vào thì trước đó bit tương ứng trong thanh ghi SFR phải
được đặt ởmức 1. Nếu m ột chân (bit) cổng nào đó được dùng làm cổng ra thì
giá trị của bit tương ứng trong thanh ghi SFR sẽ là giá trị lôgic muốn đưa ra chân cổng
đó. Nếu muốn đưa ra mức lôgic cao (điện áp gần 5V), bit tương ứng trongthanh ghi
phảiđượcđặt bằng 1, hiển nhiên nếu muốnđưa ra mức lôgic thấp(điện áp gần 0V) thì bit
tương ứng trong thanh ghi phải được đặt bằng 0. Như nói ở trên, các bit trong thanh ghi
cổng có thể được đặt bằng 1/0 mà không làmảnh hưởng đến các bit còn lại trong cổng đó
b ằng cách dùng các lệnh setb (đặt
lên 1) hay clr (đặt về 0).

 PORT 0 (P0.0=>P0.7) :

PORT 0 gồm 8 chân , ngoài chức năng xuất nhập . 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 89S52 giao tiếp với các thiết
bị ngoài có kiến trúc bus như các vi mạch nhớ , mạch PIO…
 PORT 1 (P1.0=>P1.7) :
Chức năng của PORT 1 là xuất nhập và có thể xuất nhập theo bit và theo byte .

 PORT 2 (P2.0=>P2.7) :

PORT 2 ngoài chức năng vào/ ra như PORT 0 và PORT 1 còn là byte cao của bus địa chỉ
khi sử dụng bộ nhớ ngoài .

 PORT 3 .
Mỗi chân trên PORT 3 ngoài chức năng xuất ngập còn có một chức năng riêng, cụ thể
như sau :

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 truyền cho port nối tiếp
P3.2 INTO Ngăt bên ngoài 0
P3.3 INT1 Ngăt bên ngoài 1
P3.4 TO Ngõ vào của timer/counter 0
P3.5 T1 Ngõ vào của timer/counter 1
P3.6 /WR Xung ghi bộ nhớ dữ liệu ngoài
P3.7 /RD Xung đọc bộ nhớ dữ liệu ngoài

 Chân /PSEN : là chân điều khiển đọc chương trình ở bộ nhớ ngoài .
 Chân ALE : ALE là tín hiệu điều khiển chốt địa chỉ có tần số bằng 1/6 tần số dao
động của vi điều khiển . tín hiệu AlE được dùng để cho phép vi mạch chốt bên ngoài
như 7473.
 Chân /EA : tín hiệu EA cho phép chọn bộ nhớ chương trình là bộ nhớ trong hay
ngoài . khi EA =1 thì thực hiện chương trình trong RAM nội . khi EA =0 thì thực
hiện chương trình ở RAM ngoài .
 Chân RST (reset) .
Ngõ vào reset trên chân 9 . khi RST = 1 thì bộ vi điều khiển sẽ được khởi động
để thiết lập trạng thái ban đầu .
 Chân XTAL 1 và XTAL 2 :
2 chân này được nối song song với thạch anh với tần số lớn nhất bằng 33Mhz . để tạo dao
động cho bộ vi điều khiển .
 Chân VCC, GND : là chân cung cấp nguồn nuôi cho vi điều khiển .dương nguồn 5V
được cấp vào chân 40. chân 20 nối mass,
 Một mạch sử dụng VĐK 89S52 đơn giản

 Phần cứng tối thiểu để chip AT 89S52 có thể hoạt đông được gồm 4 yếu tố sau:
 Nguồn cung cấp cho IC vào chân 20 và 40 (Vcc=5V) .
 Mạch RESET nối vào chân 9 của IC .
 Mạch dao động thạch anh (chân 18 và 19) .
 Trạng thái của chân EA( chân 3.1) .
Chức năng của CPU là tiến hành các thao tác tính toán sử lý, đưa ra các tín
hiệu địa chỉ , dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do
người lập trình đưa ra thong qua các lệnh.

2>Khối tạo xung( tạo dao động):


+ AT89S52 có một bộ chia tần số bên trong chip, bộ này sẽ cung cấp xung clock cho các khối
trong chip từ nguồn dao động bên ngoài sử dụng mạch tạo dao động từ thạch anh qua 2 chân
là : XTAL1 và XTAL2 .

+ trong mạch này tần số dao động thạch anh cần tạo là 11,

3>Khối RESET :

Sử dụng nút nhấn để reset cho chíp thông qua chân RST là ngõ RESET của chip .khi tín hiệu
được đua lên mức cao trong ít nhất 2 chu kỳ máy thì các thanh ghi trong bộ vi điều khiển
được tải những giá trị thích hợp để khởi động hệ thống .

4>Khối hiển thị (LCD 16x2) :


Sử dụng module LCD 16x2 , trong đó các chân tạo tín hiệu điều khiển , RS, RW, EN_LCD
trong mạch sư dụng PORT 1 của vi điều khiển . Các chân thuộc PORT 2 thì được nối với bus
dữ liệu của LCD ( từ chân 7 => chân 14) . hai chân 15,16 được nối với mass và dương nguồn
tạo độ tương phản ( tuy nhiên nếu không nối thì ta vẫn có thể nhìn được kí tự trên LCD
nhưng nếu nối thì ta có thể nhìn được cá khi không có ánh sáng ban ngày .) .

Hình ảnh LCD 16x2 thực tế :

Ký hiệu và chức năng các chân của LCD 16x2 hiển thị :

Chân số Kí hiệu Mức logic I/O Chức năng


1 Vss - - Nguồn cung cấp (GND)
2 Vcc - - Nguồn cung cấp (+5V)
3 Vee - I Điện áp và điều chỉnh độ tương
phản
4 RS 0/1 I Lựa chọn thanh ghi
0= thanh ghi lên
1= thanh ghi dữ liệu
5 R/W 0/1 I 0= ghi vào LCD module
6 E 1,1 ->0 I Tín hiệu cho phép
7 DBO 0/1 I/0 Data bus line 0 ( LSB)
8 DB1 0/1 I/0 Data bus line 1
9 DB2 0/1 I/0 Data bus line 2
10 DB3 0/1 I/0 Data bus line 3
11 DB4 0/1 I/0 Data bus line 4
12 DB5 0/1 I/0 Data bus line 5
13 DB6 0/1 I/0 Data bus line 6
14 DB7 0/1 I/0 Data bus line 7
Nguyên lý hoạt động của mạch.
Phần 2 : Mã nguồn chương trình

(Hàm truyền)

#include<stdio.h>
#include<regx52.h>
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit CT=P3^7;
unsigned char x,M[100];
void delay(unsigned int x)//tao ham tre(delay)
{
unsigned int i;
for(i=0;i<=x;i++);
}
void BF()//kiem tra co ban BF
{
P2=0xff;
RS=0;
RW=1;
while(x==0x80)
{
EN=1;
delay(10);
EN=0;
x=P2;
x=x&0x80;
}
}
void ghi_lenh(unsigned char x)//ghi lenh ra LCD
{
BF();
P2=x;
RS=0;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
void ghi_du_lieu(unsigned char x)//ghi du lieu can hien thi
{
BF();
P2=x;
RS=1;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
void chuoi(char *s)
{
while(*s)
{
ghi_du_lieu(*s);//ghi mot chuoi ki tu ra LCD
s++;
}
}
void thong_so()//cai dat thong so ban dau cho LCD
{
ghi_lenh(0x38);
ghi_lenh(0x0e);
ghi_lenh(0x06);
}
void INIT(int x)
{
TMOD=0x20;
TH1=TL1=-x;
TR1=1;
}
void hien_thi(int x)
{
int tg,M[3],i;
tg=x%1000;
M[0]=tg/100;
M[1]=(tg%100)/10;
M[2]=(tg%100)%10;
for(i=0;i<=2;i++)
{
ghi_du_lieu(0x30+M[i]);
}
}
void main()
{
char x;
unsigned int i;
SCON=0x52;
INIT(3);
thong_so();
x=0x41;
ghi_lenh(0x01);
ghi_lenh(0x80);
chuoi("TRUONG:DHCNHNPRO");
ghi_lenh(0xc0);
chuoi(" KHOA:DIEN-TU");
while(1)
{
if(CT==0)
{
putchar(x);
ghi_lenh(0x01);
ghi_lenh(0x80);
chuoi("MA DEC:");
hien_thi(x);
x++;
ghi_lenh(0xc0);
chuoi("TS KI TU:");
delay(33000);
M[i]=_getkey();
//ghi_lenh(0xc0);
//chuoi("TS KI TU:");
hien_thi(M[i]);
}
}
}

(Hàm nhận)

#include<stdio.h>
#include<regx52.h>
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
char x,M[100];
void delay(unsigned int x)//tao ham tre(delay)
{
unsigned int i;
for(i=0;i<=x;i++);
}
void BF()//kiem tra co ban BF
{
P2=0xff;
RS=0;
RW=1;
while(x==0x80)
{
EN=1;
delay(10);
EN=0;
x=P2;
x=x&0x80;
}
}
void ghi_lenh(unsigned char x)//ghi lenh ra LCD
{
BF();
P2=x;
RS=0;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
void ghi_du_lieu(unsigned char x)//ghi du lieu can hien thi
{
BF();
P2=x;
RS=1;
RW=0;
EN=1;
delay(50);
EN=0;
delay(50);
}
void chuoi(char *s)
{
while(*s)
{
ghi_du_lieu(*s);//ghi mot chuoi ki tu ra LCD
s++;
}
}
void thong_so()//cai dat thong so ban dau cho LCD
{
ghi_lenh(0x38);
ghi_lenh(0x0e);
ghi_lenh(0x06);
}
void INIT(int x)
{
TMOD=0x20;
TH1=TL1=-x;
TR1=1;
}
void hien_thi(int x)
{
int tg,M[3],i;
tg=x%1000;
M[0]=tg/100;
M[1]=(tg%100)/10;
M[2]=(tg%100)%10;
for(i=0;i<=2;i++)
{
ghi_du_lieu(M[i]+0x30);
}
}
void main()
{
int i;
SCON=0x52;
INIT(3);
thong_so();
ghi_lenh(0x01);
ghi_lenh(0x80);
chuoi("MON:ViDieuKhien");
ghi_lenh(0xc0);
chuoi("LOP:CDDT05-K10");
while(1)
{
M[i]=_getkey();
ghi_lenh(0x01);
ghi_lenh(0x80);
chuoi("KI TU NHAN:");
ghi_du_lieu(M[i]);
i++;
ghi_lenh(0xc0);
chuoi(" ");
hien_thi(i);
putchar(i);
}
}
Hoàn Thành Mạch :

+ mạch in :

 Tài liệu tham khảo :


1 > VI ĐIỀU KHIỂN cấu trúc_ lập trình và ứng dụng (Kiều Xuân Thực )
2 > Intrnet :
www.dientuvietnam.net
www.alldatasheet.com
www.atmel.com/atmel/acrobat/doc1919.pdf
www.cdtvn.net/
www.keil.com/c51
www.Scribd.com

You might also like