1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án môn học kỹ thuật VXL và lập trình asembli

39 997 13

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 405,11 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

3.Thiết kế đếm sản phẩm sáu kênh với số lương xung tích lũy tối đa trên một kênh là 5000 xung, hệ thống hiện thị sử dụng màn hình LCD 162 với thông tin hiển thị trên màn hình gồm số hiệu kênh và số xung tích lũy được trên kênh việc lựa chọn kênh hiển thị qua bàn phím, sử dụng bàn phím điện thoại, bộ vi xử lý sử dụng onchip 89c51. Tín hiệu xung đưa đến chân T0 của vi điều khiển (Timer 0 hoạt động ở chế độ counter). Code C , sử dụng keil C 4.0

Trang 1

MỤC LỤC

I. LỜI NÓI ĐẦU (Trang 1)

II. GIỚI THIỆU VỀ VĐK 89C51 VÀ CÁC LINH KIỆN DÙNG TRONG ĐỀ TÀI

(Trang 2)

III. LƯU ĐỒ THUẬT TOÁN CỦA TỪNG KHỐI VÀ CẢ HỆ THỐNG (Trang 9)

IV. LẬP TRÌNH CHO VĐK AT89C51 VÀ CÁC NGOẠI VI (Trang 18)

(Trang 21)

VI. KẾT LUẬN (Trang 24)

VII. PHỤ LỤC VÀ CODE (Trang 25)

I.LỜI NÓI ĐẦU

Có rất nhiều yêu cầu đặt ra trong thực tiễn kỹ thuật có liên quan đến đề tài ví dụ như đếm số sản phẩm trên hệ thống bang chuyền , đếm số người đi qua cổng một siêu thị hay số xe ô tô

đi ra , vào bãi đỗ xe Do vậy việc chọn đề tài này giúp chúng em hiểu rõ về nguyên lý hoạt động , cách làm để có thể ứng dụng vào thực tiễn khi ra trường

Trong đề tài em có viết tắt một số từ sau đây

Vi điều khiển : VĐK

Trang 2

II.GIỚI THIỆU VỀ VĐK AT89C51 VÀ CÁC LINH KIỆN

1.VĐK AT89C51 VÀ BỘ ĐẾM/ĐỊNH THỜI TRONG AT89C51

a.Giới thiệu chung về VĐK 89C51

VĐK 89C51 là một vđk thuộc họ 8051 do hang Intel sáng chế , họ đã chuẩn hóa

họ VĐK này và chia sẻ rộng rãi cho toàn thế giới có thể chế tạo và sử dụng Hiện nay có rất nhiều hang chế tạo loại VĐK này như là Atmel, Motorola, Philips

Trong đề tài này em sử dụng VĐK AT89C51 do hãng Atmel chế tạoAT89C51 là VĐK đóng vỏ dạng DIP có 40 chân

- 128 bytes RAM

- 4 cổng xuất, nhập dữ liệu mỗi cổng 8 bit

- 2 bộ định thời 16bit

- Có mạch giao tiếp nối tiếp

- Không gian nhớ chương trình ngoài 64K

- Không gian nhớ dữ liệu ngoài 64K

- Có ROM trên chip dạng flash

- Mỗi lệnh xử lý hết khoảng 4 micro giây

SƠ ĐỒ CHÂN AT89C51

Trong đó chức năng các chân như sau

- Chân 40 cấp nguồn +5v (Vcc)

- Chân 20 nối đất (GND)

- Chân 29 PSEN là tín hiệu điều khiển xuất ra của 89C51 , nó cho phép chọn bộnhớ ngoài và được nối với chân OE của EPROM mở rộng để cho phép đọc chương trình

- Chân 30 ALE là tín hiệu điều khiển xuất ra của 89C51 , nó cho phép phân kênh bus địa chỉ và bus dữ liệu của port 0

Trang 3

- Chân 31 EA được đưa xuống thấp cho phép chọn bộ nhớ ngoài của 89C5 ( EA

= 5(V) chọn rom nội , EA = 0V chọn rom ngoại )

- Chân 18 và 19 để nối thạch anh tạo dao động cho VĐK

- 32 chân còn lại chia làm 4 cổng vào ra trong đó Cổng 0: từ chân 39 đến chân 32 tương ứng là các chân P_0 đến P0_7 , cổng này cần dungtrở kéo để có thể xuất và nhập dữ liệu

Cổng 1 : từ chân 1 đến chân 8 tương ứng là P1_0 đến P1_7

Cổng 2 : từ chân 21 đến chân 28 tương ứng các chân P2_0 đến P2_7

Cổng 3: từ chân 10 đến chân 17 tương ứng các chân P3_0 đến P3_7 , tuy nhiên người ta không thường xuyên dung cổng P3 như một cổng xuất nhập vì mỗi chân của cổng P3 có một chức năng riêng như sau

P3_0: RxD: chân nhân dữ liệu nối tiếp khi giao tiếp RS232 ( cổng COM)P3_1: TxD: chân truyền dữ liệu nối tiếp khi giao tiếp RS 232

P3_2: INT0: chân ngắt ngoài 0P3_3: INT1 : chân ngắt ngoài 1P3_4: T0 : Timer 0 đầu vào của bộ đếm/định thời 0P3_5:T1: Timer 1 đầu vào của bộ đếm/định thời 1P3_6 WR: điều khiển ghi dữ liệu

P3_7 RD: điều khiển đọc dữ liệub.Bộ đếm/định thời trong VĐK 89C51

Mỗi VĐK 89C51 có 2 bộ đếm/định thời là Timer0 và Timer1 tương ứng với 2 chân đầu vào là T0 và T1 , đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản là đếm các xung nhịp Mỗi khi có xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ được tang lên 1 xung nhịp đưa vào đếm có thể là 1 trong 2 loại

Xung bên trong VĐK : đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài ( thạch anh ) Trong trường hợp sử dụng xung loại này thì ta gọi là các bộ định thời (Timer) do xung nhịp này được tạo ra khá đều đặn nên có thể dung

để đếm thời gian , thiết kế đồng hồ

Xung bên ngoài VĐK:Đó là các tín hiệu logic thay đổi liên tục giữa 02 mức 0-1 và không

nhất thiết phải là đều đặn Trong trường hợp này người ta gọi là các bộ đếm (counters) Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên

băng chuyền, đếm xe ra/vào kho bãi

Trang 4

Mỗi bộ đếm có 1 thanh ghi 16bit để lưu giá trị đếm , thanh ghi này có thể truy cập bình thường như các thanh ghi khác và chia ra làm 2 thanh ghi 8 bit con là TH và TL Bộ đếm T0 có thanh ghi TH0 và TL0 tương ứng bộ đếm T1 có TH1 và TL1

Cả 2 bộ đếm đều sử dụng chung một thanh ghi điều khiển gọi là thanh ghi TMOD , thanhghi này là thanh ghi 8bit dung để thiết lập chế độ làm việc khác nhau cho bộ đếm

4 bit thấp của thanh ghi để thiết lập cho bộ Timer 0 , 4 bit cao để thiết lập cho bộ timer 1

Trong đó các bit M1 và M0 là các bit chế độ của thanh ghi Các trường hợp của M1 M0 được cho trong bảng sau

0 0 0 Bộ định thời 13 bit:8 bit là bộ định thời/bộ đếm, 5 bit đặttrước.

Ngoài ra còn một thanh ghi tham gia vào việc điều khiển 2 bộ đếm là thanh ghi TCON ,

là một thanh ghi 8bit

Trang 5

Trong đó 4 bit trên dùng để lưu cất trạng thái cho cả bộ đếm 0 và bộ đếm 1 , TF là cờ tràn, TR là bit điều khiển bật tắt bộ đếm tương ứng , 4 bit thấp là 4 bit điều khiển các ngắt

Chẳng hạn ta muốn đếm các xung ở chân P3_4 ta phải nạp các giá trị sau vào các thanh ghi

TMOD=5; // nạp giá trị 00000101TH0=0x00; // reset giá trị của thanh ghi THTL0=0x00; // reset giá trị của TL

P3_4=1; // set chân vào cho bộ đếmTR0=1; // bắt đầu thực hiện đếm2.MÀN HÌNH LCD 16*2

LCD có 16 chân chức năng như sau

liệu

Trang 6

7 DB0 I/O Bit dữ liệu

- Chân đọc ghi R/W : đầu vào đọc ghi cho phép người dùng ghi thông tin lên LCD khi R/W =0 hoặc đọc thông tin từ nó khi R/W=1

- Chân cho phép E được sử dụng để LCD chốt dữ liệu của nó , khi dữ liệu được cấp đến chân dữ liệu thi một xung mức cao xuống mức thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu Yêu cầu xung này phải rộng tối thiểu 450ns

- Chân D0 đến D7 là các chân dữ liệu dùng để hiển thị thông tin lên LCD hoặc đọc nội dung từ các thanh ghi , LCD có thể hiển thị các ký tự nếu mã ASCII của nó được gửi đến các chân dữ liệu

- Cần chú ý khi sử dụng LCD là phải sử dụng bit RS =0 để kiểm tra bit cờ bận D7, bit này có thể được đọc khi R/W=1 và RS=0 Nếu D7=1 thì LCD đang bận nên sẽ không nhận bất kỳ thông tin nào khi D7 =0 thì LCD sãn sang nhận thông tin mới

Sau đây là bảng mã lệnh của LCD

Mã(hex) Lệnh đến thanh hiển thị của LCD

Trang 7

A Tắt hiển thị , bật con trỏ

Muốn điều khiển LCD thực hiện việc gì đó thì ta qua nhưng bước sau

- Bước 0 : chuẩn bị phần cứng , chỉnh độ tương phản

- Bước 1: Khởi tạo LCD

- Bước 2 : Gán giá trị cho các bit điều khiển dùng chân RS,RW,EN cho phù hợp

- Bước 3 xuất dữ liệu ra các cổng dữ liệu

- Bước 4: kiểm tra cờ bận

3.IC MUX 74151

MUX 74151 là một IC gộp kênh 8 đầu vào 2 đầu ra đợn giản

Có ba chân chọn cổng ABC được cho trong bảng chân lý sau

Trang 8

Dựa vào bảng chân lý trên ta có thể tìm ra tín hiệu để chọn kênh đếm.4.BÀN PHÍM ĐIỆN THOẠI KIỂU T9 KEYPAD

Nguyên lý quét bàn phím em sẽ trình bày cụ thể ở phần sau

Trang 9

III.SƠ ĐỒ KHỐI VÀ LƯU ĐỒ THUẬT TOÁN CỦA TỪNG KHỐI

VÀ CẢ HỆ THỐNG

1-SƠ ĐỒ KHỐI CỦA HỆ THỐNG

Đưa xung về chân T0

Đưa tín hiệu chọn kênh ra

mux 74151

Đưa mã quét phím ra bàn phím

Hoạt động của từng khối cụ thể như sau:

- Khối 6 kênh thông tin đầu vào : thực tế là 6 cảm biến hồng ngoại nhưng trong

đề tài này em mô phỏng bằng 6 nút bấm, bấm 1 lần tương đương với 1 vật thể

đi qua cảm biến

- IC MUX 74151 : ic này có 8 đầu vào nhưng em chỉ sử dụng 6 đầu vào tương ứng với 6 tín hiệu chọn kênh

- VĐK AT89c51: nơi nhận và xử lý thông tin sau đó gửi tín hiệu tới các ngoại vi

- Màn hình 16*2 : hiển thị tên kênh và số sản phẩm trên kênh đó

- Bàn phím : hoạt động bằng cách quét bàn phím , người dùng bấm phím , tín hiệu sẽ gửi về VĐK

Màn hình LCD 16*2 AT89C51

Bàn phím

Trang 10

2- LƯU ĐỒ THUẬT TOÁN

a, Lưu đồ thuật toán của cả hệ thống

Start : -Gọi hàm thư viện

-Khai báo biến -Khai báo các cổng ra vào cho LCD

Main( ):- Gọi ctc khởi tạo

LCD -Cài đặt chế độ bộ đếm sự kiện T0

Gửi tín hiệu chọn kênh tương ứng ra MUX ,reset giá trị thanh ghi TL , TH , set bit TR0=1

Có tín hiệu thay đổi kênh từ bán

phím ?

Trang 11

b, lưu đồ thuật toán quét bàn phímBàn phím ở đây gồm 3 cột và 2 hàng , có 6 nút bấm Nguyên lý quét bàn phím là lần lượt đưa mức thấp đến các cột của bàn phím , bình thườn các hang sẽ có mức cao Nếu nút nào được bấmthì hàng đó sẽ được nối đất , VĐK sẽ quét liên tục nếu có cả cột và hang của phím nào đều ở mức 1 thì phím đó được bấm

N

Kết thúc

Khởi tạo vòng lặp while với điều kiện tín hiệu chọn kênh vẫn giữ nguyên , liên tục gửi tín hiệu điều khiển màn hình in tên kênh

và số xung đưa đến chân T0

Khởi tạo vòng lặp for để lần lượt nạp giá trị cho các cột

Start : khai báo mảng gồm 3 thành phần để lần lượt nạp cho

các cột

Có phím được nhấn?

Trang 12

Trong đề tài này , phần code quét bàn phím em trình bày là một trương trình con

unsigned char i,j,phim;

unsigned char ma[3]={0x1b,0x17,0x0f};// mang gia tri de nap cho cong P1 unsigned char banphim()// chuong trinh con ban phim de xac dinh nut da bam

case 0:{phim='1';break;} // truong hop j =0 thi phim 1 duoc bam

case 1:{phim='2';break;} // j=1 phim 2 dc bam

Thoát khỏi vòng lặp , tín hiệu từ phím được bấm gửi về VĐK

Trang 13

case 2:{phim='3';break;} // j=2 phim 3 dc bam

case 3:{phim='4';break;} // j=3 phim 4 dc bam

case 4:{phim='5';break;} // j-4 phim 5 dc bam

case 5:{phim='6';break;} // j=5 phim 6 dc bam

default: {phim=0;break;} // mac dinh ko phim nao dc bam thi j=0

P1=ma[i]; // nap gia tri

delay_ms(10); // goi ham delay co gia tri 10ms

if(A==0) // phat hien phim bam o cot A

{j=i+0*3;// gan gia tri j cho moi nut bam de xac dinh toa do

break;} // thoat khoi vong lap

if(B==0)

{j=i+1*3;

break;}

}

Trang 14

c, Lưu đồ thuật toán phần màn hình

Để tiện dụng cho việc thực hiện đồ án và làm các bài tập khác , em viết một chương trình dùng chung để khởi tạo LCD và thực hiện các lệnh như xóa màn hình , di chuyển ký tự …

Code như sau

//Ham Gui 4 Bit Du Lieu Ra LCD

void LCD_Send4Bit( unsigned char Data )

// Ham Gui 1 Lenh Cho LCD

void LCD_SendCommand (unsigned char command )

{

LCD_Send4Bit ( command >>4 );/* Gui 4 bit cao */

LCD_Enable () ;

Trang 15

LCD_Send4Bit ( command ); /* Gui 4 bit thap*/

LCD_Enable () ;

}

// Ham Khoi Tao LCD

void LCD_Init ( void )

LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8

LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh

LCD_SendCommand( Clear_LCD ); // xoa toan bo khung hinh

}

Trang 16

// Ham Gui 1 Ki Tu Len LCD

void LCD_PutChar ( unsigned char Data ) {

Trang 17

LƯU ĐỒ THUẬT TOÁN HIỂN THỊ THÔNG TIN

LCD chỉ hiện thị được các ký tự nên cần chuyển các biến dạng số về dạng ký tự

IV.LẬP TRÌNH CHO VĐK AT89C51 NGOẠI VI

Biến đếm nhận từ VĐK dạng

số

Chuyển biến số thành ký tự với lệnh sprintf

In ký tự lên màn hình

Trang 18

Để phục vụ cho việc xuất dữ liệu ra LCD em viết một thư viện main.h để định nghĩa các cổng ra vào cho LCD và một chương trình để tạo hàm trễ Tương tự như CT các hàm cho LCD

em đã trình bàu ở phần trên , sau khi biên dịch chỉ cần để chung file c của các CT này và liên kếtvới project đang thực hiện là có thể gọi hàm con ra để sử dụng

Thư viện main.h code như sau :

//+++++++++++++++++++++++++DEFINE PORT1++++++++++++++++++++++ +++++

//+++++++++++++++++++++++++DEFINE PORT2++++++++++++++++++++++ +++++

#define LCD_RW P0_3

#define LCD_EN P0_4

#define LCD_D4 P2_3

Trang 19

#define LCD_D5 P2_2

#define LCD_D6 P2_1

#define LCD_D7 P2_0

//+++++++++++++++++++++++++DEFINE PORT3++++++++++++++++++++++ +++++

// -void delay_ms(unsigned char

x) -void delay_ms(unsigned time)

{

unsigned int i,j;

for(i=0;i<time;i++) for(j=0;j<125;j++)

Trang 20

;// khong lam gi ca

} }

Sau khi biên dịch thì sẽ có 2 file là main.h và delay.c

Thực hiện liên kết như hình vẽ minh họa dưới đây

V.SƠ ĐỒ MẠCH MÔ PHỎNG VÀ SƠ ĐỒ MẠCH IN

Phần mềm thực hiện mô phỏng đề tài là PROTEUS 7.8 sơ đồ như hình dưới

Sơ đồ mô phỏng

Trang 21

Mạch mô phỏng đã chạy đúng với yêu cầu của đề tài

Sơ đồ nguyên lý

Trang 22

Sơ đồ mạch in

Trang 23

Sau khi thực hiện trên mạch thật thì có một lỗi phát sinh như sau Khi bấm vào một nút bấm trên kênh đếm sản phẩm thì số sản phẩm thường bị nhảy lên thêm vài số do nhiễu của nút bấm

Trang 24

Trên đây là phần trình bày của em về quá trình thực hiện đề tài Qua đề tài em đã rút ra rất nhiều kinh nghiệm về lập trình VĐK và thực hiện trên mạch thật Do kiến thức và tầm hiểu biết cũng như kinh nghiệm còn hạn chế nên dù đã rất cố gắng cũng không thể tránh khỏi thiếu sót Em rất mong được sự đóng góp của thầy để em có thể hoàn thiện sản phẩm này hơn nữa Emxin chân thành cảm ơn!

VII.PHỤ LỤC

Trang 25

1.Các phần mềm đã sử dụng trong đề tài

- Keil C 4.0

- Proteus 7.8

- ARES 7.82.CODE của cả đề tài

#define LCD_RW P0_3

#define LCD_EN P0_4

#define LCD_D4 P2_3

Trang 26

// -void delay_ms(unsigned char

x) -void delay_ms(unsigned time)

Trang 27

//Ham Gui 4 Bit Du Lieu Ra LCD

void LCD_Send4Bit( unsigned char Data )

// Ham Gui 1 Lenh Cho LCD

void LCD_SendCommand (unsigned char command ) {

LCD_Send4Bit ( command >>4 );/* Gui 4 bit cao */

Trang 28

LCD_Enable () ;

}

// Ham Khoi Tao LCD

void LCD_Init ( void )

LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8

LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh

LCD_SendCommand( Clear_LCD ); // xoa toan bo khung hinh

}

// ham dua con tro den dia chi x,y

void LCD_Gotoxy(unsigned char x, unsigned char y)

{

Trang 29

unsigned char address;

}

// Ham Gui 1 Ki Tu Len LCD

void LCD_PutChar ( unsigned char Data ) {

Trang 30

#define A P1_0 // gan cong P1_0 la A

#define B P1_1// gan cong P1_0 la B

#define E P2_5// gan cong P2_5 la E

#define F P2_6 // gan cong P2_6 la F

char k,o;

int l;

char a[10];

unsigned char i,j,phim;

unsigned char ma[3]={0x67,0xc7,0xa7};// mang gia tr de nap cho cong P1 unsigned char chonkenh()// chuong trinh con chon kenh cho mux 74151 {

for(i=0;i<3;i++)//vong lap lan luot nap 3 gia tri tren

{

P1=ma[i]; // nap gia tri

delay_ms(10); // goi ham delay co gia tri 10ms

if(A==0) // phat hien phim bam o cot A

Trang 31

{j=i+0*3;// gan gia tri j cho moi nut bam de xac dinh toa do

break;} // thoat khoi vong lap

Trang 32

case 1:{phim='2';break;} // j=1 phim 2 dc bam

case 2:{phim='3';break;} // j=2 phim 3 dc bam

case 3:{phim='4';break;} // j=3 phim 4 dc bam

case 4:{phim='5';break;} // j-4 phim 5 dc bam

case 5:{phim='6';break;} // j=5 phim 6 dc bam

default: {phim=0;break;} // mac dinh ko phim nao dc bam thi j=0

LCD_Init(); // goi ham con khoi dong LCD

dua vao chan T0

TH0=0x00;// nap gia tri cho thanh ghi TH0 la 0 xoa bo dem ban dau

TL0=0x00;// nap gia tri cho thanh ghi TL0

while(1)//vong lap vo han chinh cua chuong trinh

{

if(o==0)//kenh 1 o la ket qua cua chuong trinh con chonkenh

{

k=banphim(); // goi chuwowng trinh con banphim de xac dinh ten kenh

LCD_Gotoxy(5,0); // dua con tro den vi tri 5,0 de in ten kenh

Trang 33

LCD_PutChar(k); // in ten kenh

E=0; //xuat gia tri qua cong P2 de lam tin hieu chon kenh cho mux 74151

LCD_Puts("kenh"); // in chu kenh len LCD LCD_Gotoxy(7,0); // di chuyen con tro den vi tri 7,0 de hien so san pham

l=TH0*256+TL0; // gan bien l la so san pham de in len LCD if(l>5000)

{l=0;TH0=0;TL0=0;LCD_Clear();k=banphim();LCD_Gotoxy(5,0);LCD_PutChar(k);LC D_Gotoxy(7,0);} // neu so san pham lon hon 5000 thi dem lai tu dau

sprintf(a,"%d",l);// ep kieu bien l ve kieu char la a de in len LCD LCD_Puts(a); // in a len LCD

o=chonkenh(); // cap nhat gia tri cho chuong trinh con chonkenh }

}

//***************************TUONG TU VOI 5 KENH CON

Trang 34

LCD_Gotoxy(7,0);

l=TH0*256+TL0;

if(l>5000) {l=0;TH0=0;TL0=0;LCD_Clear();;k=banphim();LCD_Gotoxy(5,0);LCD_PutChar(k);LC D_Gotoxy(7,0);}

sprintf(a,"%d",l);

LCD_Puts(a);

o=chonkenh();

} }

if(o==2) //kenh 3

Ngày đăng: 26/05/2015, 08:32

HÌNH ẢNH LIÊN QUAN

SƠ ĐỒ CHÂN AT89C51 - Đồ án môn học kỹ thuật VXL và lập trình asembli
89 C51 (Trang 2)
Sơ đồ mô phỏng - Đồ án môn học kỹ thuật VXL và lập trình asembli
Sơ đồ m ô phỏng (Trang 20)
Sơ đồ nguyên lý - Đồ án môn học kỹ thuật VXL và lập trình asembli
Sơ đồ nguy ên lý (Trang 21)
Sơ đồ mạch in - Đồ án môn học kỹ thuật VXL và lập trình asembli
Sơ đồ m ạch in (Trang 22)

TỪ KHÓA LIÊN QUAN

w