找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2099|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

等周期脈寬調(diào)制pwm單片機(jī)匯編程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:128229 發(fā)表于 2016-6-27 21:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
;等周期脈寬調(diào)制pwm
;晶振:12MHZ
;89S51
P_PWM1      EQU         P1.0
cycle       EQU         1000        ;PWM的周期(單位微秒),則頻率為1000赫茲
cycle_high  EQU         500         ;一個周期內(nèi),PWM端口為高電平的時間(初始值)
   DSEG AT 20H
   ORG         40H
   PWM_HIGH_L  DATA        40H
            PWM_HIGH_H  DATA        41H         ;PWM端口為高電平時,定時器寄存器的值
   PWM_LOW_L  DATA         42H
            PWM_LOW_H  DATA         43H         ;PWM端口為高電平時,定時器寄存器的值
    ORG         60H                     ; 堆棧起源
stack:      DS          20H                     ; 堆棧長度
   CSEG
   ORG         0000H                   ; power on/reset vector
            jmp         on_reset
            ORG         0003H                   ; 外部中斷0向量
            reti                                ;
            ORG         000BH                   ; 計時器0溢出向量
            reti                                ;
            ORG         0013H                   ; 外部中斷1的向量
            reti                                ;
            ORG         001BH                   ; 定時器溢出向量1
            JMP         TIMER1_ISR
    ORG         0023H                   ; 串行I / O中斷矢量
            reti                                ;
;***********************************************************************************
;系統(tǒng)初始化等
            ORG         0033H                   ; begin code space
            USING       0                       ; register bank zero
on_reset:   MOV         R7,#00H
            DJNZ        R7,$        ;延時
            mov         sp, #(stack-1)          ; 初始化堆棧指針
            ;禁止各中斷
            MOV         IE,#00H
            MOV         IP,#00H
SYS_INIT:   MOV         R0,#00H
SYS_INIT_LOOP:
            MOV         R1,#00H
            DJNZ        R1,$
            DJNZ        R0,SYS_INIT_LOOP        ;延時0.13S
            ;內(nèi)部RAM(30H-5fH)清零
            MOV         R1,#30H
            MOV         A,#0
ZERO_LOOP:  MOV         @R1,A
            INC         R1
            CJNE        R1,#60H,ZERO_LOOP
            ;定時器1初始化
            MOV         TMOD,#00010000B         ;方式1,16位定時器模式
            MOV         PWM_HIGH_L,#LOW(65536 - cycle_high)
            MOV         PWM_HIGH_H,#HIGH(65536 - cycle_high)
            MOV         PWM_LOW_L,#LOW(65536 - (cycle - cycle_high))
            MOV         PWM_LOW_H,#HIGH(65536 - (cycle - cycle_high))
            SETB        P_PWM1                  ;先輸出高
            MOV         TL1,PWM_HIGH_L
            MOV         TH1,PWM_HIGH_H
            SETB        ET1                     ;T1開中斷
            SETB        EA                      ;開總中斷
            SETB        TR1                     ;開定時器1
MAIN_LOOP:
;主循環(huán)
            SJMP        $
;**********************************************************************
;**********************************************************************
;定時器1中斷服務(wù)程序
TIMER1_ISR:
            USING       1                       ; register bank 1
            PUSH        ACC
            PUSH        PSW
   JB          P_PWM1,PWM_OUT_LOW      ;如果輸出為高則,輸出低
            SETB        P_PWM1
            MOV         TL1,PWM_HIGH_L
            MOV         TH1,PWM_HIGH_H
            JMP         TIMER_ISR_RET
PWM_OUT_LOW:
            CLR         P_PWM1
            MOV         TL1,PWM_LOW_L
            MOV         TH1,PWM_LOW_H
TIMER_ISR_RET:
            POP         PSW
            POP         ACC
            RETI
;*********************************************************************
            END


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表