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

                  • nhathung1101
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi nhathung1101
                    Vừa thử lại, con loa kẹo kéo Tầu giá 1tr2 và loa Pionner.

                    Thử đọc chứ chưa hát:

                    - Ủa ái ni thì loa tàu ra đúng.

                    - Ủa ái ni trên con Pionner thành Ùa ái ni. Mà từ "ái" lại rõ to.

                    Thử "chèm...
                    hôm nay, 00:23
                  • nhathung1101
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi nhathung1101
                    Nhưng anh em nào còn đam mê sửa nguồn thì cứ cố gắng.
                    Tiền số đang có giá, mà nguồn cho bọn "trâu cày" toàn vài Kw.
                    Làm được vẫn sống tốt. Tôi thì nghỉ hưu rồi.

                    Hôm trước có ku em năn nỉ tôi sửa cho nó cái nguồn 12V/170Amp. Tôi bảo đi mua cái mới.
                    hôm nay, 00:02
                  • nhathung1101
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi nhathung1101
                    Ngày xưa, còn làm với bên viễn thông (giờ chẳng thèm làm vì công bèo).
                    Tôi sửa nguồn, tối thiểu phải đủ công cụ:
                    - Osciloscope.
                    - Logic Analyzer (để làm với chuẩn truyền thông)
                    - Đồng hồ đo dòng. Đồng hồ đo áp. Đồng...
                    Hôm qua, 23:43
                  • nhathung1101
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi nhathung1101
                    Thì không cấp nguồn là an toàn nhất rồi còn gì? Lo gì cháy nổ.
                    Còn đo đạc thì kiểm tra huyết áp hay nhịp tim ở cô hàng xóm vậy.

                    Còn Mèo thì toàn xúi thâm, thằng nào nghe cứ lãnh đủ. Chuyên lừa chuột non....
                    Hôm qua, 23:32
                  • nhathung1101
                    Trả lời cho Trình điều khiển bước rời rạc
                    bởi nhathung1101
                    "Chú ấy" ở bên Quảng Đông đấy. Đang bị "rã rời" rồi, nên đừng hướng vào con đường tội lỗi nữa....
                    Hôm qua, 23:26
                  • nhathung1101
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi nhathung1101
                    Loa Tầu nó đáp ứng được tiếng VN, vì mấy câu hát kiểu "oăng oẳng như sủa" Nhật nó không có. Nó chỉ hát kiểu "đục đục chạc chạc" thôi.
                    Nếu thấy loa Tầu hay, thì gỡ cái mác SONY gắn vào là xong. Còn cái loa Nhật thì vứt luôn, chỉnh làm quái gì.
                    ...
                    Hôm qua, 23:17
                  • since0501
                    Trả lời cho Pin Li-FePO4 (pin sắt) rất dể hỏng! Các biện pháp ngăn ngừa.
                    bởi since0501
                    Mình đào mộ xíu, cho mình hỏi là pin của bác vẫn ok chứ? Mình vừa đóng khối pin 16 cell 40135 thì khi chạy điện áp nó sụt so với khi nghỉ như video mình dẫn link, vậy cho mình hỏi là dung lượng pin sẽ tính khi áp nghỉ hay áp đang hoạt động, và pin sụt áp như vậy là bình thường hay pin kém?
                    ht...
                    Hôm qua, 17:56
                  • mèomướp
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi mèomướp
                    Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                    10-01-2025, 13:11
                  • tuyennhan
                    Trả lời cho Sửa bộ nguồn DC 60V 45A
                    bởi tuyennhan
                    Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                    10-01-2025, 09:25
                  • tuyennhan
                    Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                    bởi tuyennhan
                    Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                    Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                    10-01-2025, 09:10
                  Đang tải...
                  X