標題: 我寫的 x51 pwm 程序 [打印本頁]

作者: richard56    時間: 2014-9-23 12:31
標題: 我寫的 x51 pwm 程序

;*************************************************************************************************************************

;專案名稱:PWM模塊 for 89S51

;制令編號:N/A

;程序檔案:x51PWM08(100Hz).ASM

;版    本:V1.00.0

;設(shè)計者  : Richard

;修改紀錄: 周期=10mSec/ 頻率= 100Hz

;2012/06/21: 已完成軟件仿真,由T修改周期;P1Port修改PW(脈沖寬度),請留意T的修改會影響PW的執(zhí)行狀況(T>PW)

;*************************************************************************************************************************

PW           equ   3                      ;PW脈波ON時間設(shè)定(R3)

T              equ   4                      ;周期時間設(shè)定(R4)

T_Cnt               equ   5                      ;時間Counter(R5)


Led           reg    P2.0                  ;PWM基準脈波輸出


                org   0000H

                ljmp  MAIN

;*************************************************************************************************************************        

MAIN:              mov  TMOD,#01H             ;定時器0設(shè)置為工作方式1,16位(2^16)

                ;mov TL0,#B0H         ;設(shè)定中斷時間=50mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-50000) = 15536 = 3CB0(Hex)

                ;mov TH0,#03CH               ;TH0= 03CH ; TL0 = B0H

                ;mov TL0,#F0H         ;設(shè)定中斷時間=10mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-10000) = 55536 = D8F0(Hex)

                ;mov TH0,#0D8H              ;TH0= 0D8H ; TL0 = F0H

                mov  TL0,#18H         ;設(shè)定中斷時間=1mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-1000) = 64536 = FC18(Hex)

                mov  TH0,#0FCH              ;TH0= 0FCH ; TL0 = 18H

                setb   TR0

               

                setb   Led

                mov  R2,#0

                mov  PW,#03H                  ;PW初始設(shè)定,進入主程序后會讀取P1狀態(tài)來重新設(shè)定

                mov  T,#11                        ;周期(中斷時間=1mSec)

                                                ;#128= 128mSec(7.8Hz)

                                                ;#101= 100mSec(10Hz)

                                                ;#15= 15mSec(67Hz)

                                                ;#11= 10mSec(100Hz)

                                                ;#9= 8mSec(124Hz)

                                                ;#8= 7mSec(140.9Hz)

                                                ;#7= 6mSec(167Hz)

                                                ;#6= 5mSec (197Hz)

                                                ;#5= 4mSec(250Hz)

                mov  T_Cnt,#1           ;周期Counter


LOOP:              jbc    TF0,CPLP         ;T0發(fā)生溢位則跳至CPLP

                ;T0未發(fā)生溢位

                call   CHG_P1                   ;讀取P1狀態(tài)設(shè)定為PW

                ajmp LOOP

               

CPLP:               

                ;mov TL0,#B0H         ;設(shè)定中斷時間=50mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-50000) = 15536 = 3CB0(Hex)

                ;mov TH0,#03CH               ;TH0= 03CH ; TL0 = B0H

                ;mov TL0,#F0H         ;設(shè)定中斷時間=10mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-10000) = 55536 = D8F0(Hex)

                ;mov TH0,#0D8H              ;TH0= 0D8H ; TL0 = F0H

                mov  TL0,#18H         ;設(shè)定中斷時間=1mSec=> (2^16 - 設(shè)定中斷時間)=> (65536-1000) = 64536 = FC18(Hex)

                mov  TH0,#0FCH              ;TH0= 0FCH ; TL0 = 18H

               

                inc    T_Cnt                       ;T_Cnt=T_Cnt+1

                mov  A,T_Cnt

                cjne  A,T, TA           ;if T_Cnt<>T then jump to TA

                ;ifT_Cnt=T

                clr    Led                   ;ON

                call   SET_CODE

                mov  T_Cnt,#1          ;T_Cnt=1 again, set break point here

TA:                                 

                mov  A,T_Cnt

                cjne  A,PW, TB                ;if T_Cnt<>PW then jump to TB

                ;ifT_Cnt=PW

                setb   Led                   ;OFF

                call   SET_CODE

                nop                           ;setbreak point here

TB:                                           ;

BACK:              ajmp LOOP

;*************************************************************************************************************************

;       取P1狀態(tài)當作設(shè)定值輸入

;*************************************************************************************************************************

CHG_P1:          push  PSW

                push  ACC

                mov  A,P1

                cpl    A

                anl    A,#11111111b           ;取P1.0~P1.7當作設(shè)定

                cjne  A,#0,PW_SET

                mov  PW,#3                      ;IFP1.0~P1.7=0 ; PW=3

                jmp   E_CHG_P1

PW_SET:          mov  PW,A

E_CHG_P1:      pop   ACC

                pop   PSW

                ret

;*************************************************************************************************************************

SET_CODE:     cjne  R2,#0,A1

                ;clr   P0.0                  ;clr  P0.0: ON(Low)

                ;setb  P0.1                  ;setb  P1.0:OFF(High)

                ;clr   P0.2                  ;clr   P0.2:ON(Low)

                mov  P0,#11111111B         ;0:ON(Low); 1:OFF(High)

                inc    R2

                jmp   A_END

               

A1:           cjne  R2,#1,A2

                ;clr   P0.0                  ;clr  P0.0: ON(Low)

                ;setb  P0.1                  ;setb  P1.0:OFF(High)

                ;clr   P0.2                  ;clr   P0.2:ON(Low)

                mov  P0,#11111110B         ;0:ON(Low); 1:OFF(High)

                inc    R2

                jmp   A_END

               

A2:           cjne  R2,#2,A3

                mov  P0,#11111111B

                inc    R2

                jmp   A_END

               

A3:           cjne  R2,#3,A4

                mov  P0,#11111101B

                inc    R2

                jmp   A_END

               

A4:           cjne  R2,#4,A5

                mov  P0,#11111111B

                inc    R2

                jmp   A_END

               

A5:           cjne  R2,#5,A6

                mov  P0,#11111011B

                inc    R2

                jmp   A_END

               

               

A6:           cjne  R2,#6,A_CLR

                mov  P0,#11111111B

                ;inc   R2

                ;jmp  A_END

                jmp   A_CLR

               

A7:           cjne  R2,#7,A8

                mov  P0,#11111011B

                inc    R2

                jmp   A_END

               

A8:           cjne  R2,#8,A_CLR

                mov  P0,#11111111B

               

A_CLR:            mov  R2,#1

A_END:            ret

;*************************************************************************************************************************

                end



作者: hkccd    時間: 2014-9-23 15:07
能共享一下電路圖嗎?或者電路連接的說明也可以
作者: blj178    時間: 2014-10-18 10:46
匯編太牛了
作者: 鐐歸樀123    時間: 2014-10-24 00:19
璧烇紒妤間富澶帀瀹充簡鍟婏紒
作者: hjlost    時間: 2014-10-24 13:47
鎺樺楂樻墜錛屼笓鎸栧彜澧擄紝涓
作者: 小唐    時間: 2015-8-4 16:56
匯編沒學(xué)過啊,,,,




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1