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

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

Đ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

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

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) V. MẠCH MÔ PHỎNG TRÊN PHẦN MỀM PROTEUS VÀ SƠ ĐỒ MẠCH IN (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 1 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ạo AT89C51 là VĐK đóng vỏ dạng DIP có 40 chân - Có 4KB ROM - 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 2 - 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 dung trở 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 0 P3_3: INT1 : chân ngắt ngoài 1 P3_4: T0 : Timer 0 đầu vào của bộ đếm/định thời 0 P3_5:T1: Timer 1 đầu vào của bộ đếm/định thời 1 P3_6 WR: điều khiển ghi dữ liệu P3_7 RD: điều khiển đọc dữ liệu b.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 Trong đề tài này em sử dụng bộ đếm ( counter ) nên sẽ không trình bày về bộ định thời (Timer) Các thanh ghi cơ sở của bộ đếm 3 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 , thanh ghi 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 M1 M0 Chế độ Chế độ hoạt động 0 0 0 Bộ định thời 13 bit:8 bit là bộ định thời/bộ đếm, 5 bit đặt trước. 0 1 1 Bộ định thời 16 bit: không có đặt trước. 1 0 2 Bộ định thời 8 bit: tự nạp lại. 1 1 3 Chế độ bộ định thời chia tách. Bit C/T là bit Counter/Timer , nếu bit C/T=0 thì sẽ được sử dụng như một bộ định thời , bit C/T=1 thi sẽ được sử dụng như một bộ đếm sự kiện ngoài Bit cổng GATE có chức năng như sau : Mỗi bộ đếm cần thực hiện điểm khởi động và dừng , việc khởi động bộ đếm bằng phần mềm bởi các bit TR0 và TR1 tương ứng với bộ đếm 0 và bộ đếm 1 . Việc set bit TR lên 1 là khởi động bộ đếm , set về 0 là dừng bộ đếm . Các lệnh này có tác dụng khi bit GATE = 0 , khi bit GATE =1 thì việc dừng và khởi động bộ đếm thực hiện bằng các phần cứng nguồn ngoài qua chân P3_2 và chân P3_3 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 4 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ị 00000101 TH0=0x00; // reset giá trị của thanh ghi TH TL0=0x00; // reset giá trị của TL P3_4=1; // set chân vào cho bộ đếm TR0=1; // bắt đầu thực hiện đếm 2.MÀN HÌNH LCD 16*2 LCD có 16 chân chức năng như sau Chân Kí hiệu I/O Mô tả 1 V SS - Đất 2 V CC - Nguồn 3 V EE - Nguồn điều khiển tương phản 4 RS I RS=0 chọn thanh ghi lệnh. RS=1 chọn thanh ghi dữ liệu 5 R/W I R/W = 1 đọc dữ liệu, R/W = 0 ghi dữ liệu 6 E I/O Cho phép đọc ghi 5 7 DB0 I/O Bit dữ liệu 8 DB1 I/O Nt 9 DB2 I/O Nt 10 DB3 I/O Nt 11 DB4 I/O Nt 12 DB5 I/O Nt 13 DB6 I/O Nt 14 DB7 I/O Nt Chân 15,16 của LCD là một đèn led để giúp nhìn thấy LCD trong điều kiện ánh sáng thấp Nguyên lý hoạt động của LCD - Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: Câp dưng nguôn 5v và đất tương ứng thì VEE được dùng để điều khiển độ tương phản cho LCD - Chân chọn thanh ghi , nếu RS =0 thì cho phép người dùng gửi một lệnh lên LCD ví dụ như di chuyển con trỏ hoặc xóa màn hình .RS=1 thì cho phép người dùng gửi dữ liệu hiển thị lên LCD - 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 1 Xóa màn hình hiển thị 2 Trở về đầu dòng 4 Giảm con trỏ (dịch con trỏ sang trái) 6 Tăng con trỏ ( dịch con trỏ sang phải ) 5 Dịch hiển thị sang phải 7 Dịch hiển thị sang phải 8 Tắt con trỏ, tắt hiển thị 6 A Tắt hiển thị , bật con trỏ C Bật hiển thị , tắt con trỏ E Bật hiển thị , nhấp nháy con trỏ F Tắt con trỏ , nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch bị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ về đầu dòng thứ nhất C0 Ép con trỏ về đầu dòng thứ 2 38 Chế độ 2 dòng và ma trận ký tự 5x7 0C Cho phép hiển thị màn hình 28 Giao thức 4 bit hiển thị 2 hàng , ký tự 5x7 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 7 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 8 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 9 Màn hình LCD 16*2 AT89C51 6 kênh thông tin vào IC MUX 74151 Bàn phím 2- LƯU ĐỒ THUẬT TOÁN a, Lưu đồ thuật toán của cả hệ thống N Y Y 10 Kiểm tra tín hiệu từ bàn phím Có hay không ? While(1):vòng lặp vô hạn để liên tục nạp giá trị quét bàn phím 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 ? [...]... 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 20 Mạch mô phỏng đã chạy đúng với yêu cầu của đề tài Sơ đồ nguyên lý 21 Sơ đồ mạch in 22 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... {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;} } 13 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 #include "lcd_16x2.h" void LCD_Enable(void) { LCD_EN =1;... đế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 VI KẾT LUẬN 23 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... Trong đề tài này em sử dụng ngôn ngữ C để lập trình cho VĐK 89C51 với phần mềm biên dịch là Keil C 4.0 17 Để 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ết với project đang thực hiện... biên dịch và tạo file lcd_16x2.c thì chỉ cần di chuyển file này cùng với thư mục của bài tập sau đó liên kết với project đang thực hiện là có thể sử dụng các hàm con trong CT này LƯU ĐỒ THUẬT TOÁN HIỂN THỊ THÔNG TIN 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 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... 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 Kết thúc b, lưu đồ thuật toán quét bàn phím Bà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ấm thì 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ột Khởi tạo vòng lặp for để lần lượt nạp giá trị cho các cột Có phím được nhấn? N 11 Thoát khỏi vòng lặp , tín hiệu từ phím được bấm gửi về VĐK 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 va ten kenh... 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 } return phim; // tra lai gia tri cho bien phim } Chương trình con xác định tên kênh tương tự nhưng do không sử dụng chung biến để in ra LCD nên phải tạo 1 CTC thứ 2 như sau unsigned char chonkenh()// chuong trinh con chon kenh cho mux 74151 { for(i=0;i . KEYPAD Nguyên lý quét bàn phím em sẽ trình bày cụ thể ở phần sau 8 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. hình LCD 16*2 AT89C51 6 kênh thông tin vào IC MUX 74151 Bàn phím 2- LƯU ĐỒ THUẬT TOÁN a, Lưu đồ thuật toán của cả hệ thống N Y Y 10 Kiểm tra tín hiệu từ bàn phím Có hay không ? While(1):vòng. ( "-# ', %  13 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

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

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan