Friday, April 18, 2014

// // 2 comments

010.Một số bài tập sử dụng ngắt ngoài INT0, INT1

Ví dụ 5:

            Giả sử chân INT1 được nối đến công tắc bình thường ở mức cao. Mỗi khi nó  ấn xuống thấp phải bật một đèn LED ở chân P1.3 (bình thường Led tắt), khi nó được bật lên nó phải sáng vài giây. Chừng nào công tắc được giữ ở trạng thái thấp đèn LED phải sáng liên tục.

Chúng ta có thể mắc mạch mô phỏng đơn giản như hình:
Read More
// // 2 comments

009. Một số bài tập sử dụng ngắt Timer0, Timer1

Ví dụ về nạp giá trị cho Timer:


Những loại thạch anh phổ biến nhất được liệt kê trong bảng sau:
Tần số thạch anh
Tần số Timer
Chu kỳ Timer
20MHz
20MHz/12=1,6666MHz
1/1,6666MHz=0,6us
12MHz
12MHz/12=1MHz
1/1MHz=1us
11,0592MHz
11,0592MHz/12=0,9216MHz
1/0,9216MHz=1,085us

Các bước thực thực hiện tìm giá trị cần nạp:

Read More

Thursday, April 17, 2014

// // 1 comment

008. Giới thiệu về hệ thống ngắt (Interrupts System) và Power Saving Mode trong 8051

     Hôm nay, chúng ta sẽ cùng nhau tìm hiểu 2 vấn đề khá đau đầu của vi điều khiển 8051:

  • Đầu tiên là hệ thống ngắt- Interrupts System
  • Chế độ tiết kiệm năng lượng cho vi điều khiển hay Chế độ Sleep (chế độ nghỉ)- Power Saving Mode
Read More
// // 1 comment

007. 7-SEG-LED 2: Một số ví dụ về LED 7 thanh (Phần 2) mô phỏng hiển thị đồng hồ số

Hôm nay chúng ta sẽ tiếp tục làm bài ví dụ về LED 7 thanh nhé...

Ví dụ 3: Làm một đồng hồ đếm giây đơn giản

Trong ví dụ này chúng ta sẽ mô phỏng hiển thị của một đồng hồ sử dụng 3 LED-7SEG đôi. Từ ví dụ này ở bài viết sau chúng ta sẽ thử làm 1 Project đồng hồ bấm giây đơn giản (simple stopwatch) sử dụng phương pháp ngắt định thời (Timer) để hiển thị chính xác.

Đầu tiên, chúng ta sẽ mắc mạch:

Sử dụng các thiết bị sau:

+AT89C52
+7SEG-MPX2-CA
+BUTTON
+NOT
+CRYSTAL
+RESISTOR (250~300 ohm)
+CRYSTAL
+CAPACITOR

và đi dây như hình:


Chú ý:  phải mắc cổng NOT vào chân điều khiển LED7 các bạn nhé.


CODE:


//daiphongselectronics@gmail.com
#include<regx52.h>
//ket noi LED7
#define LED_PORT P0
//ket noi chan dieu khien
sbit LED11_PIN=P2^0;
sbit LED12_PIN=P2^1;
sbit LED21_PIN=P2^2;
sbit LED22_PIN=P2^3;
sbit LED31_PIN=P2^4;
sbit LED32_PIN=P2^5;
//code hien         thi tu 0-9 cho LED7
unsigned char code Code7Seg[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//delay_ms ham tao tre
void Delay_ms(unsigned int t)
{
                //xoa dau // khi viet vao keil. Do loi Blog, minh k go lenh binh thuong duoc
unsigned int x,y;
                for(x//=0;x//<t;x//++)
                {
                                //su dung XTAL=12MHz
                                for(y//=0;y//<123;y//++);
                }
}

//main prop
void main()
{
                                unsigned char gio,phut,giay,chuc,dvi,i;
                                while(1)
                                {
                                                //giai thich o duoi
                                                for (i=0;i<167;i++)
                                                {
                                                                //hienthigio
                                                                chuc=gio/10;
                                                                dvi=gio%10;
                                                               
                                                                LED_PORT=Code7Seg[chuc];
                                                                LED11_PIN=0;
                                                                Delay_ms(1);
                                                                LED11_PIN=1;
                               
                                                                LED_PORT=Code7Seg[dvi];
                                                                LED12_PIN=0;
                                                                Delay_ms(1);
                                                                LED12_PIN=1;
                               
                                                                //hienthiphut
                                                                chuc=phut/10;
                                                                dvi=phut%10;
                                                               
                                                                LED_PORT=Code7Seg[chuc];
                                                                LED21_PIN=0;
                                                                Delay_ms(1);
                                                                LED21_PIN=1;
                               
                                                                LED_PORT=Code7Seg[dvi];
                                                                LED22_PIN=0;
                                                                Delay_ms(1);
                                                                LED22_PIN=1;
                               
                                                                //hienthigiay
                                                                chuc=giay/10;
                                                                dvi=giay%10;
                                                               
                                                                LED_PORT=Code7Seg[chuc];
                                                                LED31_PIN=0;
                                                                Delay_ms(1);
                                                                LED31_PIN=1;
                               
                                                                LED_PORT=Code7Seg[dvi];
                                                                LED32_PIN=0;
                                                                Delay_ms(1);
                                                                LED32_PIN=1;
                                                }
                                                giay++;
                                                if (giay>59)
                                                {
                                                                giay=0;phut++;
                                                                if (phut>59)
                                                                {
                                                                                phut=0;gio++;
                                                                                if(gio>23)
                                                                                {
                                                                                                gio=0;
                                                                                }
                                                                }
                                                }
                                                }
                 
}                 

      Chúng ta cần để ý vòng lặp for() trong chương trình chính:
      Vòng lặp này sẽ lặp đúng 167 lần: do chương trình hiển thị của chúng ta cần tổng thời gian thực hiện khoảng 1+1+1+1+1+1=6 ms do vậy để LED7 hiển thị giây tăng mỗi 1 giây (1000ms) 1 lần, ta cần lặp 1000/6=166,666667 lần. Trong trường hợp này, mình chọn ~167.
      Xuất ra file HEX rồi nạp vào vi điều khiển và thưởng thức nhé~~

      Như vậy ở phương pháp này, chúng ta sẽ không áp dụng cho những trường hợp yêu cầu độ chính xác cao. Mà chúng ta sẽ phải sử dụng phương pháp khác để có thể đưa ra 1s chính xác hơn. Mình sẽ giới thiệu kĩ hơn ở những bài viết sau..

thân 
Phong'S
Read More
// // Leave a Comment

006. 7-SEG-LED 2: Một số ví dụ về LED 7 thanh (Phần 1)

    Hôm nay, chúng ta sẽ cùng nhau làm một số ví dụ về LED 7 thanh để làm rõ hơn những lý thuyết đã tìm hiểu ở bài viết trước.




     Chúng ta sẽ làm 3 ví dụ nhỏ về LED 7 thanh:

Ví dụ 1: Hiển thị số 0-9 sử dụng LED 7 và điều khiển bằng một nút bấm.
Ví dụ 2: Hiển thị số tự động tăng mỗi một s từ 00-99 sử dụng LED 7 thanh đôi.
Ví dụ 3: Làm một đồng hồ đếm giờ đơn giản.
       
Read More
// // Leave a Comment

005. 7-SEG-LED 1: Làm quen với LED 7 thanh

   Qua các bài viết trước, chúng ta đã cùng nhau tìm hiểu về Vi điều khiển AT89C52, LED và một số ví dụ cơ bản về điều khiển LED đơn cũng như nhiều LED một lúc. Bài viết hôm nay sẽ đề cập đến 1 thành phần khác có ứng dụng khá nhiều trong một mạch điều khiển: để hiện thị nhiệt độ, độ ẩm, điện áp... trong một số mạch đo hay để hiển thị thông tin được lập trình sẵn như thời gian đếm trên đèn giao thông...



  Hôm nay chúng ta sẽ tìm hiểu về sơ đồ chân,  cách hiển
Read More
// // 2 comments

004. LED 2: Một số ví dụ về điều khiển bật tắt 8 LED (PHẦN 2)

  Ở bài viết trước, chúng ta đã làm quen với điều khiển LED PORT qua 3 ví dụ về các hiệu ứng 8 LED bật tắt. Hôm nay chúng ta sẽ làm tiếp ví dụ cuối cùng về LED, ví dụ này sẽ kết hợp những hiệu ứng chúng ta đã viết thêm vào một nút bấm để chúng ta làm quen với điều khiển cơ bản trong vi điều khiển nhé.

 VD4: Kết hợp các hiệu ứng để làm 1 dây đèn nháy có nút bấm điều khiển (chưa dùng lệnh ngắt)

  Thực hiện:

  +Mắc mạch:

Read More
// // Leave a Comment

003. LED 2: Một số ví dụ về điều khiển bật tắt 8 LED (PHẦN 1)

Trong bài này chúng ta sẽ cùng nhau làm 1 số ví dụ về bật tắt 8 led, một số hiệu ứng cơ bản để làm đèn nháy chẳng hạn:


  •  VD1: Bật tắt 8 LED 
  •  VD2: Bật (tắt) xen kẽ 8 LED
  •  VD3: Bật (tắt) dần 8 LED  
  •  VD4: Kết hợp các hiệu ứng để làm 1 dây đèn nháy có nút bấm điều khiển (chưa dùng lệnh ngắt)
Read More
// // Leave a Comment

002. LED 1: LED nhấp nháy

Yêu cầu: Dùng vđk 8051 nhấp nháy 1 led (sáng 500ms tắt 500ms)
Thực hành: gồm 2 phần:  mắc mạch và viết code nhé

     +Mắc mạch mô phỏng:

  -Chúng ta mở Proteus lên chọn Isis:



  -Kích P, và pick các Devices sau:
Read More
// // Leave a Comment

001. Làm quen với Vi điều khiển 8051

 Vi điều khiển họ intel 8051 (AT89C52) là dòng cũ có nhiều hạn chế nhưng nó khá dễ học, các bạn có thể dễ dàng tìm được tài liệu của vi điều khiển này. Vì nó được coi là cơ bản nên mình nghĩ cứ tìm hiểu con này trước rồi tìm hiểu Pic với Arm v..v.. sau; cũng giống như việc học java, C++ thì nên học C hay Pascal trước vậy//


Vi điều khiển AT89C52 thuộc họ Intel 8051 do Atmel Corporation sản xuất
AT89C528K Flash256 RAM
Read More