szcharger:
就是模擬三路PWM(通過(guò)不同脈沖比較來(lái)實(shí)現(xiàn))--下面為搖控此程序是七彩漸變控制程如有疑問(wèn)可以相互溝通QQ:756074626 電話:13510453187 譚生==========原程序如下:;;================================================================================ R0 == 0X00 TCC == 0X01 PC == 0x02 R3 == 0X03 PORT5 == 0X05 PORT6 == 0X06 IOCF == 0X0F IOCE == 0X0E IOCD == 0X0D R3F == 0X0F ;不同型號(hào)修改 C == 0X00 DELAY_C1== 0X10 PWM_C1 == 0X12 PWM_C2 == 0X13 FLAG == 0X14 BA == 0X15 BR3 == 0X16 T_PARA == 0X17;變化周期 I_PARA == 0X18;狀態(tài) DIRECT_F== 0 COMP_F == 1 AC_FLAG == 2;=========================================================================== TIME_PARA1== 1 ;可修改的時(shí)間參數(shù);============================================================================ ORG 0X0 JMP START ;============================================================================ ; ORG 0X8 ;中斷服務(wù)程序;INTT: ; MOV BA,A; SWAP BA; SWAPA R3; MOV BR3,A; ;; MOV A,R3F ;;; JBS R3F,2;; JMP INT_RETURN; clr R3F; ; inc 0x1d ; MOV A,PWM_C2; SUB A,T_PARA; JBS 0X03,0X02; JMP INT_RETURN0; ; MOV A,@0; MOV PWM_C2,A; MOV PWM_C1,A; MOV A,@TIME_PARA1 ;所有記數(shù)中斷開(kāi)始,嚴(yán)格同步; MOV DELAY_C1,A; BS FLAG,DIRECT_F ; JMP INT_RETURN ;;INT_RETURN0: ; INC PWM_C2 ;;INT_RETURN: ; SWAPA BR3; MOV R3,A; SWAPA BA; RETI ;============================================================================ ;=====================================================================================;上電后程序通過(guò)讀撥碼開(kāi)關(guān)的狀態(tài),決定顏色變化的周期,;以及開(kāi)始點(diǎn)亮的初始狀態(tài);P61,P62,P63,決定點(diǎn)亮的初始狀態(tài),P65,P66,P67,決定點(diǎn)顏色變化的周期,P64另做選程序用(led,lamp),;P50,紅,P51,綠,P52,藍(lán);===================================================================================== START: CALL INIT ;初始化 MOV A,@0X99 MOV T_PARA,A/* MOV A,PORT6 RRCA PORT6 MOV T_PARA,A AND A,@0X07 MOV I_PARA,A SWAPA T_PARA AND A,@0X07 CALL TRANS MOV T_PARA,A MOV T_PARA,A MOV A,I_PARA ADD PC,A NOP ;JMP LOOP_T00取消第一個(gè)漸暗的狀態(tài) JMP LOOP_T10 JMP LOOP_T20 JMP LOOP_T30 JMP LOOP_T40 JMP LOOP_T50 JMP LOOP_T60 JMP LOOP_T70 TRANS: ADD PC,A NOP RETL @0X33 RETL @0X66 RETL @0X99 RETL @0X0CC RETL @0X0FF RETL @0X0FF RETL @0X0FF RETL @0X0FF RETL @0X0FF */ LOOP_T00: MOV A,@0B00000000 MOV PORT5,A LOOP_T0: WDTC CALL DELAY CALL DETECT_AC JBS FLAG,DIRECT_F JMP LOOP_T0 BC FLAG,DIRECT_F LOOP_T10: MOV A,@0B00000000 MOV PORT5,A;============================================================;紅色由暗漸亮,其他暗;============================================================ LOOP_T1: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT1 BS PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T1 BC FLAG,DIRECT_F JMP LOOP_T20 LT1: BC PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T1 BC FLAG,DIRECT_F ;============================================================;紅的保持亮,綠色由暗漸亮;============================================================ LOOP_T20: MOV A,@0B00001000;1 MOV PORT5,A LOOP_T2: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT2 BS PORT5,1 JBS FLAG,DIRECT_F JMP LOOP_T2 BC FLAG,DIRECT_F JMP LOOP_T30 LT2: BC PORT5,1 JBS FLAG,DIRECT_F JMP LOOP_T2 BC FLAG,DIRECT_F ;============================================================;綠色保持亮,紅色色由亮漸暗;============================================================ LOOP_T30: MOV A,@0B00001010;1 MOV PORT5,A LOOP_T3: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT3 BC PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T3 BC FLAG,DIRECT_F JMP LOOP_T40 LT3: BS PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T3 BC FLAG,DIRECT_F ;============================================================;綠色保持亮,蘭色色由暗漸亮;============================================================ LOOP_T40: MOV A,@0B00000010;0 MOV PORT5,A LOOP_T4: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT4 BS PORT5,2 JBS FLAG,DIRECT_F JMP LOOP_T4 BC FLAG,DIRECT_F JMP LOOP_T50 LT4: BC PORT5,2 JBS FLAG,DIRECT_F JMP LOOP_T4 BC FLAG,DIRECT_F ;============================================================;蘭色保持亮,綠色由亮漸暗;============================================================ LOOP_T50: MOV A,@0B00000110;0 MOV PORT5,A LOOP_T5: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT5 BC PORT5,1 JBS FLAG,DIRECT_F JMP LOOP_T5 BC FLAG,DIRECT_F JMP LOOP_T60 LT5: BS PORT5,1 JBS FLAG,DIRECT_F JMP LOOP_T5 BC FLAG,DIRECT_F ;============================================================;蘭色保持亮,紅色由暗漸亮;============================================================ LOOP_T60: MOV A,@0B00000100;0 MOV PORT5,A LOOP_T6: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT6 BS PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T6 BC FLAG,DIRECT_F JMP LOOP_T70 LT6: BC PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T6 BC FLAG,DIRECT_F ;============================================================;紅的保持亮,蘭色色由亮漸暗;============================================================ LOOP_T70: MOV A,@0B00001100;1 MOV PORT5,A LOOP_T7: WDTC CALL DETECT_AC CALL DELAY MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT7 BC PORT5,2 JBS FLAG,DIRECT_F JMP LOOP_T7 BC FLAG,DIRECT_F JMP LOOP_T80 LT7: BS PORT5,2 JBS FLAG,DIRECT_F JMP LOOP_T7 BC FLAG,DIRECT_F JMP LOOP_T80;============================================================;紅色由暗漸亮;============================================================ LOOP_T80: MOV A,@0B00001000;1 MOV PORT5,A LOOP_T8: WDTC CALL DELAY CALL DETECT_AC MOV A,PWM_C1 SUB A,PWM_C2 JBS 0X03,0 JMP LT8 BC PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T8 BC FLAG,DIRECT_F JMP LOOP_T00 LT8: BS PORT5,3 JBS FLAG,DIRECT_F JMP LOOP_T8 BC FLAG,DIRECT_F JMP LOOP_T00 ;======================================================= ;pwm_c1在T_PARA范圍內(nèi)記數(shù),記滿循環(huán), 10個(gè)指令周期(不包括RET);======================================================= DELAY: DJZ DELAY_C1 JMP DEL0 MOV A,@TIME_PARA1 MOV DELAY_C1,A MOV A,PWM_C1 SUB A,T_PARA JBC 0X03,0X02 JMP DE50 NOP INC PWM_C1 RETDE50: MOV A,@0 MOV PWM_C1,A RET DEL0: NOP NOP NOP NOP NOP NOP NOP NOP RET INIT: mov a,@0;@0b00001011 CONTW IOW PORT5 ;端口5設(shè)為輸出 MOV PORT5,A ; MOV FLAG,A MOV A,@00 IOW IOCF ;禁止中斷 MOV A,@0X80 IOW IOCE ;關(guān)WDTE,P60為中斷 MOV A,@0X0FF IOW PORT6 ;設(shè)為輸入,中斷進(jìn)入 MOV A,@0X01 ;P60用外部上拉,其他使能內(nèi)部上拉 IOW IOCD MOV A,@TIME_PARA1 MOV DELAY_C1,A CLRA MOV PWM_C1,A MOV PWM_C2,A RET ;============================================================================== ;檢測(cè)交流電的波形下降延,此子程序15個(gè)指令周期(不包括ret),各分支執(zhí)行時(shí)間相等;============================================================================== DETECT_AC: JBS FLAG,AC_FLAG JMP PORT60IS0 PORT60IS1: JBC PORT6,0 ;檢測(cè)底電平是否到 JMP RET_DELAY0 BC FLAG,AC_FLAG;底電平到, MOV A,PWM_C2 SUB A,T_PARA JBS 0X03,0X02 JMP DETECT1 MOV A,@0 MOV PWM_C2,A MOV PWM_C1,A MOV A,@TIME_PARA1 ;所有記數(shù)中斷開(kāi)始,嚴(yán)格同步 MOV DELAY_C1,A BS FLAG,DIRECT_F RET DETECT1: INC PWM_C2 NOP NOP NOP NOP NOP NOP RET PORT60IS0: JBS PORT6,0 JMP RET_DELAY BS FLAG,AC_FLAG NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RET RET_DELAY: NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RET RET_DELAY0: NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RET END