1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo thực hành môn học thiết kế hệ thống nhúng bài 1 lập trình c với vi Điều khiển 8051

64 0 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 64
Dung lượng 4,99 MB

Nội dung

Nó là một loại vi điều khiển 8-bit, được sử dụng trong nhiều ứng dụng như điều khiển thiết bị, đo lường, điều khiển động cơ, và các hệ thống nhúng.. Lưu đồ thuật toán flowchart là một cô

Trang 1

TRƯỜNG ĐẠI HỌC VINH

VIỆN KĨ THUẬT VÀ CÔNG NGHỆ

BÁO CÁO THỰC HÀNH MÔN HỌC THIẾT KẾ

HỆ THỐNG NHÚNG

Giảng viên hướng dẫn: Ts Mai Thế Anh

Sinh viên thực hiện: Nguyễn Huy Phong 205752021610009

Nghệ An, 2023

Trang 2

MỤC LỤC

LỜI MỞ ĐẦU 3

BÀI 1: LẬP TRÌNH C VỚI VI ĐIỀU KHIỂN 8051 4

BÀI 2: GIAO TIẾP VỚI MA TRẬN BÀN PHÍM VÀ MÀN HÌNH LCD 16x2 17

BÀI 3: GIAO TIẾP VỚI CÁC ĐÈN LED 7 THANH 31

BÀI 4: GIAO TIẾP VỚI CẢM BIẾN NHIỆT ĐỘ 43

BÀI 5: LẬP TRÌNH SỬ DỤNG NGẮT NGOÀI 46

BÀI 6: HỆ ĐIỀU HÀNH THỜI GIAN THỰC 54

Trang 3

LỜI MỞ ĐẦU

Hiện nay, ngành kỹ thuật điều khiển và tự động hóa tiến bộ không ngừng.Chúng đang ngày càng phát triển và được ứng dụng trong tất cả các mặt của đờisống Các máy điện và khí cụ điện sử dụng rộng khắp trong các ứng dụng tự động

Nó giúp chúng ta trong mọi công việc cũng như giải trí Học phần lí thuyết điềukhiển hiện đại đã cung cấp cho em những kiến thức nền tảng và các thiết bị điện sửdụng rõng rãi trong cuộc sống, giúp em hiểu rõ tính năng và công dụng để áp dụngvào công việc sau này

Và đặc biệt, chúng em xin gửi lời cảm ơn và tri ân sâu sắc tới Mai Thế Anh Giảng viên giảng dạy học phần “Thiết kế hệ thống nhúng” đã quan tâm, giúp đỡ vàhướng dẫn, chỉ bảo chúng em tận tình trong suốt thời gian học tập Với tâm huyếtcủa mình, thầy đã truyền dạy cho bọn em những kinh nghiệm và kiến thức quý giátrong quãng thời gian học tập và rèn luyện vừa qua Đó không chỉ là những kiếnthức, kinh nghiệm để chúng em áp dụng riêng cho bài tập lần này mà còn là nhữngbài học bổ ích để chúng em vững vàng hơn khi bước vào nghề, vào đời

-Với điều kiện và vốn kiến thức còn hạn chế, bài báo cáo không thể tránh khỏi đượcnhững thiếu sót nhất định Vì vậy, rất mong sẽ nhận được sự chỉ bảo, sửa chữa củagiảng viên để chúng em có thể nhận ra những lỗi sai và thiếu sót, giúp bản thânnâng cao kiến thức kinh nghiệm, tạo tiền đề cho chúng em phát triển sau này

Trang 4

BÀI 1: LẬP TRÌNH C VỚI VI ĐIỀU KHIỂN 8051 1.1 MỤC ĐÍCH

- Làm quen với Board mạch Easy 8051 v6

- Làm quen với phần mềm MikroC cho 8051

- Tìm hiểu và viết chương trình điều khiển cơ bản với C/C++

1.2 CƠ SỞ LÝ THUYẾT

1.2.1 Giới thiệu Board thí nghiệm Easy 8051 v6

Board mạch Easy 8051 v6 là board thí nghiệm đầy đủ các phần cứng của hãng Mikroe, giúp cho người học có thể tiếp cận một cách nhanh chóng với dòng vi điều khiển 8051

Trang 6

Ưu điểm của gói công cụ MikroC 8051 là:

- Giao diện trực quan

- Rất dễ sử dụng đặc biệt là với những người mới làm quen với việc lập trình cho vi điều khiển 8051

- Hỗ trợ thư viện hầu hết cho các ứng dụng như: Uart, Spi,i2c,onewrite, Nhược điểm:

- Người sử dụng gặp khó khăn trong việc tìm hiểu cấu trúc của hàm library và khó thay đổi được nó

1.2.3 Điều khiển Led đơn

Led là 1 loại diode phát quang, để Led sáng đơn giản cấp cho nó đủ dòng điện tầm 10mA

Hình 1.3 Điều khiển ở chế độ hút dòng Hình 1.4 Điều khiển ở chế độ xả dòng.

Có 2 phương pháp điều khiển Led

- Điều khiển ở chế độ hút dòng (hình 1.3)

- Điều khiển ở chế độ xả dòng (hình 1.4)

Trong bài này ta sẽ làm ở chế độ hút dòng như hình 1.1

- Muốn Led sáng chỉ việc cho đầu Katot của Led ở mức logic “0”

- Muốn Led tắt chỉ việc cho đầu Katot của Led ở mức logic “1”

Trang 7

1.3 CÁC BƯỚC TIẾN HÀNH THÍ NGHIỆM

1.4.1 Kết nối và lập trình với board mạch Easy 8051v6

Nội dung bài toán yêu cầu: sinh viên phải thực hiện bật tắt các đèn Led đơn theo các yêu cầu sau: ON/OFF led trong 1 thời gian

- Bước 1: Cài đặt trên máy tính bộ công cụ lập trình mikroC 8051 và công

cụ nạp chương trình 8051 flash programmer

- Bước 2: Cắm jack USB vào board mạch, đầu kia cắm vào PC

Trang 8

Hình 1.4 Cấu hình cấp nguồn cho board mạch Easy 8051v6

Chú ý J11 như ở hình trên nghĩa là lấy nguồn từ USB cấp

- Bước 3: Bật công tắc nguồn và quan sát trạng thái 2 led: led Power và Led USB link sáng nghĩa là ta đã kết nối thành công Bật SW7.1SW7.4 sang vịtrí ON

- Bước 4: Trên máy tính, mở phần mềm MikroC

Hình 1.5 Màn hình MikroC khi mới mở lên

Trang 9

Hình1.6 Thiết lập new project trong Mikro C

Sau khi thiết lập trên MikroC ta thử chạy chương trình sau:

//design by : Template code

P0 = 0x00; // Turn ON diodes on PORT0

P1 = 0x00; // Turn ON diodes on PORT1

P2 = 0x00; // Turn ON diodes on PORT2

P3 = 0x00; // Turn ON diodes on PORT3

Delay_ms(100); // 1 second delay

P0 = 0xFF; // Turn OFF diodes on PORT0

Trang 10

P1 = 0xFF; // Turn OFF diodes on PORT1

P2 = 0xFF; // Turn OFF diodes on PORT2

P3 = 0xFF; // Turn OFF diodes on PORT3

Delay_ms(100); // 1 second delay

} while(1); // Endless loop

}

Nội dung sau khi code chạy:

Led trên tất cả các cột sáng 1 giây xong đó đồng thời tắt, led sáng tắt được lặp đilặp lại liên tục

1.4.2 Bài tập thực hành

1 Viết lại chương trình điều khiển Led đơn nói trên với các hiệu ứng led đuổi nhau từ P0.0 P0.7 P1.0 P1.7 P2.0 P2.7 P3.0 P3.7 sử dụng các lệnh dịch bit Thời gian chuyển trạng thái của mỗi đèn LED là 1 giây Mô phỏng trên proteus và kiểm tra trên mạch phần cứng

Mô phỏng trên proteus:

Kiểm tra trên mạch phần cứng:

Chương trình Keil C:

Trang 11

delay(100000);

P1 = P1<<1|0x01; //11111101}

P2 = 0xFE; // 11111110for(i=0;i<8;i++)

{

delay(100000);

P2 = P2<<1|0x01; //11111101}

P3 = 0xFE; // 11111110for(i=0;i<8;i++)

Trang 12

delay(100000);

P3= P3<<1|0x01; // 11111110}

}

}

2 Sử dụng ma trận đèn LED 4 × 8 tạo bởi các port P0, P1, P2, P3 để hiện tên của bản thân, thời gian chuyển trạng thái của mỗi ký tự là 500ms Mô phỏng trên proteus và kiểm tra trên mạch phần cứng

Mô phỏng trên proteus:

Code chương trình:

#include<REGX52.H>

unsigned char code chuP[]={0x00,0xEE,0xEE,0xEE,0xEE,0xF1,0xFF,0xFF};

unsigned char code chuH[]={0XFF,0X00,0X00,0XE7,0XE7,0X00,0X00,0XFF };

unsigned char code chuO[]={0xC3,0xBD,0x7E,0x7E,0x7E,0x7E,0xBD,0xC3};

unsigned char code chuN[]={0XFF,0X01,0X00,0XFC,0XFC,0X00,0X01,0XFF };

unsigned char code chuG[]={0xC3,0xBD,0x7E,0x6E,0x6E,0x6E,0x8F,0xFF};

/* Ham Delay */

Trang 13

void Fn_DELAY (unsigned int _vrui_Time) { while(_vrui_Time );}

Trang 14

Kết quả sau khi chạy code:

Sau khi nạp vào mạch phần cứng, các chữ P H O N G sẽ lần lượt xuất hiện sau 1s

Trang 15

1.5 CÂU HỎI KIỂM TRA

- Với sơ đồ mắc Led như hình 1.5: tính giá trị điện trở phù hợp

Giá trị mỗi điện trở thường là 300 ôm

- Vòng lặp while, do while, for?

Vòng lặp for:

Vòng lặp for được sử dụng để lặp lại một khối mã một số lần cụ thể

Vi điều khiển AT89S8253?

Vi điều khiển AT89S8253 là một trong những vi điều khiển phổ biến của hãng Atmel Nó là một loại vi điều khiển 8-bit, được sử dụng trong nhiều ứng dụng như điều khiển thiết bị, đo lường, điều khiển động cơ, và các hệ thống nhúng Dưới đây là một số thông tin cơ bản về vi điều khiển AT89S8253:

Kiến trúc: Vi điều khiển AT89S8253 được thiết kế dựa trên kiến trúc von Neumann, với bộ nhớ chung cho dữ liệu và chương trình

Bộ nhớ: AT89S8253 có bộ nhớ trong 8KB ROM và 256 bytes RAM, cho phép lưu trữ chương trình và dữ liệu

Giao tiếp: Vi điều khiển AT89S8253 hỗ trợ các giao tiếp chuẩn như UART, SPI, và I2C, cho phép kết nối với các thiết bị ngoại vi như cảm biến, màn hình LCD, và các thiết bị khác

Tốc độ xung nhịp: Tốc độ xung nhịp của AT89S8253 có thể được cấu hình tùy ý trong khoảng từ 0 đến 24 MHz

Các tính năng khác: AT89S8253 còn có nhiều tính năng khác như bộ chuyển đổi ADC 10-bit, bộ đếm thời gian, bộ ngắt, bộ xung đồng hồ, và chế độ tiêu thụ điện năng thấp

Trang 16

Ngôn ngữ lập trình: Vi điều khiển AT89S8253 được lập trình bằng ngôn ngữ lập trình C hoặc ngôn ngữ lập trình hợp ngữ.

Môi trường phát triển: Các công cụ phát triển phổ biến cho vi điều khiển AT89S8253 là Keil C51 và SDCC

- Lưu đồ thuật toán?

Lưu đồ thuật toán (flowchart) là một công cụ đồ họa được sử dụng để biểu diễn thuật toán bằng cách sử dụng các hình khối và các mũi tên để chỉ ra các bước thực hiện và các điều kiện Lưu đồ thuật toán giúp cho người lập trình

dễ dàng hiểu và kiểm tra thuật toán, cũng như giúp cho quá trình phân tích và thiết kế thuật toán trở nên dễ dàng hơn

Các hình khối thường được sử dụng trong lưu đồ thuật toán bao gồm:Khối bắt đầu (Start): đại diện cho bước bắt đầu của thuật toán

Khối kết thúc (End): đại diện cho bước kết thúc của thuật toán

Khối xử lý (Process): đại diện cho các bước xử lý trong thuật toán, ví dụ như tính toán, gán giá trị, in kết quả, v.v

Khối điều kiện (Decision): đại diện cho các điều kiện kiểm tra trong thuật toán, ví dụ như kiểm tra điều kiện IF/ELSE, WHILE, FOR, v.v

Khối đầu vào/đầu ra (Input/Output): đại diện cho các thao tác đầu vào và đầu ra của thuật toán, ví dụ như đọc dữ liệu từ bàn phím, in kết quả ra màn hình,v.v

Trang 17

BÀI 2: GIAO TIẾP VỚI MA TRẬN BÀN PHÍM VÀ

MÀN HÌNH LCD 16x2

2.1 MỤC ĐÍCH

- Tìm hiểu và viết chương trình giao tiếp với keypad 4x4;

- Hiển thị trạng thái phím bấm lên LCD 16x2

Trong mikroC cung cấp các thư viện hàm giao tiếp với keypad 4x4 Thamkhảo trong phần help của MikroC

Ta xét các thông số và hàm cơ bản sau:

char keypadPort at P0 ; // khai báo ma trận phím ở port0

Keypad_Init(); // khởi tạo ma trận bàn phím

char Keypad_Key_Click(void);// trả về trạng thái của phím bấm từ (1den16)

Trang 18

2.2.2 Làm việc với LCD 16x2

Hình 2.2 Màn hình LCD 16x2.

Hình 2.3 Các chân chức năng trên màn hình LCD 16x2.

Màn hình LCD16x2 có 2 dòng và 16 cột, chức năng các chân của nó như sau:

Trang 19

Các thanh ghi của LCD

- Thanh ghi IR: Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR

Ví dụ:

Lệnh “hiển thị màn hình và con trỏ” có mã lệnh là 00001110

- Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAM DDRAM hoặc CGRAM ( ở chế độ ghi) hoặc dùng để chứa dữ liệu

từ 2 vùng RAM này gửi ra cho MPU (ở chế độ đọc)

- Cờ báo bận BF: (Busy Flag)

Khi đang thực thi các hoạt động bên trong, LCD bỏ qua mọi giao tiếp vớibên ngoài và bật cờ BF( thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên

để cho biết nó đang “bận”

- Bộ đếm địa chỉ AC : (Address Counter)

Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM (việc chọn lựa vùng RAM tương tác đã được bao hàm trong mã lệnh)

Sau khi ghi vào (đọc từ) RAM, bộ đếm AC tự động tăng lên (giảm đi)1 đơn vị

- Vùng nhớ của LCD

Vùng RAM hiển thị DDRAM : (Display Data RAM)

Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô kí tự trên màn hình

Vùng CGROM: Character Generator ROM

Chứa các mẫu kí tự loại 5x7 hoặc 5x10 điểm ảnh/kí tự, và định địa chỉ bằng 8 bit

Vùng CGRAM : (Character Generator RAM)

Người dùng có thể tạo các mẫu kí tự đồ họa riêng

- Phần cứng giao tiếp với LCD:

Trang 20

Hình 2.4 Giao tiếp giữa vi điều khiển và LCD 16x2.

Bảng mã lệnh của LCD:

Trang 21

- Một số cấu hình và hàm LCD trong mikroC

void Lcd_Init(); // khởi tạo LCD

void Lcd_Out(row , column , *text); // in ra ở hàng và cột tương ứng

void Lcd_Cmd(char out_char);

Các lệnh trong mikroC:

2.3 CÁC BƯỚC TIẾN HÀNH THÍ NGHIỆM

2.3.1 Giao tiếp với ma trận phím và màn hình LCD 16x2

unsigned short kp, cnt, oldstate = 0;

char txt[6];

char keypadPort at P0;

Trang 22

sbit LCD_RS at P2_0_bit; sbit LCD_EN at P2_1_bit; sbit LCD_D4 at P2_2_bit; sbit LCD_D5 at P2_3_bit; sbit LCD_D6 at P2_4_bit; sbit LCD_D7 at P2_5_bit; void main() {

cnt = 0;

Keypad_Init();

Lcd_Init();

Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1, 1, "Key :"); Lcd_Out(2, 1, "Times:");

do {

kp = 0;

do

kp = Keypad_Key_Click(); while (!kp);

switch (kp) {

case 1: kp = 49; break; // 1 case 2: kp = 50; break; // 2 case 3: kp = 51; break; // 3 case 4: kp = 65; break; // A case 5: kp = 52; break; // 4 case 6: kp = 53; break; // 5 case 7: kp = 54; break; // 6 case 8: kp = 66; break; // B case 9: kp = 55; break; // 7 case 10: kp = 56; break; // 8 case 11: kp = 57; break; // 9 case 12: kp = 67; break; // C case 13: kp = 42; break; // * case 14: kp = 48; break; // 0

Trang 23

Kết quả sau khi nap code:

Trên màn hình LCD hiện chữ Key: ở dòng đầu tiên và dòng thứ 2 hiện chữ time Khi một phím được nhấn, mã sẽ chuyển đổi mã phím thành giá trị ASCII tương ứng và hiển thị nó trên LCD

Vẽ lưu đồ thuật toán cho chương trình trên

2.4.2 Bài tập thực hành

1 Viết chương trình nhập vào một số nhị phân 4 bit và chuyển đổi số nhị phân đó sang số hexa hiển thị lên màn hình LCD Mô phỏng trên proteus và kiểm tra trên mạch phần cứng

Trang 24

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_Off); // Cursor off

Lcd_Out(1, 1, "Bin : "); // Write message text on LCD Lcd_Out(2, 1, "Hex: ");

do {

kp = 0; // Reset key code variable

// Wait for key to be pressed and released

do

// kp = Keypad_Key_Press(); // Store key code in kp variable

kp = Keypad_Key_Click(); // Store key code in kp variable while (!kp);

// Prepare value for output, transform key to it's ASCII value switch (kp) {

Trang 26

case 8: Hex = 56; break; // 8 case 9: Hex = 57; break; // 9 case 10: Hex = 65; break; // A case 11: Hex = 66; break; // B case 12: Hex = 67; break; // C case 13: Hex = 68; break; // D case 14: Hex = 69; break; // E case 15: Hex = 70; break; // F }

}

//WordToStr(Hex, Hex1); Lcd_Chr(2, 7, Hex); cot++;

Lcd_Chr(1, cot, kp); } while (1);

}

Trang 27

2 Viết chương trình nhập vào hai số hexa và tính tổng, tích của hai số hiển thị hai số đó lên màn hình LCD Mô phỏng trên proteus và kiểm tra trên mạch phần cứng.

unsigned short hexToDec(char hex) {

if (hex >= '0' && hex <= '9') {

return hex - '0';

} else if (hex >= 'A' && hex <= 'F') {

return hex - 'A' + 10;

}

return 0;

}

char decToHex(unsigned short dec) {

if (dec >= 0 && dec <= 9) {

return dec + '0';

} else if (dec >= 10 && dec <= 15) {

return dec - 10 + 'A';

}

return '0';

}

void main() {

unsigned short firstNumber = 0, secondNumber = 0, sum, product;

unsigned short inputCount = 0;

Trang 28

sum = firstNumber + secondNumber;

product = firstNumber * secondNumber;

2.5 CÂU HỎI KIỂM TRA

- Giải thích cấu trúc switch ?

Cấu trúc switch cũng được sử dụng để kiểm tra giá trị của một biến và thực hiện các hành động tương ứng với các trường hợp khác nhau

Cú pháp của cấu trúc switch trong C tương tự như ví dụ ở trên:

Trang 29

và ngăn không thực hiện các hành động trong các trường hợp tiếp theo.

Một điểm khác biệt của cấu trúc switch trong C so với các ngôn ngữ lập trình khác là nó cho phép sử dụng một biểu thức case mặc định (default) ở bất

kỳ vị trí nào trong khối switch, không nhất thiết phải đặt ở cuối như các ngôn ngữ khác.ấu trúc switch cũng được sử dụng để kiểm tra giá trị của một biến và thực hiện các hành động tương ứng với các trường hợp khác nhau

- Phương pháp quét ma trận phím

Phương pháp quét ma trận phím (hay còn gọi là phương pháp quét ma trận phím ma trận) là một kỹ thuật được sử dụng trong các ứng dụng đòi hỏi nhập liệu từ bàn phím Kỹ thuật này sử dụng một ma trận để biểu diễn các nút phím và thực hiện việc đọc dữ liệu từ bàn phím bằng cách quét ma trận này

Các bước thực hiện của phương pháp quét ma trận phím như sau:

Trang 30

Thiết lập ma trận phím: Tạo một ma trận có số hàng và số cột tương ứng với số lượng nút phím trên bàn phím Mỗi phần tử trong ma trận đại diện cho một nút phím và có giá trị tương ứng với mã ASCII của ký tự tương ứng với nút phím đó.

Quét ma trận: Lặp lại việc quét ma trận liên tục để kiểm tra xem có nút phím nào được nhấn không Việc quét có thể được thực hiện bằng cách duyệt từng hàng hoặc từng cột của ma trận, hoặc sử dụng một phương pháp quét khác phù hợp với ứng dụng cụ thể

Xử lý dữ liệu: Nếu có nút phím được nhấn, lấy giá trị của phần tử tương ứng trong ma trận và xử lý dữ liệu tương ứng với nút phím đó

Lặp lại quét ma trận: Sau khi xử lý dữ liệu, quay trở lại bước 2 để tiếp tục quét ma trận

Phương pháp quét ma trận phím thường được sử dụng trong các ứng dụngnhư bàn phím số, bàn phím điều khiển từ xa, các thiết bị nhập liệu đơn giản Tuynhiên, phương pháp này có một số hạn chế, chẳng hạn như việc chỉ đọc được một phím tại một thời điểm, không thể xử lý được các phím đồng thời được nhấn, và không thể phát hiện được các thao tác nhấn giữ phím

Trang 31

BÀI 3: GIAO TIẾP VỚI CÁC ĐÈN LED 7 THANH 3.1 MỤC ĐÍCH

- Tìm hiểu về Led 7 thanh và phương pháp điều khiển;

- Lập trình ứng dụng hiển thị Led 7 thanh

3.2 CƠ SỞ LÝ THUYẾT

3.2.1 Giới thiệu về đèn LED 7 thanh

Led 7 thanh là thiết bị chuyên dùng để hiển thị số 0 đến9 Hình dạng của led 7 thanh trong hình 3.1

Hình 3.1 Đèn LED 7 thanh.

Có 2 loại Led 7 thanh:

- Led 7 thanh Anot chung

- Led 7 thanh Katot chung

Trang 32

Hình 3.2 Cấu tạo đèn LED 7 thanh.

Nguyên lý ghép nối vi điều khiển và led 7 thanh:

Ngày đăng: 30/11/2024, 15:01

TÀI LIỆU CÙNG NGƯỜI DÙNG

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

TÀI LIỆU LIÊN QUAN

w