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ê
    Đang tải..
Bài viết
Bài 12: Tạo xung PWM dùng ngắt timer 8051 - SangTaoClub.Net
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: 25.272

Tạo xung PWM dùng ngắt timer 8051

Chào các bạn, hnay ta sẽ tìm hiểu cách điều chế độ rộng xung PWM đơn giản dùng ngắt timer, do 8051 không hỗ trợ băm xung PWM lên chúng ta phải tự code, ở VD dưới đây là cho led chớp tắt theo độ rộng xung thay đổi nhưng tần số không thay đổi.

#include
sbit out=P3^0;//Khai bao chan OUT
sbit nut=P1^0;//Khai bao chan nut nhan
unsigned char dem=0,ptram_xung,a;
void int_timer() interrupt 1 {
      //Ctr ngat timer0
      //TR0=0;
      TF0=0;
      dem++;
      if(dem
            out=1;//out muc 1 theo % xung
      }else{
            out=0;
      }
      if(dem==100) dem=0;      
}
void main(){
      TMOD=0x02;//Chon timer0, che do 8bit tu nap lai
      TH0=TL0=0x9b;//Nap gia tri de chon tan so ra
      ET0=1;//Ngat timer0
      TR0=1;//Khoi dong timer0
      EA=1;//Cho phep ngat
      while(1){
            if(!nut){//Nut nhan de set do rong xung
                  a++;//tang gia tri
                  if(a>5)a=0;//set ve mac dinh
                  while(!nut);//Cho nha nut
            }
            if(a==0) ptram_xung=10;//xung ra 10% muc cao
            else if(a==1) ptram_xung=25;//xung ra 25% muc cao
            else if(a==2) ptram_xung=45;//xung ra 45% muc cao
            else if(a==3) ptram_xung=60;//xung ra 60% muc cao
            else if(a==4) ptram_xung=75;//xung ra 75% muc cao
            else if(a==5) ptram_xung=90;//xung ra 90% muc cao
      }

}

Qua đoạn code trên các bạn đã hiểu thế nào là phương pháp điều chế xung pwm rồi, ở vd mô phỏng mình để ở tần số thấp để cho các bạn dễ quan sát sự thay đổi của mức cao (độ rộng xung) các bạn thay đổi giá trị nạp vào thanh ghi TH0 để chọn tần số ra.

 


Tải về đính kèm:
pwm_8051.zip
Kích thước: 8.86 KB


  • 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ý!
  • kiemdinh1994 lúc 15-09-2014, 11:04
    Mọi người cho hỏi về vấn đề này nhé.mình muốn làm mạch điều khiển bằng remote chỉ cần 4 nút nhấn thôi.mình dùng led thu 3 chân 1838 và ic 9149.vấn đền là con 1838 hoạt động ntn và làm sao để con 9149 nhận biết khi nào nhận tín hiệu 1 khi nào nhận tín hiệu 2 vân vân.mạch phát tần số dùng ic 555 thì giả sử với tần số 34khz chẳng hạn thì 9149 sẽ xuất tìn hiệu ngắt và tương tự với mở và nhìu nhìu tín hiệu khác.mọi người ra tay tương trọ nhé
  • Vũ Văn Thái lúc 01-04-2014, 19:01
    chu kỳ xung=255-giá trị nạp vào TH0 nhân 100 => f=1/T, VD TH0=TL0=155; ta có (255-155)x100=10000us=10ms , nhân 100 là tỷ lệ 100% phải mất 100 lần ngắt mới dc một chu kỳ xung pwm
    • anhthai1123456 lúc 02-04-2014, 07:45
      cảm ơn bạn. cho mình hỏi thêm là ở ví dụ này thì led chớp tắt khi mình làm mạch thực thì thấy no sáng luôn hay vẫn chớp tắt như trong ví dụ ạ. mình hơi gà về điện tử mong bạn giúp đỡ.
  • anhthai1123456 lúc 01-04-2014, 15:14
    ad và mọi người cho mình hỏi, ở timer0, chế độ 8 bit thì mình có thể tạo tần số ra tối đa là bao nhiêu ạ. mình xin cảm ơn!
  • 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.786
    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: 7.016
    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: 6.626
    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: 29.978
    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: 34.054
    [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: 20.179
    [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: 20.508
    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: 26.480
    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: 47.425
    Bài 11: Lập trình quét LED 7 đoạn và nút nhấn Bài 11: Lập trình quét LED 7 đoạn và nút nhấn
    Đăng bởi: Vũ Văn Thái - Thời gian: 19-12-2013, 11:02
    Chuyên mục: Học lập trình 8051 - Lượt xem: 54.668
    Chào mừng kkkk06 đã 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 nkocvipvodoi, vietduy, nguyenkhachuy, dohoainhu94, phamtieuvi, hoavci36, nguyenkhachuy53ddt, teotetua, HaVan_93, huybean2609, vuthanh1971, thientubatpham, aq_codientu, Kiatythep, hocuongz95, haisonitu, boysontay, haisonwmn, thongvn_95, vietbmw1986, ← 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.15.10.104 ***** Status: Cache Update thành công!