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

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

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

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

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

狀態︰ 離線
2
發表於 2012-5-16 22:24:05 |只看該作者
本帖最後由 又靜 於 2012-5-16 22:57 編輯

您好,
不知道您要如何控制工作時間,所以只寫25%的工作時間,
但,您只要修改第四行的數值,就可以得到您要的工作時間。
  1. PWM:        REG        P0
  2.         ORG        0

  3.         MOV        R3,#25
  4.         MOV        A,#100
  5.         SUBB        A,R3
  6.         MOV        R4,A


  7. START:
  8.         SETB        P0,0
  9.         MOV        R5,#4
  10. HI:
  11.         DJNZ        R5,$
  12.         DJNZ        R3,HI

  13.         CLR        P0,0
  14.         MOV        R5,#4
  15. LO:
  16.         DJNZ        R5,$
  17.         DJNZ        R4,LO
  18.         JMP        START

  19.         END
複製代碼

狀態︰ 離線
3
發表於 2012-5-17 18:04:57 |只看該作者
本帖最後由 a23118010 於 2012-5-18 10:48 編輯
又靜 發表於 2012-5-16 22:24  
您好,
不知道您要如何控制工作時間,所以只寫25%的工作時間,
但,您只要修改第四行的數值,就可以得到您 ...


不好意思,妳給的程式電腦說11.17行有錯,可請問一下我下面寫的這可行嗎,有錯嗎?因我用LED試沒變,想利用按P1.0開關做控制              
           ORG           0000H                        
        AJMP        LOOP
NEXT:        MOV        R3,#3
        ACALL        DELAY3
        JNB        P1.0,LOOP
        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:        JNB        P1.0,NEXT
        MOV        R1,#00000001B
        MOV        P2,R1
        MOV        R5,#5
        ACALL        DELAY
        MOV        R1,#11111110B
        MOV        P2,R1
        MOV        R4,#15
        ACALL        DELAY1
                AJMP        LOOP


DELAY:        MOV        R6,#4
LED01:        MOV        R7,#50
LED02:        DJNZ        R7,LED02                  
        DJNZ        R6,LED01                  
        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                  
        DJNZ        R3,DELAY3
        RET

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

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

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

抱歉,
請您把11跟17行的P0,0 改成 P0.0  再試看看

另外,第四行的數值只能是 1~99 的範圍

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   查看全部評分

失敗只有一種:那就是半途而廢

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: 13Rank: 13Rank: 13Rank: 13

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

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

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

狀態︰ 離線
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

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

狀態︰ 離線
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

狀態︰ 離線
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
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


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

GMT+8, 2025-5-15 13:26

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