Title Image

Blog Logo

Bài 5. Ví dụ mẫu: 8051 Blink LED

🌱 Bài 5. Ví dụ mẫu: 8051 Blink LED

    Ví dụ kinh điển là nháy LED mỗi 1s 😃 Xem hình vẽ với code và mô phỏng. Ta sẽ nối Led với chân P1.0 - kiểu Source.

    Vậy hãy xem cách viết hàm delay_ms() ở đây, đó là 2 vòng lặp for lồng nhau:

            void delay_ms (unsigned int t)
            {
                        unsigned int x, y;    
                        for (x = 0; x < t; x++)                
                        {
                                    for (y = 0; y < 125; y++);     //delay 1ms            
                        }
            }

    Hàm delay tức là không làm gì cả trong 1 khoảng thời gian. Trong ngôn ngữ assembly, ta có lệnh "NOP" là không làm gì trong khoảng thời gian thực hiện lệnh => Điều ta cần quan tâm.

    Vậy chẳng hạn thời gian thực hiện 1 lệnh là 0,01ms thì để delay 1ms, ta cần thực hiện 100 lệnh NOP như vậy 😃

    Vậy tính thời gian thực hiện 1 lệnh như thế nào?

🌱 Chu kỳ máy

Chu kỳ máy là khoảng thời gian cần thiết được quy định để vi điều khiển thực hiện một lệnh cơ bản.

    Một chu kỳ máy bằng 12 lần chu kỳ dao động của nguồn xung dao động cấp cho nó.

    Đối với 89Sxx, có thể sử dụng thạch anh tạo dao động tần số f từ 2MHz đến 33MHz.

    Thời gian thực hiện 1 lệnh, hay chu kỳ máy T = 12* (1/f).

    Với ví dụ trên, f = 12MHz => T = 12* (1/(12*10^6)) = 1us.

    👉 1 lệnh cơ bản thực hiện trong 1us.

    👉 Để delay khoảng thời gian 1s thì cần có 1/1u = 10^6 lệnh NOP

    👉 Nhưng lệnh x++ hay y++ không phải lệnh cơ bản, và với kiểu dữ liệu càng lớn của x, y thì tính toán càng lâu.

    👉 Nếu muốn tính toán delay chính xác -> cần dùng asm.

    👉 Thích hợp với tính toán Timer.

    👉 Với 2 vòng for lồng nhau -> thực nghiệm -> ra con số 125

    Code & Nạp code


>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

Xem Bài 4                             Xem Bài 6

Đăng nhận xét

0 Nhận xét