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

Thiết kế hệ thống truyền tin nối tiếp

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 (116.13 KB, 12 trang )

ĐỒ ÁN MÔN HỌC
VI XỬ LÝ
Đề tài: Thiết kế hệ thống truyền tin nối tiếp giữa 2 hệ thống,các hệ thống
hiển thị sử dụng màn hình LCD 16*2 với thông tin hiển thị trên màn hình
dòng 1:thông tin phát đi, dòng 2: thông tin thu về, việc lựa chọn kênh hiển
thị qua bàn phím, sử dụng onchip 89c51


MỤC LỤC

PHẦN 1: PHÂN TÍCH BÀI TOÁN....................................................................................3
PHẦN 2: THIẾT KẾ MẠCH...............................................................................................7

2


PHẦN 1: PHÂN TÍCH BÀI TOÁN
1. Linh kiện cần dùng
a. ONCHIP 89c51.
b. LCD 16*2.
c. KEYPAD_PHONE.
d. Các linh kiện cần dùng khác như điện trở, tụ điện, thạch anh,…
2. Chức năng của từng phần tử
Chức năng của từng phần tử được mô tả như sau:
Bộ vi xử lý 89c51:
- Thuộc họ VXL 8051.
- Có khả năng chứa chương trình lên đến 4kB
ONCHIP 89C51
dung lượng.
- Hoạt động ở tần số 12MHz.
- Có 2 bộ định thời.


- Chứa giao tiếp UART.
Các cổng giao tiếp:
Onchip 89c51 gồm có 4 Port 8 bit vào ra 2 chiều
- Port 0.x: Cổng giao tiếp vào/ra trực tiếp 8 bit.
- Port 1.x: Cổng giao tiếp vào/ra trực tiếp 8 bit.
- Port 2.x: Cổng giao tiếp vào/ra trực tiếp 8 bit.
- Port 3.x: Cổng giao tiếp vào/ra trực tiếp 8 bit.
Port 3 có chân P3.0 và P3.1 là chân RXD và
TXD, 2 chân này sẽ giúp ta thực hiện việc
truyền tin nối tiếp trong đề tài này.
Các Port của 89c51 đều có thể được điều khiển thông qua chương trình
nạp vào 89c51.
Các chân còn lại:
- XTAL1: Chân vào mạch khuếch đại dao động.
- XTLA2: Chân ra từ mạch khuếch đại dao động.
- /PSEN: Chân cho phép đọc bộ nhớ chương trình ngoài. Khi onchip
làm việc với bộ nhớ chương trình ngoài, chân này phát tín hiệu kích
hoạt ở mức thấp và được kích hoạt ở mức thấp và được kích hoạt 2 lần
trong mỗi chu kì máy. Chân này không được kích hoạt khi onchip làm
việc với bộ nhớ chương trình bên trong.
- ALE(/PROG): Chân tín hiệu cho phép chốt địa chỉ khi onchip xuất ra
byte thấp của địa chỉ để truy cập bộ nhớ ngoài, tín hiệu chốt kích hoạt
19
18

9

29
30
31


1
2
3
4
5
6
7
8

XTAL1
XTAL2

RST

PSEN
ALE
EA

P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

P0.0/AD0
P0.1/AD1

P0.2/AD2
P0.3/AD3
P0.4/AD4
P0.5/AD5
P0.6/AD6
P0.7/AD7
P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15

P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD

39
38
37
36
35
34

33
32
21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17

AT89C51

3


ở mức cao, tần số xung chốt 1/6 fosc. Đây còn là chân nhận xung vào
để nạp chương trình cho EPROM bên trong khi nó ở mức thấp.
- /EA(Vpp): Chân cho phép lựa chọn làm việc với bộ chương trình
+ Khi /EA=1 : cho phép onchip làm việc với bộ nhớ chương trình bên
trong
+ Khi /EA=0: cho phép onchip làm việc với bộ nhớ chương trình bên

ngoài
Khi nó được cấp nguồn +21V thì onchip đảm nhiệm chức năng nạp
chương trình cho EPROM.
- VCC : Chân cấp dương nguồn cho onchip (+5V)
- VSS : Chân cấp âm nguồn, được nối đất.
Bộ hiển thị LCD
LCD

D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14

RS
RW
E
4
5

6

1
2
3

VSS
VDD
VEE

LM016L

Sơ đồ chân của LCD
Chân Ký hiệu
số
1
Vss
2
Vdd
3
Vee
4
RS

Mức
logic
0/1

I/O
I

I

5

R/W

0/1

I

6

E

I

7
8
9
10

DB0
DB1
DB2
DB3

1,1
=>0
0/1
0/1

0/1
0/1

I/O
I/O
I/O
I/O

Chức năng
Đất ( GND)
Nguồn cung cấp (+5v)
Nguồn điều khiển tương phản
RS= 0: chọn thanh ghi lệnh
RS=1: chọn thanh ghi dữ liệu
R/W =0 : ghi dữ liệu vào LCD
R/W =1đọc từ LCD module
Tín hiệu cho phép
Bus dữ liệu 8 bit
Bus dữ liệu 8 bit
Bus dữ liệu 8 bit
Bus dữ liệu 8 bit

4


11
12
13
14


DB4
DB5
DB6
DB7

0/1
0/1
0/1
0/1

I/O
I/O
I/O
I/O

Bus dữ liệu 8 bit
Bus dữ liệu 8 bit
Bus dữ liệu 8 bit
Bus dữ liệu 8 bit

Bảng lệnh đến thanh ghi của LCD
Mã(Hexa)
1
2
4
6
5
7
8
A

C
E
F
10
14
18
1C
80
C0
38

Lệnh đến thanh ghi của LCD
Xóa màn hình hiển thị
Trở về đầu dòng
Giả con trỏ ( dịch con trỏ sang trái)
Tăng con trỏ (dịch con trỏ sang phải)
Dịch hiển thị sang phải
Dịch hiển thị sang trái
Tắt con trỏ, tắt hiển thị
Tắt hiển thị, bật con trỏ
Bật hiển thị, tắt con trỏ
Bật hiển thị ,nhấp nháy con trỏ
Tắt con trỏ, nhấp nháy con trỏ
Dịch vị trí con trỏ sang trái
Dịch vị trí con trỏ sang phải
Dịch toàn bộ hiển thị sang trái
Dịch toàn bộ hiển thị sang phải
Đưa con trỏ về đầu dòng thứ nhất
Đưa con trỏ về đầu dòng thứ hai
Hai dòng và ma trận 5 *7


5


1

2

3

KEYPAD_ PHONE
Là bàn phím điện thoại di động được sử dụng
theo yêu cầu của đề tài. Bàn phím gồm có 3 cột
4 hàng, tương đương với đó là các phím bấm từ
0 đến 9, phím # và *.

A

1

2

3

B

4

5


6

C

7

8

9

0

#

D

6


PHẦN 2: THIẾT KẾ MẠCH
Sơ đồ thuật toán

Nhập số
cần từ bàn
phím

Quét bàn
phím

Sai


Không thực
hiện

Sai

Không thực
hiện

Đúng
Đưa dữ liệu vừa nhận được
vào Port 0, xuất ra LCD ở
dòng 1. Đồng thời, dữ liệu
được chuyển sang P3.1 để
truyền sang ONC 2.

Nhận dữ liệu tại ONC 2 tại
cổng P3.0. Ngắt truyền.
ONC 2 hiển thị dữ liệu đã
nhận lên LCD ở dòng 2.

Quét bàn
phím

7


Mô tả chi tiết cho trường hợp ONC 1 xuất, ONC 2 nhận:
B1: Dữ liệu sẽ được đưa vào P1.x qua bàn phím điện thoại.
B2: Đưa dữ liệu vừa nhận được vào LCD.

B3: Truyền dữ liệu sang ONC thứ 2 thông qua 2 cổng RXD và TXD.
B4: ONC2 đưa dữ liệu lên LCD. Kết thúc quá trình truyền – nhận từ ONC 1
sang ONC 2.
Toàn bộ code mã hoá để đưa vào ONC 89c51 như sau:
#include<at89x51.h>
#include<intrins.h>
#define data_out P0
#define RS P2_0
#define RW P2_1
#define E P2_2
#define row_1 P3_4
#define row_2 P3_5
#define row_3 P3_6
#define row_4 P3_7
#define col_1 P2_7
#define col_2 P2_6
#define col_3 P2_5
#define BF P0_7
unsigned char send,receive;
unsigned int counter_send=0x85; counter_receive=0xc8;
// delay//
void delay(unsigned int delay)
{
int a=0;
for(a=0; a}
void busy_bf(void)
8



{
RS=0;//Thanh ghi ma lenh duoc chon
RW=1;//Chan ghi
E=0; E=1;
while(BF==1)
{
RS=0;
RW=1;
E=0;E=1;
delay(20);
}
}
//Ghi ki tu doc duoc tu ban phim
void write_command(unsigned char command)
{
busy_bf();
RS=0;
RW=0;
data_out=command;
delay(20);
E=1;E=0;//Bat dau doc ghi du lieu
}
//Ghi du lieu
void write_data(data_byte)
{
busy_bf();
RS=1;//Thanh ghi du lieu duoc chon
RW=0;//Chan doc
data_out=data_byte;
delay(20);

E=1;E=0;
}
// init_lcd//
void init_lcd(void)
{
//write_command(0x30);
write_command(0x39);//Khoi tao man hinh voi kich thuoc 16*2
write_command(0x0e);//Form feed
write_command(0x01);//Xoa man hinh
write_command(0x06);//Lower case
9


//write_command(0x1b);
}
// Ngat send noi tiep
void ngat_tt (void) interrupt 4
{
if(TI==1) //Ngat phat; bit D1 SCON
{
write_command(counter_send);
write_data(send);
counter_send++;
}
if(RI==1) //Ngat thu; bit D0 SCON
{
write_command(counter_receive);
receive=SBUF;
write_data(receive);
counter_receive++;

}
TI=0; RI=0;
}
//chuong trinh chinh
void main(void)
{
init_lcd();
EA=1;//IE.7 bit cho phep tat ca cac ngat; de thanh ghi IE hoat dong thi bit
=1
ES=1;//IE.4 cho phep cam ngat cong noi tiep
TMOD=0X20;//Thanh ghi mode timer
TH1=0XFD;//Timer1 high
SCON=0X50;//Thanh ghi 8 bit dung trong lap trinh bit khoi dong Start,
dung Stop va bit du lieu khi dinh khung du lieu
TR1=1;//Dieu khien on/off timer1
// Hien chu send
write_command(0x80);//Dua con tro ve dau dong thu nhat
write_data('S');write_data('e');write_data('n');write_data('d');write_data(':');
write_data(' ');
// Hien chu receive
write_command(0xc0);//Dua con tro ve dau dong thu hai
write_data('R');write_data('e');write_data('c');write_data('e');write_data('i');
write_data('v');
10


write_data('e');write_data(':');write_data(' ');
while(1)
{
// P1=0; SBUF: Thanh ghi 8 bit duoc dung trong truyen thong noi tiep

row_1=0; row_2=1; row_3=1; row_4=1;
if(col_1==0){send=0x31;//write_data(0x31);
SBUF=0x31; while(col_1==0);}
if(col_2==0){send=0x32;//write_data(0x32);
SBUF=0x32; while(col_2==0);}
if(col_3==0){send=0x33;//write_data(0x33);
SBUF=0x33; while(col_3==0);}
row_1=1; row_2=0; row_3=1; row_4=1;
if(col_1==0){send=0x34;//write_data(0x34);
SBUF=0x34; while(col_1==0);}
if(col_2==0){send=0x35;//write_data(0x35);
SBUF=0x35; while(col_2==0);}
if(col_3==0){send=0x36;//write_data(0x36);
SBUF=0x36; while(col_3==0);}
row_1=1; row_2=1; row_3=0; row_4=1;
if(col_1==0){send=0x37;//write_data(0x37);
SBUF=0x37; while(col_1==0);}
if(col_2==0){send=0x38;//write_data(0x38);
SBUF=0x38; while(col_2==0);}
if(col_3==0){send=0x39;//write_data(0x39);
SBUF=0x39; while(col_3==0);}
row_1=1; row_2=1; row_3=1; row_4=0;
if(col_1==0){send=0x2a;//write_data(0x2a);
SBUF=0x2a; while(col_1==0);}
if(col_2==0){send=0x30;//write_data(0x30);
SBUF=0x30; while(col_2==0);}
if(col_3==0){send=0x23;//write_data(0x23);
SBUF=0x23; while(col_3==0);}
delay(20);
}

}

11


12



×