SOGO論壇
  登入   註冊   找回密碼
查看: 4124|回覆: 12
列印 上一主題 下一主題

[程式設計] 求用8051產生頻率為1kHZ的PWM訊號(組語) [複製連結]

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-5-15 19:24:52 |只看該作者 |正序瀏覽
求用8051程式產生頻率為1kHz(OSC=12MHz)的PWM訊號(組語),工作時間為25%>50%>75%的PWM訊號,謝謝
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 4

狀態︰ 離線
13
發表於 2012-5-27 09:21:59 |只看該作者
NEXT2:        MOV        R3,#1
        ACALL        DELAY3
        JB        P1.0,NEXT2                  
WAIT1:        JNB        P1.0,WAIT1    2  p1.0=0  jumb wait1
        MOV        A,R5
你這裡好像是在做無窮迴圈ㄅ  太久沒寫了  感覺你程式是這裡出問題  給你參考用拉  小弟真的是太久沒寫了    pwm成是你要記得去算執行時間跟你的石英震盪器有關係

Rank: 6Rank: 6

數位硬體勳章

狀態︰ 離線
12
發表於 2012-5-18 19:48:34 |只看該作者
                        ORG    00H
START:
                        MOV      P3,#FFH
                        MOV      P2,#FFH
                        JNB        P3.1,LED1
                        JNB        P3.2,LED2
                        JNB        P3.3,LED3
                        JNB        P3.4,LED4
                        JMP        START
LED1:
                        MOV      P2,#00H
                        ACALL  DELAY1
                        MOV      P2,#FFH
                        ACALL  DELAY     
                        JNB        P3.1,LED1
                        JMP        START
DELAY1:
                        MOV      R6,#20
S1:
                        MOV      R7,#25
                        DJNZ      R7,$
                        DJNZ      R6,S1
                        RET
LED2:
                        MOV      P2,#00H
                        ACALL  DELAY2
                        MOV      P2,#FFH
                        ACALL  DELAY
                        JNB        P3.2,LED2
                        JMP        START
DELAY2:
                        MOV      R6,#20
S2:
                        MOV      R7,#5
                        DJNZ      R7,$
                        DJNZ      R6,S2
                        RET
LED3:
                        MOV      P2,#00H
                        ACALL  DELAY3
                        MOV      P2,#FFH
                        ACALL  DELAY
                        JNB        P3.3,LED3
                        JMP        START
DELAY3:
                        MOV      R6,#10
S3:
                        MOV      R7,#4
                        DJNZ      R7,$
                        DJNZ      R6,S3
                        RET
LED4:
                        MOV       P2,#00H
                        ACALL   DELAY4
                        MOV       P2,#FFH
                        ACALL   DELAY
                        JNB         P3.4,LED4
                        JMP         START
DELAY4:
                        MOV      R6,#10
S4:
                        MOV      R7,#1
                        DJNZ      R7,$
                        DJNZ      R6,S4
                        RET
DELAY:
                        MOV      R6,#20
S:
                        MOV      R7,#25
                        DJNZ      R7,$
                        DJNZ      R6,S
                        RET

                        END


  以上是我之前寫的,確定可以用,用的是比較笨的方法,一目瞭然。

  用P3.1~P3.4做控制,也就是有四段不同佔空比,頻率會變動,主要是因為高電位持續時間不變,只變動低電位時間所致。

  如果要更改頻率和佔空比,直接修改各個延遲副程式中的R6或R5的值就可
   

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
11
發表於 2012-5-18 18:43:04 |只看該作者
本帖最後由 又靜 於 2012-5-18 23:43 編輯
a23118010 發表於 2012-5-18 12:08  
這樣程式呢?雖然還是沒有動作==  ,謝謝           
           ORG        0000H   
        MOV        R5,#5


您好,
試看看這個.....
  1.         ORG        0
  2. PWM:
  3.         MOV        R3,#5
  4.         MOV        R4,#15

  5. NEXT:   JNB        P1.0,NEXT
  6.         INC        R3
  7.         INC        R3
  8.         INC        R3
  9.         INC        R3
  10.         INC        R3
  11.         DEC        R4
  12.         DEC        R4
  13.         DEC        R4
  14.         DEC        R4
  15.         DEC        R4
  16.         MOV        R5,#200
  17.         CALL       DELAY
  18.         CJNE       R3,#20,START
  19.         JMP        PWM
  20. START:
  21.         SETB       P2.0
  22.         MOV        A,R3
  23.         MOV        R5,A
  24.         CALL       DELAY
  25.         CLR        P2.0
  26.         MOV        A,R4
  27.         MOV        R5,A
  28.         CALL       DELAY
  29.         JB         P1.0,START
  30.         JMP        NEXT
  31.         
  32. DELAY:  MOV        R6,#250
  33.         DJNZ       R6,$
  34.         DJNZ       R5,DELAY
  35.         RET
複製代碼

點評

a23118010  有亮,沒改變,彈跳開關按下去就導通,放開就斷路  發表於 2012-5-21 19:30:50
a23118010  抱歉一直打擾到妳,你這電路當P1.0按下去也是沒動作,會不會根本就是我8051有問題  發表於 2012-5-19 10:31:12
a23118010  不好意思,你這23行電腦說有錯  發表於 2012-5-18 23:08:53

狀態︰ 離線
10
發表於 2012-5-18 12:08:22 |只看該作者
本帖最後由 a23118010 於 2012-5-18 12:10 編輯
又靜 發表於 2012-5-18 11:47  
您好,

關於您的程式...


  這樣程式呢?雖然還是沒有動作==  ,謝謝           
           ORG        0000H   
        MOV        R5,#5
        MOV        R4,#15                    
NEXT:        JB        P1.0,LOOP
NEXT2:        MOV        R3,#1
        ACALL        DELAY3
        JB        P1.0,NEXT2
WAIT1:        JNB        P1.0,WAIT1  
        MOV        A,R5
        INC        A
        INC        A
        INC        A
        INC        A
        INC        A
        MOV        R5,A
        MOV        A,R4              
        DEC        A
        DEC        A
        DEC        A
        DEC        A
        DEC        A
        MOV        R4,A
LOOP:        MOV        P2,#01H
        ACALL        DELAY
        MOV        P2,#00H
        ACALL        DELAY1
                AJMP        NEXT


DELAY:        MOV        R6,#4
LED01:        MOV        R7,#50
LED02:        DJNZ        R7,LED02                  
        DJNZ        R6,LED01                  ;2μ*5(50+50*4)=0.0025
        DJNZ        R5,DELAY
        RET

DELAY1:        MOV        R6,#4
LED03:        MOV        R7,#50
LED04:        DJNZ        R7,LED04                  
        DJNZ        R6,LED03                  
        DJNZ        R4,DELAY1
        RET

DELAY3:        MOV        R6,#40
LED05:        MOV        R7,#249
LED06:        DJNZ        R7,LED06                  
        DJNZ        R6,LED05                  ;2μ*1(249+249*40)+3=0.02
        DJNZ        R3,DELAY3
        RET

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
9
發表於 2012-5-18 11:47:13 |只看該作者
a23118010 發表於 2012-5-17 20:06  
謝謝,但是我LED還是沒變==

您好,

關於您的程式...

一、您是用開關ON/OFF做控制工作時間,剛剛算了一下您的延遲時間只有0.06秒,
當開關 ON → OFF→ ON 可能重複觸發很多次

二、R4暫存器是計算低電位的工作時間,每執行NEXT迴圈,其值減5,所以不該把R4設為0

狀態︰ 離線
8
發表於 2012-5-17 20:06:25 |只看該作者
又靜 發表於 2012-5-17 19:45  
剛剛看了一下您的程式,您是想用 P1.0 的開關做控制,在NEXT迴圈裡改變暫存器R5、R4,來改變工作時間
但 ...

謝謝,但是我LED還是沒變==

點評

a23118010  恩,改放在ORG 0000H下一行  發表於 2012-5-17 21:00:51
又靜  您好,您是把LOOP迴圈裡的R5、R4拿掉嗎??  發表於 2012-5-17 20:25:25

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
7
發表於 2012-5-17 19:57:25 |只看該作者
alphi 發表於 2012-5-17 18:42  
版主給的有些語法是錯的,我修改如下可以讓他編譯過另外模擬結果如下圖.看起來是duty : 50%,頻率也非1KHz. ...

alphi 大師您好  
小妹只是粗淺提供程式的流程,至於每一個指令所耗費的指令週期並沒有仔細去計算

Rank: 13Rank: 13Rank: 13Rank: 13

原創及親傳圖影片高手勳章 熱心參予論壇活動及用心回覆主題勳章 榮譽會員勳章 數位硬體勳章 小說之星勳章 原創寫手勳章

狀態︰ 離線
6
發表於 2012-5-17 19:45:44 |只看該作者
a23118010 發表於 2012-5-17 18:04  
不好意思,妳給的程式電腦說11.17行有錯,可請問一下我下面寫的這可行嗎,有錯嗎?因我用LED試沒變,想利用按P ...


剛剛看了一下您的程式,您是想用 P1.0 的開關做控制,在NEXT迴圈裡改變暫存器R5、R4,來改變工作時間
但是,在您的LOOP迴圈裡,又把暫存器R5、R4寫入一個固定值,所以,您的LED才不會變,問題應該是出在那裡

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
5
發表於 2012-5-17 18:42:04 |只看該作者
a23118010 發表於 2012-5-17 18:04  
不好意思,妳給的程式電腦說11.17行有錯,可請問一下我下面寫的這可行嗎,有錯嗎?因我用LED試沒變,想利用按P ...

版主給的有些語法是錯的,我修改如下可以讓他編譯過
  1. ;IC: ATMEL AT89C51
  2. ;Compiler: Keil A51
  3. ;設定P0.0(P0第一隻腳為輸出)
  4. PWM:
  5.                
  6.         ORG        0

  7.         MOV        R3,#50
  8.         MOV        A,#100
  9.         SUBB        A,R3
  10.         MOV        R4,A


  11. START:
  12.         SETB        P0.0
  13.         MOV        R5,#4
  14. HI:
  15.         DJNZ        R5,$
  16.         DJNZ        R3,HI

  17.         CLR        P0.0
  18.         MOV        R5,#4
  19. LO:
  20.         DJNZ        R5,$
  21.         DJNZ        R4,LO
  22.         JMP        START

  23.         END
複製代碼
另外模擬結果如下圖.看起來是duty : 50%,頻率也非1KHz.因對8051組語不熟.所以只能幫到此為止

已有 1 人評分威望 收起 理由
又靜 + 2 感謝您熱心幫助會員解決問題,論壇需要您的.

總評分: 威望 + 2   查看全部評分

失敗只有一種:那就是半途而廢
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2025-7-20 05:43

© 2004-2025 SOGO論壇 OURSOGO.COM
回頂部