求单片机用定时器产生PWM的汇编语言,单片机型号STC90C516RD+,谢谢~

如题所述

; 这是一个 可以输出 三路 不同占空比的 程序
PWMH1 DATA 30H ;高电平脉冲的个数
PWMH2 DATA 31H
PWMH3 DATA 32H
PWM DATA 33H ;PWM周期
COUNTER DATA 35H
TEMP DATA 36H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTT0
ORG 0100H
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
MOV TMOD,#02H ;定时器0在模式2下工作
MOV TL0,#38H ;定时器每200us产生一次溢出
MOV TH0,#38H ;自动重装的值
SETB ET0 ;使能定时器0中断
SETB EA ;使能总中断
SETB TR0 ;开始计时
MOV PWMH1,#2 ; PWM 1 占空比 可以修改
MOV PWMH2,#5 ; PWM 2 占空比 可以修改
MOV PWMH3,#8 ; PWM 3 占空比 可以修改
MOV COUNTER,#0
MOV PWM,#16 ; 占空比 为 16 级 可以修改
JMP $
INTT0: ; 几个参数需要 定义 三路 PWM 占空比 可以不同
PUSH PSW ; 现场保护
PUSH ACC
INC COUNTER ; 计数值加1
MOV A,COUNTER
CJNE A,PWMH1,INTT01 ; 如果等于高电平脉冲数
CLR P1.0 ; P1.0变为低电平 PWM1
INTT01:
CJNE A,PWMH2,INTT02 ; 如果等于高电平脉冲数
CLR P1.1 ; P1.1变为低电平 PWM2
INTT02:
CJNE A,PWMH3,INTT03 ; 如果等于高电平脉冲数
CLR P1.2 ; P1.2变为低电平 PWM3
INTT03:
CJNE A,PWM,INTT05 ;如果等于周期数
MOV COUNTER,#0 ;计数器复位
SETB P1.0 ;P1.0为高电平
SETB P1.1 ;P1.1为高电平
SETB P1.2 ;P1.2为高电平
INTT05:
POP ACC ;出栈
POP PSW
RETI
END
温馨提示:答案为网友推荐,仅供参考
相似回答