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

BÁO cáo THỰC HÀNH lập TRÌNH CHO họ VI điều KHIỂN 8051

26 34 0

Đ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 26
Dung lượng 589 KB

Nội dung

BÁO CÁO THỰC HÀNH LẬP TRÌNH CHO HỌ VI ĐIỀU KHIỂN 8051 1.- Nêu cấu trúc chương trình viết ngôn ngữ C - Nêu cấu trúc với if else, while, while, for, switch - Phân biệt khác while while - Mảng liệu gì? Cách thực C - Con trỏ gì? Cách thực C - Phương pháp thực với mảng, trỏ, chuỗi kí tự - Ngắt gì? Nêu loại ngắt vi điều khiển 8051 - Cấu trúc chương trình có sử dụng ngắt KeilC MikroC - Nêu bước thực chương trình MikroC hình ảnh - Viết chương trình điều khiển led đơn để thị chữ đầu tên sinh viên thực hiện? Vẽ lưu đồ thuật toán - Phương pháp quét ma trận bàn phím? - Phương pháp chống nhiễu, chống đè cho nút bấm phần cứng phần mềm - Phương pháp quét led thanh? - Viết chương trình điều khiển đếm từ 0->10 -500 thực lại? Vẽ lưu đồ thuật tốn? Viết chương trình cảnh báo nhiệt t > 40 C? vẽ lưu đồ thuật tốn? Viết chương trình đếm số bấm nút sử dụng ngắt thị led thanh? Lưu đồ thuật toán Câu Cấu trúc chương trình viết bằng ngữ C Một hàm C phải bao gồm kiểu trả (kiểu trả void khơng có giá trị trả về), tên xác định, danh sách tham số để ngoặc đơn (nếu danh sách tham số ghi void bên dấu ngoặc), sau khối câu lệnh (hay khối mã) và/hay câu lệnh return (Nếu kiểu trả void mệnh đề khơng bắt buộc phải có Ngược lại, khơng bắt buộc có câu lệnh return mà tùy theo kỹ thuật, người lập trình dẫn dịng mã cho hướng chẻ nhánh trả kiểu.) < kiểu_trả_về> tên_hàm { Return; } Trong đó, N biến khai báo kiểu liệu tách rời dấu phẩy ,: var1, var2,…,varN; Toàn danh sách đặt ngoặc đơn sau tên_hàm - Cấu trúc điều kiện if … else Dạng khuyết If (biểu thức điều kiện) { Khối lệnh; } Cách hoạt động: Đầu tiên, chương trình kiểm tra biểu thức điều kiện sau if Nếu biểu thức điều kiện câu lệnh khối lệnh cấu trúc if thực Ngược lại, chương trình khỏi cấu trúc if thực lệnh sau cấu trúc if Biểu diễn dạng lưu đồ cách hoạt động cấu trúc if: Dạng đầy đủ if (biểu thức điều kiện) { Khối lệnh 1; } else { Khối lệnh 2; } Cách hoạt động: Đầu tiên, chương trình kiểm tra biểu thức điều kiện sau if, biểu thức điều kiện thực câu lệnh khối lệnh Ngược lại, biểu thức điều kiện sai thực câu lệnh khối lệnh Biểu diễn dạng lưu đồ: - Cấu trúc while - Cú pháp: while(biểu thức) Khối lệnh; - Sự hoạt động vòng lặp while: Bước 1: tính giá trị (biểu thức) sau while Bước 2: giá trị tính (biểu thức) ‘sai’ (==0) kết thúc vịng lặp while Bước 3: giá trị (biểu thức) ‘đúng’ (!=0) thực khối lệnh sau while Bước 4: quay lại bước Chú ý: Thân while thực lần nhiều lần khơng thực lần từ đầu biểu thức sau while sai - Biểu diễn lưu đồ: - Cấu trúc lặp for Cú pháp: for (biểu thức 1; biểu thức 2; biểu thức 3) Khối lệnh; Trong đó: Biểu thức 1: biểu thức khởi đầu Biểu thức 2: biểu thức điều kiện - điều kiện lặp Biểu thức 3: bước nhảy - thường dùng với ý nghĩa thay đổi bước nhảy Cả biểu thức tuỳ chọn, chúng vắng mặt câu lệnh cụ thể dấu chấm phẩy phải có Sự hoạt động vòng lặp for: Bước 1: Thực biểu thức khởi đầu – Biểu thức Bước 2: Tính giá trị biểu thức để xác định điều kiện lặp Nếu biểu thức có giá trị ‘sai’ (==0) khỏi vịng lặp Ngược lại, biểu thức có giá trị ‘đúng’ ( khác 0) chuyển tới bước Bước 3: Thực khối lệnh sau for ( thân for ), chuyển tới bước Bước 4: Thực biểu thức 3, quay bước Biểu diễn lưu đồ: - Cấu trúc lặp “do while” Cú pháp: Khối lệnh; while (biểu thức); Giải thích cú pháp: Bước 1: thực khối lệnh sau Bước 2: kiểm tra giá trị biểu thức sau while, có giá trị ‘đúng’ ( khác 0) lặp lại bước 1, ‘sai’ (=0) kết thúc vịng lặp Biểu diễn lưu đồ: - Cấu trúc lựa chọn: switch Cú pháp lệnh switch kiểm tra vài giá trị cho biểu thức, tương tự với làm đầu liên kết vài lệnh if else if với Dạng thức sau: switch (expression) { case constant1: block of instructions break; case constant2: block of instructions break; default: default block of instructions } Nó hoạt động theo cách sau: switch tính biểu thức kiểm tra xem có constant1 hay khơng, thực block of instructions tìm thấy từ khố break, sau nhảy đến phần cuối cấu trúc lựa chọn switch Còn khơng, switch kiểm tra xem biểu thức có constant2 hay khơng Nếu thực block of instructions tìm thấy từ khố break Cuối cùng, giá trị biểu thức không định (bạn định câu lệnh case tuỳ thích), chương trình thực lệnh phần default: Nếu tồn phần khơng bắt buộc phải có - Sự khác while while While dùng để kiểm tra điều kiện trước; điều kiện trả true thực thi câu lệnh bên Do-While dùng để thực thi câu lệnh bên lầntrước kiểm tra điều kiện; điều kiện trả true tiếp tục thực thi; điều kiện false khỏi vịng lặp Mảng liệu Mảng tập hợp phần tử cố định có kiểu, gọi kiểu phần tử Kiểu phần tử có kiểu bất kỳ: ký tự, số, chuỗi ký tự…; có ta sửdụng kiểu mảng để làm kiểu phần tử cho mảng (trong trường hợp ta gọi mảng mảng hay mảng nhiều chiều) Ta chia mảng làm loại: mảng chiều mảng nhiều chiều Mảng kiểu liệu sử dụng thường xuyên Chẳng hạn người ta cần quản lý danh sách họ tên khoảng 100 sinh viên lớp Nhận thấy họ tên để lưu trữ ta cần biến kiểu chuỗi, 100 họ tên cần khai báo 100 biến kiểu chuỗi Nếu khai báo đoạn khai báo thao tác họ tên dài dòng rắc rối Vì thế, kiểu liệu mảng giúp ích ta trường hợp này; cần khai báo biến, biến coi tương đương với 100 biến chuỗi ký tự; mảng mà phần tử chuỗi ký tự Hay đểlưu trữ từ khóa ngơn ngữ lập trình C, ta dùng đến mảng để lưu trữchúng - Cách thực Mảng chiều Cú pháp: Ý nghĩa: + Tên mảng: tên đặt theo quy tắc đặt tên danh biểu Tên mang ý nghĩa tên biến mảng +Số phần tử: số nguyên, cho biết số lượng phần tử tối đa mảng (hay nói khác kích thước mảng gì) +Kiểu: phần tử mảng có liệu thuộc kiểu Ở đây, ta khai báo biến mảng gồm có số phần tử phần tử, phần tử thứ tên mảng [0], phần tử cuối tên mảng[số phần tử -1] Mảng nhiều chiều Mảng nhiều chiều mảng có từ chiều trở lên Điều có nghĩa phần tử mảng mảng khác Người ta thường sử dụng mảng nhiều chiều để lưu ma trận, tọa độ chiều, chiều… Phần vấn đề liên quan đến mảng chiều; mảng 3, 4, … chiều tương tự (chỉ cần tổng qt hóa lên) Khai báo mảng chiều tường minh Cú pháp: > Programs >> Mikroelektronika >> MikroC PRO for PIC double click vào shortcut hình Desktop - Sau khởi động phần mềm, giao diện xuất sau: 12 Ban đầu phần mềm load ví dụ có sẵn thư mục cài đặt, ta tắt project cách click vào Tab menu Project >> Close Project - Tạo project cho việc lập trình: Vào lại Tab menu Project >> New Project Sau nhấp chọn để tạo project cửa sổ sau xuất hiện: Đây cửa sổ thiết lập thông số project + Ở ô Project Name: bạn đặt tên cho project (tùy ý), chẳng hạn đặt tên " Vi du 1" 13 + Ở ô Project Folder: chọn đường dẫn để lưu project, để kiểm soát liệu cho công việc bạn nên tạo folder cho project + Ơ Device Name: chọn dịng vi điều khiển, bạn sử dụng pic16F877A để lập trình tìm tên "P16F877A" hộp combo box ấn nút xổ xuống + Device clock: chọn tần số hoạt động cho vi điều khiển, tần số tần số thạch anh sử dụng cho vi điều khiển Cuối nhấn Next để chuyển qua bước Khi cửa sổ sau xuất hiện: Trong bước này, bạn để tiếp tục nhấn Next đến bước sau: Trong cửa sổ này, bạn stick vào nút có dịng chữ " Include None (Advaned)" nhấn nút Next Trong bước cuối bạn để mặc định nhấn nút Finish cửa sổ lập trình xuất hiện, sẵn sàng cho bạn viết code 14 Bạn viết code vào hai dấu ngoặc { } - Đoạn code đầu tiên, giả sử ta muốn tất chân port B lên mức (5V) Ta viết sau: TRISB=0x00; PORTB=0xFF; Sau bạn nhấp vào nút Build nhấn tổ hợp phím Ctrl + F9 để tạo file hex Mỗi port, chân vi điều khiển có chức riêng, nhiên tất chúng (trừ chân cấp nguồn , reset ) có khả làm chân digital input/output (ngõ vào - ngõ với mức logic 1) Do muốn chân vi điều khiển làm ngõ vào hay ngõ phải sử dụng lệnh TRIS, sử dụng cho port kèm với tên port Ví dụ đề thiết lập ngõ vào-ra cho chân portB sử dụng lệnh TRISB Lệnh nhận giá trị số thập phân Dec, số nhị phân Bin hay số hex 0x Bạn thiết lập ngõ vào - cho chân port hay port Ví dụ bạn muốn Chân RB0 portB ngõ bạn viết sau: 15 Cách 1: TRISB.F0=0; // Điều có nghĩa bit portB nhận giá trị nên ngõ ra, nhận giá trị ngõ vào Cách tác động đến bit không ảnh hưởng bit khác - Viết chương trình điều khiển led đơn để thị tên sinh viên Void maid() { Do{ P0.b0=0; P3.b0=0; Delay_ms(100); P0.b1=0; P3.b1=0; Delay_ms(100); P1.b0=0; P2.b0=0; Delay_ms(100); P1.b1=0; P2.b1=0; Delay_ms(100); P1.b2=0; P2.b2=0; Delay_ms(100); P1.b3=0; P2.b3=0; Delay_ms(100); P1.b4=0; P2.b4=0; Delay_ms(100); P1.b5=0; P2.b5=0; Delay_ms(100); P1.b6=0; P2.b6=0; Delay_ms(100); P1.b7=0; P2.b7=0; // Sáng dần chữ T Delay_ms(100); P0=0xff; P1=0xff; P2=0xff; P3=0xff; // Tắt Port Delay_ms(100); 16 P1=0; P2=0; P0.b0=0; P0.b1=0; P3.b0=0; P3.b1=0; Delay_ms(100); } while(1); } // Sáng chữ T 17 Câu 5: Phương pháp quét ma trận bàn phím? Ma trận phím 4x4 gồm có 16 nút bấm xếp theo ma trận hàng, cột Các nút bấm hàng cột nối với nhau, ma trận phím 4x4 có tổng cộng ngõ Sơ đồ ngun lý: Mơ phỏng: 18 Ma trận phím 4x4 cho phép bạn nhập chữ số, chữ cái, ký hiệu vào điều khiển qua dùng để điều khiển thiết bị ngoại vi Các bạn mắc thêm trở treo (thơng thường 10K) cho nút bấm để nút bấm hoạt động ổn định - Nguyên lý hoạt động ma trận phím Để giao tiếp với ma trận phím 4x4, dùng phương pháp "quét" để kiểm tra xem nút bấm, cụ thể cách quét sau (quét theo cột): Các chân P1.0, P1.1, P1.2, P1.3 (các hàng) thiết lập chân INPUT, lại chân P1.4, P1.5, P1.6, P1.7 (các cột) chân OUTPUT (ở mức logic ‘0’) Câu 6:- Phương pháp quét cho led đoạn Dựa theo nguyên tắc quét ảnh mắt có tượng lưu ảnh võng mạc nên ta quét với tần số nhanh mắt khơng có cảm giác sáng Led mà có cảm giác sáng tắt Đầu tiên ta phải gửi liệu muốn hiển thị cho Led1 bật chân điều khiển Led1 lên để hiển thị Sau ta gửi tiếp liệu muốn hiển thị Led2 bật chân điều khiển Led2 số hiển thị Tiếp tục với Led3 Led4 Quá trình diễn nhanh với tần số cao nên ta khơng có cảm giác Led sáng - Viết chương trình điều khiển đếm từ 0->10 -500 thực lại? Vẽ lưu đồ thuật toán? #include "Display_utils.h" unsigned short shifter,digits_array_index; unsigned int digit, number; unsigned short digits_array[4]; void main(){ int n = 0; digit = 0; digits_array_index = 0; 19 shifter = 1; P0 = 0; number = 0; //=========================================== ====================== { for(n=0;n 40 C? vẽ lưu đồ thuật toán? 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; sbit OW_Bit at P1_2_bit; const unsigned short TEMP_RESOLUTION = 9; char *text = "000.0000"; unsigned temp; void Display_Temperature(unsigned int temp2write) { const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8; char temp_whole; unsigned int temp_fraction; if (temp2write & 0x8000) { text[0] = '-'; temp2write = ~temp2write + 1; } temp_whole = temp2write >> RES_SHIFT; if(temp_whole < 40){ P0.B1 = 0xFF; } else P0.B1 = 0x00; if (temp_whole/100) 22 text[0] = temp_whole/100 + 48; else text[0] = '0'; text[1] = (temp_whole/10)%10 + 48; text[2] = temp_whole%10 + 48; //=========================================== ============= temp_fraction = temp2write

Ngày đăng: 08/10/2021, 09:07

TỪ KHÓA LIÊN QUAN

w