Thông báo

Collapse
No announcement yet.

Chương trình tạo PWM bằng 8051

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    thanks mình đag cần cái này :d thanks pác rất nhiều
    8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
    liên lạc với em qua địa chi email: Mob: 01882.076.989

    Comment


    • #32
      cái này mình viết giống như sao băng thôi ko có j khó.
      ở đây mình dùng 89 2051 , 15bit out. ko có p3.6. tham khảo.
      Code:
      ;Dung cho 89x2xx
      ;		***********************
      ;--------------------Hoang_KH----------------------
      ;		   dt: 0978 086 596
      ;		***********************
      
      tocdo		equ 50h
      biendem_pwm	equ 52h
      so_bit		equ 53h
      so_hang		equ 54h
      vonglap1	equ 55h
      vonglap2	equ 56h
      
      org 00h
      jmp main
      org	001bh			; ngat T1
      	call ngat1
      reti
      org 0057h
      main:
      	mov tmod,#00100000b
      	setb ie.7	;cho phep toan cuc
      	setb ie.3	; cho phep ngat t1
      	setb ie.1
      	mov th1,#-2
      	mov tl1,#-2
      	mov biendem_pwm,#51	
      	mov p0,#00h
      	mov p1,#00h
      	mov p2,#00h
      	mov p3,#00h
      
      hoang:
      	mov so_bit,#15	;so bit dieu khien
      	call chuongtrinh
      jmp hoang
      ;-----------------------------
      ngat1:	
      push acc
      push 03h
      	dec biendem_pwm
      	mov a,biendem_pwm
      	call out_port
      	cjne a,#1,exit_ngat1
      	mov biendem_pwm,#51
      	mov p1,#00
      	mov p3,#00
      	mov p2,#00
      	mov p0,#00
      exit_ngat1:
      	pop 03h
      	pop acc		
      ret
      ;------------------------------
      out_port:	
      	cjne a,30h,tiep0
      	setb p1.7
      tiep0:	cjne a,31h,tiep1
      	setb p1.6
      tiep1:	cjne a,32h,tiep2
      	setb p1.5
      tiep2:	cjne a,33h,tiep3
      	setb p1.4
      tiep3:	cjne a,34h,tiep4
      	setb p1.3
      tiep4:	cjne a,35h,tiep5
      	setb p1.2
      tiep5:	cjne a,36h,tiep6
      	setb p1.1
      tiep6:	cjne a,37h,tiep7
      	setb p1.0	
      tiep7:	cjne a,38h,tiep8
      	setb p3.7
      tiep8:	cjne a,39h,tiep9
      	setb p3.5
      tiep9:	cjne a,3ah,tiep10
      	setb p3.4
      tiep10:	cjne a,3bh,tiep11
      	setb p3.3
      tiep11:	cjne a,3ch,tiep12
      	setb p3.2
      tiep12:	cjne a,3dh,tiep13
      	setb p3.1
      tiep13:	cjne a,3eh,tiep14
      	setb p3.0
      tiep14:	
      ret
      ;----------------------------------
      ma_led:
      push 01h
      push 03h
      	mov r1,#30h
      	mov r3,so_bit
      lay_dr:	call dorong_xung
      	djnz r3,tiep_lay_dorong	
      	jmp exit_lay_dorong
      tiep_lay_dorong	:	
      	inc dptr
      	inc r1
      jmp lay_dr	
      exit_lay_dorong:
      pop 03h
      pop 01h
      ret
      ;-----------------------------------
      dorong_xung:
      push acc
      push 01h
      push 03h
      	mov a,r0
      	movc a,@a+dptr
      	mov r3,a
      	push dph
      	push dpl
      	mov dptr,#ma_dorong
      	movc a,@a+dptr
      	add a,r3
      	mov @r1,a
      	pop dpl
      	pop dph
      pop 03h
      pop 01h
      pop acc
      ret
      ;-------------------------------------
      delay:
      	push acc
      	push 06h
      	push 07h
      	push dph
      	push dpl
      	mov dptr,#ma_thoigian
      	mov a,tocdo
      	movc a,@a+dptr
      	mov r6,a
      d0:	mov r7,#50
      	djnz r7,$
      	djnz r6,d0
      	pop dpl
      	pop dph
      	pop 07h
      	pop 06h
      	pop acc
      ret
      ;--------------------------------------
      ma_thoigian:
      db	46,43,40,37,34,31,28,25,22,19,16,13,10,7,04,01
      ma_dorong:
      db	00,00,01,02,03,04,05,06,08,10,13,16,20,24,29,35
      ;------------------------------
      play:	
      	mov r0,#00h
      	mov r4,so_hang		
      hd:	call ma_led
      	setb tr1
      	call delay
      	clr tr1
      inc r0
      djnz r4,hd
      clr a
      ret
      
      
      ;$$$$$$$$$$$$$$$$$$= chuong trinh chinh =$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      
      chuongtrinh:
      	mov tocdo,#13	;(low 0, fast 15)
      
      	mov dptr,#ma1
      	mov so_hang,#31
      	call play
      		
      	mov tocdo,#15
      	mov dptr,#ma2
      	mov so_hang,#15
      	call play		
      ret
      ;-------------------------------------------
      ma1:
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
      db	15,00,00,00,00,00,00,00,00,00,00,00,00,00,00
      db	14,15,00,00,00,00,00,00,00,00,00,00,00,00,00
      db	13,14,15,00,00,00,00,00,00,00,00,00,00,00,00
      db	12,13,14,15,00,00,00,00,00,00,00,00,00,00,00
      db	11,12,13,14,15,00,00,00,00,00,00,00,00,00,00
      db	10,11,12,13,14,15,00,00,00,00,00,00,00,00,00
      db	09,10,11,12,13,14,15,00,00,00,00,00,00,00,00
      db	08,09,10,11,12,13,14,15,00,00,00,00,00,00,00
      db	07,08,09,10,11,12,13,14,15,00,00,00,00,00,00
      db	06,07,08,09,10,11,12,13,14,15,00,00,00,00,00
      db	05,06,07,08,09,10,11,12,13,14,15,00,00,00,00
      db	04,05,06,07,08,09,10,11,12,13,14,15,00,00,00
      db	03,04,05,06,07,08,09,10,11,12,13,14,15,00,00
      db	02,03,04,05,06,07,08,09,10,11,12,13,14,15,00
      db	01,02,03,04,05,06,07,08,09,10,11,12,13,14,15
      db	00,01,02,03,04,05,06,07,08,09,10,11,12,13,14
      db	00,00,01,02,03,04,05,06,07,08,09,10,11,12,13
      db	00,00,00,01,02,03,04,05,06,07,08,09,10,11,12
      db	00,00,00,00,01,02,03,04,05,06,07,08,09,10,11
      db	00,00,00,00,00,01,02,03,04,05,06,07,08,09,10
      db	00,00,00,00,00,00,01,02,03,04,05,06,07,08,09
      db	00,00,00,00,00,00,00,01,02,03,04,05,06,07,08
      db	00,00,00,00,00,00,00,00,01,02,03,04,05,06,07
      db	00,00,00,00,00,00,00,00,00,01,02,03,04,05,06
      db	00,00,00,00,00,00,00,00,00,00,01,02,03,04,05
      db	00,00,00,00,00,00,00,00,00,00,00,01,02,03,04
      db	00,00,00,00,00,00,00,00,00,00,00,00,01,02,03
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,01,02
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,00,01
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
      ma2:
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,00,15
      db	00,00,00,00,00,00,00,00,00,00,00,00,00,15,00
      db	00,00,00,00,00,00,00,00,00,00,00,00,15,00,00
      db	00,00,00,00,00,00,00,00,00,00,00,15,00,00,00
      db	00,00,00,00,00,00,00,00,00,00,15,00,00,00,00
      db	00,00,00,00,00,00,00,00,00,15,00,00,00,00,00
      db	00,00,00,00,00,00,00,00,15,00,00,00,00,00,00
      db	00,00,00,00,00,00,00,15,00,00,00,00,00,00,00
      db	00,00,00,00,00,00,15,00,00,00,00,00,00,00,00
      db	00,00,00,00,00,15,00,00,00,00,00,00,00,00,00
      db	00,00,00,00,15,00,00,00,00,00,00,00,00,00,00
      db	00,00,00,15,00,00,00,00,00,00,00,00,00,00,00
      db	00,00,15,00,00,00,00,00,00,00,00,00,00,00,00
      db	00,15,00,00,00,00,00,00,00,00,00,00,00,00,00
      db	15,00,00,00,00,00,00,00,00,00,00,00,00,00,00
      end
      PCCC

      Comment


      • #33
        ban lep140389 ơi cho mình hỏi. vậy mún làm đủ 32 cổng thì phải khai báo làm sao? mình đang dùng con AT89C52. mong đươc sự giúp đỡ của bạn cũng như của tất cả mọi người trên DĐ.

        Comment


        • #34
          Bạn đã viết thành công chưa...???? cho mình xin với

          Comment


          • #35
            Bạn muốn cả 32 chân out của VDK đều là PWM để điều khiển cái gì thế? nếu bài toán phức tạp thì nên dùng C cho dễ {thực hiện, bảo trì}, nâng cấp. Nếu cả 32 chân out đều dùng để điều chế PWM thì bạn dùng chân nào để bạn lắp cảm biến để thay đổi tần số băm xung? hay nó không thay đổi theo thời gian đối với mỗi chân (PWM cứng)?

            Comment


            • #36
              Em muốn làm bộ điều khiển nhiệt độ dựa vào xung pwm để thay đổi góc mở triac. Anh nào cho em cái ý tưởng với.
              Em sẽ so sánh nhiệt độ nhập từ bàn phím và nhiệt độ đọc được từ cảm biến, nếu nhiệt độ nhỏ hơn nhiệt độ nhập vào thì tăng độ rộng xung ra và ngược lại còn nếu bằng rồi thì thoát.
              Có anh nào biết chỉ giùm em với?

              Comment


              • #37
                Em đang làm đồ án Điều khiển Đc 1 chiều 4 nút bấm ứng với 4 chế độ "thuận, nghịch, tăng, giảm" và hiển thị tên chế độ lên LCD. Em đã làm đc thuận và nghịch hiển thị LCD rồi. Nhưng không biết cách làm tăng giảm tốc độ. Các bác có thể cho em xin code asm được không ạ? Làm bằng phương pháp PWM ạ.

                Comment

                Về tác giả

                Collapse

                lexluthorvn Tìm hiểu thêm về lexluthorvn

                Bài viết mới nhất

                Collapse

                • D_Son
                  Trả lời cho Hỏi về thông số setpoint trong PID
                  bởi D_Son
                  Em đang tìm hiểu về PID nên công thức chắp vá trên mạng, thật sự là cũng không hiểu rõ lắm, anh giúp em chỉnh lại dc ko ạ? với lại em đọc tài liệu có nói đo tốc độ động cơ bằng encoder rồi băm xung theo công thức, mà họ không nói...
                  hôm nay, 20:38
                • D_Son
                  Trả lời cho Hỏi về cảm biến dò line CNY70
                  bởi D_Son
                  Em hỏi thêm chút: em đang làm con robot dò line, bác có đề cử loại cảm biến nhận line nào tốt ko ạ? vì em ko tiếp xúc nhiều với cảm biến lắm.
                  Em cảm ơn ạ...
                  hôm nay, 20:19
                • T.L.M
                  Trả lời cho Hỏi về thông số setpoint trong PID
                  bởi T.L.M
                  pre là giá trị của cảm biến của lần đọc trước, pre_pre là giá trị cũ trước đó nữa.

                  T là khoảng thời gian giữa 2 lần đọc cảm biến.

                  Các công thức có gì đó không ổn. Thí dụ: xe lệch về mức 5 trong 1 khoảng thời gian dài thì P_part luôn = 0???...
                  hôm nay, 19:07
                • T.L.M
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi T.L.M
                  Nhìn hình là đủ thấy nó ghim áp rồi, nếu thích thì bác có thể mô phỏng để kiểm chứng....
                  hôm nay, 17:53
                • queduong
                  Trả lời cho Chỉ giáo mạch thu RF
                  bởi queduong
                  Cái này là mạch đếm tần số. Tần số đưa vào giắc SMA... sau đó qua bộ chia MB501L rồi được MCU hiển thị ra LCD. Theo datasheet thì MB501L có thể làm việc tới 1,1GHz.
                  hôm nay, 17:01
                • T.L.M
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi T.L.M
                  Trong 1 bán kỳ dòng nhỏ hơn Ipeak thì Zener chưa chết được.

                  2 Zener nối tiếp ngược chiều, mắc vào 2 chân AC của cầu diot nên sẽ ghim ở áp Vz+0,6V...
                  hôm nay, 16:49
                • ne_yo_0202
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi ne_yo_0202
                  Vậy ZD1 và ZD2 có nhiệm vụ gì vậy bác? tại sao lại ko dùng diode thường nếu như ko phải ghim điện áp?...
                  hôm nay, 15:59
                • vi van pham
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi vi van pham
                  Tại bán kỳ dương Zener quá dòng chết Zener.
                  Tại bán kỳ âm Zener quá dòng chết Zener.
                  Không có chuyện Zener chịu được gấp đôi dòng




                  Biết thì nói , đừng nói nhảm. Lấy Proteus phân tích mạch thử xem có ghim áp không?...
                  hôm nay, 13:42
                • ne_yo_0202
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi ne_yo_0202
                  Vậy ZD1 và ZD2 có nhiệm vụ gì vậy bác? tại sao lại ko dùng diode thường nếu như ko phải ghim điện áp?...
                  hôm nay, 11:56
                • davidcopy
                  Trả lời cho Mạch hạ áp bằng tụ
                  bởi davidcopy
                  Mạch này điện áp trên tải còn phụ thuộc trở kháng của tải, khi cấp điện nhớ gắn tải, nếu không tụ C2 sẽ nổ....
                  hôm nay, 10:00
                Đang tải...
                X