Top 14 # Cấu Trúc Và Lập Trình Họ 8051 / 2023 Xem Nhiều Nhất, Mới Nhất 11/2022 # Top Trend | 3mienmoloctrungvang.com

Cấu Trúc Và Lập Trình Họ Vi Điều Khiển 8051 / 2023

CẤU TRÚC VÀ LẬP TRÌNH HỌ VI ĐIỀU KHIỂN 8051

Tóm tắt:

Chương 1 Bộ vi điều khiển 8051

Chương 2 Lập trình hợp ngữ 8051

Chương 3 Vòng lặp, lệnh nhảy và lệnh gọi

Chương 4 Cổng vào/ra và lập trình

Chương 5  Chế độ định địa chỉ

Chương 6 Lệnh số học

Chương 7 Lệnh logic

Chương 8 Lệnh xử lý bít và lập trình

Chương 9 Bộ đếm định thời và lập trình

Chương 10 Truyền tin gián tiếp với 8051

Chương 11 Ngắt và lập trình

Chương 12 Nối ghép với thế giới thực I – LCD, ADC và cảm biến

Chương 13 Nối ghép với thế giới thực II – động cơ bước, bàn phím và bộ biến đổi DAC

Chương 14 Nối ghép 8031/51 với bộ nhớ ngoài

Chương 15 Nối ghép 8031/51 với 8255

Lời mở đầu:

Ngày nay các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi và thâm nhập ngày càng nhiều trong các lĩnh vực kỹ thuật và đời sống xã hội. Hầu hết các thiết bị kỹ thuật từ phức tạp cho đến đơn giản như thiết bị điều khiển tự động, thiết bị văn phòng cho đến các thiết bị trong gia đình đều có dùng các bộ vi điều khiển. Mặc dù có nhiều ứng dụng thực tế như vậy nhưng những tài liệu hiện có chưa đáp ứng được nhu cầu về học tập, giảng dạy và nghiên cứu ứng dụng các bộ vi điều khiển đang ngày càng tăng hiện nay.

Xuất phát từ thực tế đó, mục đích chính của tài liệu muốn tập trung giới thiệu những kiến thức cơ bản nhất về cấu trúc và lập trình hệ vi điều khiển. Tài liệu đặc biệt chú trọng giới thiệu phần ứng dụng bao gồm tổ chức các hệ thực tiễn và phương pháp lập trình cho các hệ đó.

Lập Trình Cấu Trúc Và Lập Trình Hướng Đối Tượng / 2023

Lập trình cấu trúc và lập trình hướng đối tượng3.1. Phương pháp lập trỡnh cấu trỳc– Tư tưởng chính của lập trỡnh cấu trỳc là tổ chức chương trỡnh thành cỏc chương trỡnh con. Trong PASCAL cú 2 kiểu chương trỡnh con là thủ tục và hàm. Trong C chỉ cú một loại chương trỡnh con là hàm. Hàm là một đơn vị chương trỡnh độc lập dùng để thực hiện một phần việc nào đó như: Nhập số liệu, in kết quả hay thực hiện một số tính toán. Hàm cần có đối và các biến, mảng cục bộ dùng riêng cho hàm.Việc trao đổi dữ liệu giữa các hàm thực hiện thông qua các đối và các biến toàn bộ.Các ngôn ngữ như C, PASCAL, FOXPRO là các ngôn ngữ cho phép triển khai phương pháp lập trỡnh cấu trỳc.Một chương trỡnh cấu trỳc gồm cỏc cấu trỳc dữ liệu (như biến, mảng, bản ghi) và các hàm, thủ tục.Nhiệm vụ chính của việc tổ chức thiết kế chương trỡnh cấu trỳc là tổ chức chương trỡnh thành cỏc hàm, thủ tục: Chương trỡnh sẽ bao gồm cỏc hàm, thủ tục nào.Ví dụ xét yêu cầu sau: Viết chương trỡnh nhập toạ độ (x,y) của một dẫy điểm, sau đó tỡm một cặp điểm cách xa nhau nhất. Trên tư tưởng của lập trỡnh cấu trỳc cú thể tổ chức chương trỡnh như sau:+ Sử dụng 2 mảng thực toàn bộ x và y để chứa toạ độ dẫy điẻm+ Xây dựng 2 hàm:Hàm nhapsl dùng để nhập toạ độ n điểm, hàm này có một đối là biến nguyên n và được khai

jmax=j;}}printf(“nDoan thang lon nhat co do dai bang: %0.2f”,dmax);printf(“n Di qua 2 diem co chi so la %d va %d”,imax,jmax);getch();}3.2. Phương pháp lập trỡnh hướng đối tượng+ Khỏi niệm trung tõm của lập trỡnh hướng đối tượng là lớp (class). Có thể xem lớp là sự kết hợp các thành phần dữ liệu và các hàm. Cũng có thể xem lớp là sự mở rộng của cấu trúc trong C (struct) bằng cách đưa thêm vào các phương thức (method) hay cũn gọi là hàm thành viờn (member function). Một lớp được định nghĩa như sau:

Lập Trình C: Cấu Trúc (Struct) / 2023

Khái niệm

là một kiểu dữ liệu dạng tổng hợp (giống kiểu bản ghi (record) trong Pascal), cho phép nhiều kiểu dữ liệu được nhóm lại với nhau. Struct thường được dùng để tạo và lưu giữ thông tin của các đối tượng (sách, sinh viên, học sinh, nhân viên, …).

Định nghĩa cấu trúc và khai báo biến cấu trúc

1. Không dùng typedef

Cấu trúc có thể được định nghĩa ngoài hoặc trong các hàm, nếu được định nghĩa trong hàm thì cấu trúc đó chỉ dùng được cho hàm chứa nó, còn nếu được định nghĩa ngoài các hàm thì nó có thể được sử dụng ở tất cả các hàm.

Cú pháp:

, trong đó struct là từ khoá, bên trong cặp ngoặc {} ta có thể khai báo các thành phần của cấu trúc bao gồm các loại biến và mảng có kiểu dữ liệu khác nhau, hoặc ta cũng có thể khai báo biến hoặc mảng cấu trúc khác.

struct HocVien {/* HocVien sẽ là một kiểu dữ liệu mới sau khi khai báo xong cấu trúc */ char Ten[30]; int Namsinh; float DiemTB; };

Khai báo biến cấu trúc:

Sau khi ta đã định nghĩa được cấu trúc rồi thì ta coi như nó là một kiểu dữ liệu mới, và khi đó ta có thể khai báo biến có kiểu dữ liệu này. Có 2 cách khai báo biến cấu trúc:

– Cách 1: Khai báo trực tiếp cùng định nghĩa cấu trúc. Ví dụ:

struct HocVien { char Ten[30]; int Namsinh; float DiemTB; } HV1, HV2;/* khai báo 2 biến HV1 và HV2 kiểu HocVien một cách trực tiếp */

– Cách 2: Khai báo gián tiếp sau khi đã định nghĩa xong cấu trúc. Ví dụ:

struct HocVien { char Ten[30]; int Namsinh; float DiemTB; }; struct HocVien HV1, HV2;//khai báo 2 biến HV1 và HV2 có kiểu HocVien

2. Dùng typedef

Sau khi định nghĩa cấu trúc, Kiểu_cấu_trúc sẽ được coi là một kiểu dữ liệu (không phải là biến), và ta có thể khai báo các biến có kiểu dữ liệu là Kiểu_cấu_trúc. Ví dụ:

typedef struct { char Ten[30]; int Namsinh; float DiemTB; } HocVien;//HocVien sẽ là một kiểu dữ liệu mới HocVien HV1, HV2;//khai báo hai biến HV1 và HV2 có kiểu dữ liệu HocVien HocVien DSHV[50];

Gán giá trị cho biến và mảng cấu trúc

Giả sử ta khai báo một biến tên HV có kiểu dữ liệu HocVien đã được được định nghĩa như ở trên và tiến hành gán giá trị cho nó, ta làm như sau:

typedef struct { char Ten[30]; int Namsinh; float DiemTB; } HocVien;//HocVien sẽ là một kiểu dữ liệu mới int main(){

, trong đó “Minh” được gán cho chuỗi Ten, 1983 được gán cho biến Namsinh, 8.5 được gán cho biến DiemTB. Những chuỗi và biến này là những thành phần của biến HV.

Từ ví dụ trên ta thấy rằng bản chất của việc gán giá trị cho biến HV thực chất là gán các giá trị cho các biến thành phần của HV, trong đó các thành phần của biến HV trong phần định nghĩa được khai báo theo trật tự nào thì khi tiến hành gán các giá trị cũng phải được đặt theo trật tự đó. Như ví dụ trên ta thấy chuỗi Ten được khai báo đầu tiên thì trong phần gán giá trị cho biến HV, chuỗi “Minh” cũng phải được đặt đầu tiên (vị trí thứ nhất), không được đặt ở vị trí khác; Namsinh được khai báo ở vị trí thứ hai thì giá trị nó được gán phải là 1983 (vị trí gán thứ hai) chứ không phải là 8.5 (vị trí thứ 3), mà 8.5 là giá trị được gán cho biến DiemTB vì biến này được khai báo ở vị trí thứ 3 trong phần định nghĩa cấu trúc.

Đối với việc gán giá trị cho mảng cấu trúc, ta thực hiện như ví dụ sau:

Truy cập các thành phần của cấu trúc

Truy cập vào biến cấu trúc

Để truy cập các thành phần của một biến cấu trúc thì ta sử dụng cú pháp như sau:

Tên_biến_cấu_trúcTên_biến_thành_phần

Ta sử dụng toán tử dấu chấm (.) để truy cập đến các biến thành phần của biến cấu trúc. Lư­u ý rằng mỗi lần truy cập ta chỉ có thể truy cập đến một biến thành phần duy nhất. Ví dụ như chúng tôi HV.Namsinh, HV.DiemTB.

Ví dụ:

typedef struct { char ten[30]; int namSinh; float diemTB; } HocVien;

int main(){

HocVien HV;

//thiết lập (set) dữ liệu cho biến cấu trúc: strcpy(HV.ten,”ABCD”); HV.namSinh=2002; HV.diemTB=8.5;//hiển thị dữ liệu cho biến cấu trúc: printf(” n Ten: %s”,HV.ten); printf(” n Nam sinh: %d”,HV.namSinh); printf(” n Diem trung binh: %g”,HV.diemTB); return 0; }

Truy cập vào con trỏ cấu trúc

Để truy cập các thành phần của một con trỏ cấu trúc thì ta sử dụng cú pháp như sau:

Tên_con_trỏ_cấu_trúcTên_biến_thành_phần

Ví dụ:

typedef struct { char ten[30]; int namSinh; float diemTB; } HocVien;

int main(){

HocVien* pHV, HV;

Nhập liệu và hiển thị cho cấu trúc

Để nhập liệu và hiển thị cho một cấu trúc nào đó, ta làm như ví dụ sau:

typedef struct { char ten[30]; int namSinh; float diemTB; } HocVien;

int main(){

HocVien HV;

//nhập thông tin cho học viên HV: printf(“Moi nhap ten: “); gets(HV.ten); printf(“Moi nhap nam sinh: “); scanf(“%d”,&HV.namSinh); printf(“Moi nhap diem trung binh: “); scanf(“%f”,&HV.diemTB);//hiển thị dữ liệu cấu trúc: printf(” n Ten: %s”,HV.ten); printf(” n Nam sinh: %d”,HV.namSinh); printf(” n Diem trung binh: %g”,HV.diemTB); return 0; }

Trường hợp nếu ta muốn tách thành các hàm nhập liệu và hiển thị riêng thì ta làm như sau:

typedef struct { char ten[30]; int namSinh; float diemTB; } HocVien;

void nhapLieu(HocVien* HV){ printf(“Moi nhap ten: “); printf(“Moi nhap nam sinh: “); printf(“Moi nhap diem trung binh: “); }

void hienThi(HocVien HV){ printf(” n Ten: %s”,HV.ten); printf(” n Nam sinh: %d”,HV.namSinh); printf(” n Diem trung binh: %g”,HV.diemTB); }

int main(){ HocVien HV;

//nhập thông tin cho học viên HV: nhapLieu(&HV);//hiển thị dữ liệu cấu trúc: hienThi(HV); return 0; }

Ví dụ về cấu trúc

Viết chương trình nhập một danh sách gồm n sinh viên (n nhập từ bàn phím) gồm các trường họ tên, tuổi, điểm trung bình, sau đó nhập vào họ tên của một sinh viên từ bàn phím và tìm kiếm xem trong danh sách có ai có họ tên như vậy không. Chương trình được viết như sau:

typedef struct{ char hoTen[30]; int tuoi; float diemTB; } SinhVien;

int nhapKichThuocMang(){ int n; do{ printf(” n Moi ban nhap so luong sinh vien: “); scanf(“%d”,&n); }while(n<=0);

return n; }

void nhapLieu(SinhVien SV[],int n){ int i; for(i=0; i<n; i++){ printf(” n Nhap thong tin cho sinh vien %d”,i+1); printf(” n Ho va ten: “); fflush(stdin); gets(SV[i].hoTen); gets(SV[i].hoTen); do{ printf(“Nhap tuoi: “); scanf(“%d”,&SV[i].tuoi); }while(SV[i].tuoi<18); do{ printf(“Diem trung binh: “); scanf(“%f”,&SV[i].diemTB); } }

void timKiemTheoTen(SinhVien SV[],int n){ char sv[30]; int search, i; printf(” n Moi ban nhap ho ten cua sinh vien can tim: “); gets(sv); gets(sv); search=0; for(i=0; i<n; i++){ if(strcmp(SV[i].hoTen,sv)==0){ printf(” n Tim thay!”); search=1; break; } } if(search==0) printf(” n Khong tim thay!”); }

int main(){ int n; SinhVien *SV;

n=nhapKichThuocMang();

Cấu Trúc Lập Trình C Cơ Bản / 2023

Cấu trúc lập trình C cơ bản

Từ khóa struct được sử dụng để tạo cấu trúc.

Cú pháp cấu trúc

struct structure_name

{

data_type member1;

data_type member2;

data_type memeber;

};

Lưu ý : Đừng quên dấu chấm phẩy }; trong dòng kết thúc.

Chúng ta có thể tạo cấu trúc cho một người như đã đề cập ở trên là:

struct person

{

char name [50];

int citNo;

lương nổi;

};

Khai báo ở trên tạo ra kiểu dữ liệu có nguồn gốc struct person.

2. Khai báo biến cấu trúc

Đối với cấu trúc trên của một người, biến có thể được khai báo là:

struct person

{

char name[50];

int citNo;

float salary;

};

int main()

{

struct person person1, person2, person3[20];

return 0;

}

Một cách khác để tạo biến cấu trúc là:

struct person

{

char name[50];

int citNo;

float salary;

} person1, person2, person3[20];

Trong cả hai trường hợp, hai biến person1, person2 và một mảng person3 có 20 phần tử kiểu struct được tạo ra.

3. Truy cập các phần tử của một cấu trúc

Có hai loại toán tử được sử dụng để truy cập các phần tử của một cấu trúc.

Bất kỳ phần tử nào của một cấu trúc có thể được truy cập như:

structure_variable_name.member_name

Giả sử, chúng ta muốn truy cập mức lương cho biến person2 . Sau đó, nó có thể được truy cập như sau:

person2.salary

4. Ví dụ về cấu trúc

Viết chương trình C để thêm hai khoảng cách do người dùng nhập vào. Đo khoảng cách phải bằng inch và chân. (Lưu ý: 12 inch = 1 foot)

#include

struct Distance

{

int feet;

float inch;

} dist1, dist2, sum;

int main()

{

printf(“1st distancen”);

printf(“Enter feet: “);

scanf(“%d”, &dist1.feet);

printf(“Enter inch: “);

scanf(“%f”, &dist1.inch);

printf(“2nd distancen”);

printf(“Enter feet: “);

scanf(“%d”, &dist2.feet);

printf(“Enter inch: “);

scanf(“%f”, &dist2.inch);

chúng tôi = chúng tôi + dist2.feet;

chúng tôi = chúng tôi + dist2.inch;

{

++sum.feet;

chúng tôi = chúng tôi – 12;

}

printf(“Sum of distances = %d’-%.1f””, sum.feet, sum.inch);

return 0;

}

Đầu ra:

Viết struct structure_name variable_name để khai báo một biến cấu trúc không trực quan như những gì nó biểu thị và mất một số lượng đáng kể thời gian phát triển.

typedef struct complex

{

int imag;

float real;

} comp;

int main()

{

comp comp1, comp2;

}

Vì vậy, các nhà phát triển thường sử dụng typedef để đặt tên cho toàn bộ cấu trúc. Ví dụ:

typedef struct complex

{

int imag;

float real;

} comp;

int main()

{

comp comp1, comp2;

}

Ở đây, typedef từ khóa được sử dụng trong việc tạo kiểu comp (có dạng là struct complex).

Sau đó, hai biến cấu trúc comp1 và comp2 được tạo bởi loại comp này.

6. Các cấu trúc bên trong các cấu trúc

Các cấu trúc có thể được lồng trong các cấu trúc khác trong lập trình C.

struct complex

{

int imag_value;

float real_value;

};

struct number

{

struct complex comp;

int thực;

} num1, num2;

Giả sử, bạn muốn truy cập imag_value cho biến cấu trúc num2 sau đó, sử dụng thành phần cấu trúc sau đây.

num2.comp.imag_value

Một số kiến thức về lập trình C: