Chào mừng đến với Câu Lạc Bộ Sáng Tạo
Chia sẻ kinh nghiệm
Kết nối đam mê
Đang cập nhật thời gian...
BÀI VIẾT NỔI BẬT
Xin chào! Tôi là Ếch Sáng Tạo :-)
Chia sẻ trang




Chuyên mục
Bài mới
Xem nhiều
Thống kê
  • Bài viết: 334/334
  • Thành viên: 10.085
  • Đang online: 10
  • Khách hôm nay: 2.916
  • Khách hôm qua: 2.352
  • Tổng khách: 16.197.519
Bài viết
Bài 2: Xuất dữ liệu mảng ra Post vi điều khiển - Lập trình C cơ bản - SangTaoClub.Net
Bài 2: Xuất dữ liệu mảng ra Post vi điều khiển - Lập trình C cơ bản
Đăng bởi: Vũ Văn Thái - Thời gian: 06-06-2013, 20:49
Chuyên mục: Học lập trình 8051 - Lượt xem: 5.210

 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
  • Bạn chưa đăng nhập, không thể viết bình luận!
    Bấm vào đây để Đăng nhập hoặc Đăng ký!
  • BiNa2405 lúc 29-11-2014, 21:10
    Thanks add.
  • sontra9x lúc 05-10-2013, 13:29
    vâng, b có thể làm thêm tới 1 số bài viết dùng ic mở rộng chân 74hc595 được k ạ, vì khi mún dùng nhiều thêm đèn thỳ pó tay, e k đc học lập trình keil C, nhưng cũng làm đc 1 cái led trái tim nhưng code là viết bằng ASM ( đưa từng mức logic 0 và 1 vào các port của VĐK) --> code siu dài. do zậy e mún tìm hiểu ngôn ngữ C cho gọn mong bác hướng dẫn.
    bác sem trái tim của e đây ạ dùng 3 VĐK vì k bít dùng 74hc595:
    https://www.youtube.com/watch?v=eSrnDpVLcqQ
  • Vũ Văn Thái lúc 04-10-2013, 20:35
    chào sontra9x b đã đọc kỹ lại bv chưa, nếu bạn để while ở cuối cùng thì vdk chỉ chạy có một lần duy nhất, rồi ko thoát khỏi vòng luẩn quẩn while(1); nhưng khi cho code vào while quá trình trên dc lặp đi lặp lại tức vdk luôn cho led sáng chạy lần lượt
  • sontra9x lúc 04-10-2013, 19:34
    E cũng chả biết gì đâu nhưng bác chủ thớt cho e hỏi 1câu tại sao k cho câu lệnh while dưới cùng vì bác có giải thích đó là vòng lặp vô tận.
  • Vũ Văn Thái lúc 28-07-2013, 21:12
    @tranvannui_92 for (t=0;t<time;t++) ở vòng lặp này nó sẽ lấy biến time lưu giá trị số lần lặp vd delay(20) <=> time=20 rồi so sánh với biến t đúng thì lặp, sai thì thoát vòng lặp, t tự tăng do t++, còn tmod là chỉ bộ định thời nào dc sd - timer0 (xem tài liệu về bộ định thời), TH0=0x3c;TL0=0xb0; nạp giá trị để đếm... , while(!TF0) chờ cờ tràn thì set TF0=TR0=0 => stop xong lại bị vòng lặp for lặp tiếp....
    • tranvannui_92 lúc 29-07-2013, 20:58
      cảm ơn bạn mình mới nhập môn lên cũng không biết rõ lắm
    • Vũ Văn Thái lúc 29-07-2013, 06:30
      bạn đọc kĩ lại đi delay(unsigned char time)
    • tranvannui_92 lúc 28-07-2013, 22:05
      nhưng hình như trong trương trình trên không thấy khái báo biến time và cũng không biết giá trị là bao nhiêu
  • tranvannui_92 lúc 28-07-2013, 16:24
    bạn có thể giải thích vòng lặp for của trương trình tạo trễ /"for (t=0;t<time;t++) /" tôi không hiểu câu lệnh này hoạt động thế nào , bạn giải thích cho tôi biết cách bạn tính toán như thế nào để chọn được giá trị trên thanh TMOD ?
  • daibang lúc 07-06-2013, 23:43
    like
  • Trang 1/1: 1

    Bài viết cùng chuyên mục
    Điều khiển tốc độ động cơ Motor DC sử dụng PWM Điều khiển tốc độ động cơ Motor DC sử dụng PWM
    Đăng bởi: kienvuce - Thời gian: 04-11-2021, 22:40
    Chuyên mục: Học lập trình 8051 - Lượt xem: 3.125
    Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone Chia sẻ bộ thư viện Driver chuẩn cho LCD Gphone và Home Phone
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-02-2017, 14:54
    Chuyên mục: Học lập trình 8051 - Lượt xem: 6.629
    Led 7 thanh 4 số điều khiển bằng nút bấm Led 7 thanh 4 số điều khiển bằng nút bấm
    Đăng bởi: HoangQuan69 - Thời gian: 09-10-2016, 15:08
    Chuyên mục: Học lập trình 8051 - Lượt xem: 5.933
    Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307 Chia sẻ Code đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
    Đăng bởi: Vũ Văn Thái - Thời gian: 13-05-2015, 09:00
    Chuyên mục: Học lập trình 8051 - Lượt xem: 28.698
    Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2 Bài 15: Lập trình quét phím matrix 4x4 hiển thị lên LCD 16x2
    Đăng bởi: Vũ Văn Thái - Thời gian: 20-11-2014, 08:57
    Chuyên mục: Học lập trình 8051 - Lượt xem: 31.801
    [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE [Share] Code giao tiếp Graphic LCD 12864 SPI của máy GPHONE ZTE
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 22:06
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.275
    [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh [Share] Code C đo nhiệt độ dùng DS18B20 hiển thị lên LED 7 thanh
    Đăng bởi: Vũ Văn Thái - Thời gian: 12-11-2014, 09:02
    Chuyên mục: Học lập trình 8051 - Lượt xem: 19.598
    Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051 Bài 14: Đo nhiệt độ dùng cảm biến DS18B20 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 19-10-2014, 10:11
    Chuyên mục: Học lập trình 8051 - Lượt xem: 25.431
    Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051 Bài 13: Đo nhiệt độ dùng LM35 kết hợp IC ADC0808 với 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 22-08-2014, 22:18
    Chuyên mục: Học lập trình 8051 - Lượt xem: 46.032
    Bài 12: Tạo xung PWM dùng ngắt timer 8051 Bài 12: Tạo xung PWM dùng ngắt timer 8051
    Đăng bởi: Vũ Văn Thái - Thời gian: 02-03-2014, 20:45
    Chuyên mục: Học lập trình 8051 - Lượt xem: 24.120
    
    Chào mừng hieutrang đã tham gia câu lạc bộ sáng tạo!
    Vũ Văn Thái - vuthai
    Hôm nay là sinh nhật của nguyenvanminh1993, sangsinh, kingkong94, 123anh, TieuDao, Kingkong1994, vodoii, walleneve0123, nguyenvanminhhd1993, thinhprozz200, buiquangquy, hoangthanh2423147, quanghoa, hoangdiep, thaoloan, hoangkiquy, longpro24, vantung01, maitu2404, thelastknight95tb, micalminh, haopll97, 1141050274, ← Gửi tin nhắn chúc mừng
    Múi giờ: UTC+07:00 - Asia/Ho Chi Minh ***** IP của bạn: 3.138.141.202 ***** Status: Cache Update thành công!