Thông báo

Collapse
No announcement yet.

PWM 89xxx cần được chỉ giáo!

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

  • PWM 89xxx cần được chỉ giáo!

    Em viết c.trình pwm cho con 8952,sử dụng ngắt timer để băm xung, dùng con trỏ để tạo độ rộng xung, mà em chỉ mới viết đc 1 bit. Muốn viết 8 bit thôi mà ko đc, em dùng cách quét để băm xung mà bi lệch nhiều quá ko đúng vs mong muốn.Nay em viết đoạn code 1 bit này mong anh chị giúp em thêm sao cho đc 8 bit em sẽ hậu tạ.
    Code:
    dorong		equ 30h
    ma		equ 31h
    sobit		equ 32h
    clk		equ 33h
    sosanh_vs1	equ 34h
    sosanh_vs0	equ 35h
    tocdo		equ 36h
    
    org 00h
    jmp main
    org	000bh
    	call ngat0
    reti
    org	001bh			; ngat T1
    	call ngat1
    reti
    org 0050h
    main:
    mov p0,#00h
    mov p1,#00h
    mov p2,#00h
    mov p3,#00h
    	mov tmod,#00100010b
    	setb ie.7	;cho phep toan cuc
    	setb ie.3	; cho phep t1
    	setb ie.1 ; cho phep t0
    	mov ma,#80h
    	mov sosanh_vs1,#0ffh
    	mov sosanh_vs0,#00h
    	mov tocdo,#6
    
    dim:
    	mov r0,#00h
    	mov dptr,#ma1
    	mov r4,#18
    	
    lai2:	
    	mov clk,#00h
    	setb tr1
    	call delaydim
    	clr tr1
    	mov sosanh_vs1,#0ffh
    	mov sosanh_vs0,#00h
    	
    inc r0
    djnz r4,lai2	
    jmp dim
    ;------------------------------
    ngat0:
    	;chỗ này định làm quét mã mà ko đc xóa rồi.
                
                 ;mov a,ma
                 ;rr a
                 ;mov ma,a
    ret
    ;------------------------------
    ngat1:	
    	push acc
    	push 01h
    	mov b,#17	;15 muc sang = 255/17 + 1 muc 0
    	mov a,r0
    	movc a,@a+dptr
    	mul ab
    	mov dorong,a
    	cjne a,#0,tiep
    	mov sosanh_vs1,#00h
    	inc dorong
    	jmp tiep1
    tiep:	cjne a,#255,tiep1
    	mov sosanh_vs0,#0ffh	
    	dec dorong
    	
    tiep1:	mov a,clk
    	jnb acc.0,dim0
    dim1:
    	mov th1,dorong
    	mov a,ma
    	anl a,sosanh_vs1
    	mov p1,a
    	jmp exit_ngat1
    dim0:
    	mov a,#255
    	subb a,dorong
    	mov th1,a
    	mov a,ma
    	anl a,sosanh_vs0
    	mov p1,a
    exit_ngat1:
    	inc clk
    	pop 01h
    	pop acc
    ret
    delaydim:
    	push 05h
    	push 06h
    	push 07h
    	mov r5,tocdo
    d1:	mov r6,#150
    d0:	mov r7,#200
    	djnz r7,$
    	djnz r6,d0
    	djnz r5,d1
    	pop 07h
    	pop 06h
    	pop 05h
    ret
    
    ;-------------------------------
    ma1:
    db	0
    db	0
    db	0
    db	1
    db	2
    db	3
    db	4
    db	5
    db	6
    db	7
    db	8
    db	9
    db	10
    db	11
    db	12
    db	13
    db	14
    db	15
    
    end
    PCCC

  • #2
    đọc code trả hiểu gì cả. ý bạn là sao PWM 8 bít thuộc 1 port à?

    Comment


    • #3
      Cám ơn bạn vì đã quan tâm. Đúng rồi mình muốn pwm 8 bit thuộc 1 port, mà điều chỉnh đc độ rộng theo ý muốn, tại code trên mình chỉ làm vs 1 bit thôi, chổ cái đoạn: mov ma,#80h là mình xuất ra p1.7 đó.Nếu bạn có code nao hay hơn thì cho mình tham khảo.Cảm ơn bạn.
      PCCC

      Comment


      • #4
        Sao PWM có 1 bit vậy ? Mình có 1 đoạn code tạo 3 kênh PWM - 8 bit dùng đều điều khiển LED RGB đây:

        Title: 3 channel PWM - 8 bit
        Author: info@sangthai.com.vn
        ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        PWM_RED BIT P0.6
        PWM_GREEN BIT P0.5
        PWM_BLUE BIT P0.7
        SW_RED BIT P1.0 ;Tang duty cycle RED
        SW_GREEN BIT P1.1 ;Tang duty cycle GREEN
        SW_BLUE BIT P1.2 ;Tang duty cycle BLUE
        DUTY_RED EQU 20H
        DUTY_GREEN EQU 21H
        DUTY_BLUE EQU 22H
        BIEN_PHU EQU 23H
        ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        ORG 000H
        JMP TD
        ORG 00BH
        JMP NGAT_T0
        TD:
        MOV TMOD,#02H ;T0 + MODE 2
        MOV TH0,#-1
        MOV TL0,#-1
        SETB TR0
        MOV IE,#82H ;CHO PHEP T0 NGAT
        MOV DUTY_RED,#0
        MOV DUTY_GREEN,#0
        MOV DUTY_BLUE,#0
        MOV BIEN_PHU,#0
        MAIN:
        JB SW_RED,X1
        JNB SW_RED,$
        INC DUTY_RED
        X1:
        JB SW_GREEN,X2
        JNB SW_GREEN,$
        INC DUTY_GREEN
        X2:
        JB SW_BLUE,MAIN
        JNB SW_BLUE,$
        INC DUTY_BLUE
        JMP MAIN
        ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        NGAT_T0:
        INC BIEN_PHU
        MOV A,BIEN_PHU

        CJNE A,DUTY_RED,CLR_PWM_GREEN
        CLR PWM_RED
        CLR_PWM_GREEN:
        CJNE A,DUTY_GREEN,CLR_PWM_BLUE
        CLR PWM_GREEN
        CLR_PWM_BLUE:
        CJNE A,DUTY_BLUE,SET_PWM
        CLR PWM_BLUE
        SET_PWM:
        CJNE A,#255,EXIT
        MOV P0,#0FFH
        EXIT:
        RETI
        END

        Phần cứng đơn giản gồm 3 button kết nối với P1.0, P1.1, P1.2 để điều chỉnh độ rộng xung cho lần lượt các kênh PWM xuất ra chân P0.5, P0.6, P0.7. Với đoạn code này bạn có thể tạo thêm nhiều kênh PWM. Tần số PWM được quyết định bởi thời gian tràn của timer0. Độ rộng xung của 3 kênh lưu trong 3 biến DUTY_RED, DUTY_GREEN, DUTY_BLUE.

        Comment


        • #5
          Cám ơn bạn, theo như code của bạn thì mình làm đc 8 bit rồi.thank.

          Code:
          ;so bit lay do rong tu 30h den 37h
          
          tocdo		equ 40h
          biendem_pwm	equ 41h
          port		equ p1
          
          org 00h
          jmp main
          
          org	001bh			; ngat T1
          	call ngat1
          reti
          org 0050h
          main:
          mov p0,#00h
          mov p1,#00h
          mov p2,#00h
          mov p3,#00h
          	mov tmod,#00100010b
          	setb ie.7	;cho phep toan cuc
          	setb ie.3	; cho phep ngat t1
          	setb ie.1
          	mov th1,#-1
          	mov tl1,#-1
          	mov biendem_pwm,#225
          	mov tocdo,#3
          
          chuongtrinh:
          	mov dptr,#ma1
          	mov r0,#00h
          	mov r4,#16		; 16 hang
          	
          hd1:	call lay_dorong
          	setb tr1
          	call delaydim
          	clr tr1
          inc r0
          djnz r4,hd1
          
          jmp chuongtrinh
          
          ;---------------------------
          lay_dorong:
          	mov r1,#30h
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          	inc dptr
          	inc r1
          	call dorong
          ret
          ;-----------------------------
          dorong:
          	mov b,#15
          	mov a,r0
          	movc a,@a+dptr
          	mul ab
          	mov @r1,a
          ret
          ;------------------------------
          ngat1:	
          push acc
          	dec biendem_pwm
          	mov a,biendem_pwm
          	
          	cjne a,30h,tiep0
          	mov r3,30h
          	cjne r3,#0,set_0
          	jmp tiep0
          set_0:	setb port.0
          
          tiep0:	cjne a,31h,tiep1
          	mov r3,31h
          	cjne r3,#0,set_1
          	jmp tiep1
          set_1:	setb port.1
          
          tiep1:	cjne a,32h,tiep2
          	mov r3,32h
          	cjne r3,#0,set_2
          	jmp tiep2
          set_2:	setb port.2
          
          tiep2:	cjne a,33h,tiep3
          	mov r3,33h
          	cjne r3,#0,set_3
          	jmp tiep3
          set_3:	setb port.3
          
          tiep3:	cjne a,34h,tiep4
          	mov r3,34h
          	cjne r3,#0,set_4
          	jmp tiep4
          set_4:	setb port.4
          
          tiep4:	cjne a,35h,tiep5
          	mov r3,35h
          	cjne r3,#0,set_5
          	jmp tiep5
          set_5:	setb port.5
          
          tiep5:	cjne a,36h,tiep6
          	mov r3,36h
          	cjne r3,#0,set_6
          	jmp tiep6
          set_6:	setb port.6
          
          tiep6:	cjne a,37h,tiep7
          	mov r3,37h
          	cjne r3,#0,set_7
          	jmp tiep7
          set_7:	setb port.7
          
          tiep7:	cjne a,#0,exit_ngat1
          	mov biendem_pwm,#226
          	mov p1,#00
          exit_ngat1:
          	pop acc
          ret
          
          ;-----------------------------
          delaydim:
          	push 05h
          	push 06h
          	push 07h
          	mov r5,tocdo
          d1:	mov r6,#10
          d0:	mov r7,#100
          	djnz r7,$
          	djnz r6,d0
          	djnz r5,d1
          	pop 07h
          	pop 06h
          	pop 05h
          ret
          ;-------------------------------
          ma1:
          db	00,00,00,00,00,00,00,15
          db	00,00,00,00,00,00,15,13
          db	00,00,00,00,00,15,13,11
          db	00,00,00,00,15,13,11,09
          db	00,00,00,15,13,11,09,07
          db	00,00,15,13,11,09,07,05
          db	00,15,13,11,09,07,05,03
          db	15,13,11,09,07,05,03,01
          db	15,11,09,07,05,03,01,00
          db	15,09,07,05,03,01,00,00
          db	15,07,05,03,01,00,00,00
          db	15,05,03,01,00,00,00,00
          db	15,03,01,00,00,00,00,00
          db	15,01,00,00,00,00,00,00
          db	15,00,00,00,00,00,00,00
          db	00,00,00,00,00,00,00,00		;16 hang
          
          end
          Last edited by lep140389; 20-07-2011, 18:07.
          PCCC

          Comment


          • #6
            ??? Cậu viết chương trình dài quá. Bạn khai bao 2 bien, so sánh hai biến với nhau rồi dùng con trỏ trỏ vào trị số PWM cần dùng trong db. Bạn O.D nói đúng, tần số phụ thuộc vào thời gian tràn của Timer dùng cho PWM.

            Comment


            • #7
              Cám ơn bạn đã góp ý mình cũng đang tính dùng 2 thanh ghi để so sánh lúc đó mình có thể thay đổi được bao nhiêu bit để pwm. Mình tìm trên mạng thấy có IC 89V51 có chức năng pwm 8 bit, nhưng chưa hiểu lắm về thanh ghi CCON . Đang tìm hiểu con này.
              PCCC

              Comment


              • #8
                Có phải cái này không các bạn, nhìn cũng đẹp đó nhẩy.
                http://www.youtube.com/watch?v=kcfND5vNjRA

                Email:
                Tel: 0983.497.310

                Comment


                • #9
                  ai co cde c ko vay

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X