以下代码为代论坛魔友zyb5918 发布,因为才注册帐号,想分享但发不上帖子,所以我***此贴~!
- ;根据PPM控制PWM 控制LED
- ; P1.0正转LED灯渐暗。
- ; P1.1反转LED灯渐亮。
- ;2013-11-14 参数调整可使用,接场效应管电机实验转速变化控制正常
- ;现有的缺点,不能断信号保护(油门保护)(失控保护)
- PWM EQU 00H ;PWM赋初始值实验中必须00H
- OUTA EQU P1.3 ;正转PWM输出口。
- OUTB EQU P1.2 ;反转PWM输出口。
- BZW EQU 40H ;正反标志
- PPM EQU P3.5 ;接收PPM信号口
- ORG 0000H
- LJMP START
- ORG 000BH
- LJMP INTT0
- ORG 001BH
- LJMP INTT1
- ORG 0030H
- ;主程序
- ;定时器0工作在模式1,定时器1工作在模式2。
- START:
- MOV SP,#30H ;#30H
- MOV TMOD,#21H ;#21H
- MOV TH1,PWM ;脉宽调节
- MOV TL1,#00H
- MOV TH0,#0FFH ;1ms延时常数#0FCH-#0D4H
- MOV TL0,#00H ;频率调节#66H-#0CDH
- SETB EA
- SETB ET0
- SETB ET1
- SETB TR0
- LOOP:
- MOV A,PWM ;
- JB PPM,INCL ;是否有PPM信号输入?
- CLR 40H
- LJMP LOOP
- INCL:
- LCALL YAN11 ;先延时1.1ms毫秒
- JNB PPM,PWM1 ;小于1.1,到PWM1正转最快
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM2 ;小于1.2,到PWM2正转80/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM3 ;小于1.3,到PWM3正转60/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM4 ;小于1.4,到PWM4正转40/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM5 ;小于1.5,到PWM5正转最慢
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM6 ;小于1.6,到PWM6反转最慢
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM7 ;小于1.7,到PWM7反转40/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM8 ;小于1.8,到PWM8反转60/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM9 ;小于1.9,到PWM9反转80/
- LCALL YAN01 ;延时0.1ms毫秒
- JNB PPM,PWM0 ;小于2ms,到PWM0反转最快
- ljmp LOOP
- PWM1: ;正转最快
- MOV PWM,#01H
- MOV 40H,#10H ;正转标志
- ljmp LOOP
- PWM2: ;正转80/
- MOV PWM,#2fH
- MOV 40H,#10H ;正转标志
- ljmp LOOP
- PWM3: ;正转60/
- MOV PWM,#60H
- MOV 40H,#10H ;正转标志
- ljmp LOOP
- PWM4: ;正转40
- MOV PWM,#9fH
- MOV 40H,#10H ;正转标志
- ljmp LOOP
- PWM5: ;正转最慢
- MOV PWM,#0FfH
- MOV 40H,#30H ;正转标志
- ljmp LOOP
- PWM6: ;反转最慢
- MOV PWM,#0FfH
- MOV 40H,#30H ;反转标志
- ljmp LOOP
- PWM7: ;反转40/
- MOV PWM,#9fH
- MOV 40H,#20H ;反转标志
- ljmp LOOP
- PWM8: ;反转60/
- MOV PWM,#60H
- MOV 40H,#20H ;反转标志
- ljmp LOOP
- PWM9: ;反转80/
- MOV PWM,#2fH
- MOV 40H,#20H ;反转标志
- ljmp LOOP
- PWM0: ;反转最快
- MOV PWM,#01H
- MOV 40H,#20H ;反转标志
- ljmp LOOP
- ;T0中断服务子程序 (频率)
- ;控制定时器1中断
- INTT0:
- CLR TR1
- MOV TH0,#0FFH ;1ms延时常数0FCH-0D4H
- MOV TL0,#00H ;频率调节66H-0CDH
- MOV TH1,PWM
- SETB TR1
- MOV A,40H
- CJNE A,#10H,SHIB ;如果标志不是#10H就开反转口
-
- CLR OUTA
- CLR A
- RETI
- SHIB:
- CJNE A,#20H,TUIC
- CLR OUTB
- CLR A
- RETI
- TUIC:
- CLR A
- RETI
- ;T1中断服务子程序 (脉宽)
- ;控制PWM脉冲宽度
- INTT1:
- CLR TR1 ;脉宽调节结束
- SETB OUTA
- SETB OUTB ;结束输出
- CLR A
- RETI
- ;1.1ms延时子程序
- yan11: ;STC1T,11.0592晶振
- MOV R7,#01H
- DL1:
- MOV R6,#0C4H
- DL0:
- MOV R5,#0EH
- DJNZ R5,$
- DJNZ R6,DL0
- DJNZ R7,DL1
- NOP
- RET
- ;0.1ms延时子程序
- yan01: ;STC1T,11.0592晶振
- MOV R6,#3DH
- DL01:
- MOV R5,#03H
- DJNZ R5,$
- DJNZ R6,DL01
- NOP
- RET
- ;WDT1: ;看门狗 清0计数器
- ;MOV WDT,#00111000B ;#00111111B
- ;ret ;71.1mS毫秒复位
- END
复制代码 下面是线路图:
***完毕,哈哈,欢迎zyb5918兄弟来做沙发!
|