Xuất dữ liệu mảng ra Post vi điều khiển
Hôm nay mình sẽ hướng dẫn cách bạn viết code xuất dữ liệu từ mảng ra post của vi điều khiển, cái này dc sử dụng rất nhiều trong lập trình LED trái tim
Để hiểu được bài này bạn cần xem lại bài Ngôn ngữ lập trình C cơ bản cho 8051
Ta sẽ xét đoạn code sau:
#include //Khai bao thu vien
// VD: delay(20) == 20x50 = 1000ms = 1s
void delay(unsigned char time){//Chuong trinh tao tre
unsigned int t;
for(t=0;t<time;t++){
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
while(!TF0);
TF0=TR0=0;
}
}
unsigned char q; //Khai bao kieu du lieu unsigned char cho bien q
unsigned char m1[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //Khai bao mang du lieu
void main(){ //Chuong trinh chinh
P0=0x00; //Cho Post P0 ve muc logic 0
delay(20); //Tao tre 1 giay
while(1){ //Vong lap vo tan
for(q=0;q<8;q++){ //Vong lap co dieu kien
delay(10); //tre 0.5 giay
P0=m1[q]; //xuat du lieu mang ra post P0
}
}
}
Tong mảng m1 ta sẽ thấy có các ký tự 0x80...0x01 đây là mã HEX, các bạn phải đổi mã BIN ==> HEX để cho gọn
0x80 tương đương mã HEX là 80 còn 0x là để cho trình biên dịch hiểu đây là mã HEX
HEX80 = BIN 10000000
HEX40 = BIN 01000000
........................
HEX01 = BIN 00000001
Để đổi từ Bin sang Hex bạn có thể sd máy tinh để chuyển cho nhanh, VD casio FX-570MS vào chế độ BASE, nút log = BIN; ^ = HEX; x2 = DEC
fx500ms cũng đổi được nhưng phải chuyển hệ cho nó. (REG....)
Như vậy ta sử dụng vòng lặp for để truy xuất toàn bộ mã trên ra post của vi điều khiển để điều khiển cho LED sáng chẳng hạn
vòng lặp for sẽ kiểm tra biến q , ban đầu set q=0 thì so sánh q q++ tức tự tăng thêm 1, q=1 và ....
cho tới khi điều kiện sai 8<8 thì vòng lặp sẽ thoát ko thực hiện code trong {} nữa
Chạy xong thì lại bị vòng lặp vô tận while(1) cho lặp đi lặp lại quá trình trên.
Code trên sẽ cho led sáng lần lượt từ P0_0 tới P0_7 rồi lặp lại nhờ vòng lặp while(1)
Bài viết sửa lúc 16-09-2013, 13:52 bởi Vũ Văn Thái