谁能给解释一下这个pwm程序 怎么输出波形 和调速的?给加100分

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:23:48
PWM EQU 7FH ;PWM赋初始值
oRG 0000H ;初始化
AJMP MAIN
ORG 000BH
AJMP INTT0
ORG 001BH
AJMP INTT1
ORG 0020H
;//////////////////////////小车的主程序段
main:
MOV SP,#30H
MOV TMOD,#21H ;定时器0工作在模式1,定时器1工作在模式2
MOV TH1,PWM ;脉宽调节
MOV TL1,#00H
MOV TH0,#0FeH ;0.5ms延时常数
MOV TL0,#0bH ;频率调节
SETB EA ;允许CPU开中断
SETB ET0 ;允许定时器0开中断
SETB ET1 ;允许定时器1开中断
SETB TR0 ;启动定时器0
MOV R1,#00H ;寄存器R1清零
MOV P1,R1 ;p1清零

WAIT:
MOV P0,#0FFH ;设置p0状态
CLR P0.6 ;对第二列清0
MOV A,P0 ;扫描p0端口
ANL A,#

给你个用C语言编的,可读性强,可移植性高。

/* =======直流电机的PWM速度控制程序======== */
/* 晶振采用11.0592M,产生的PWM的频率约为91Hz */
#include<reg51.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit en1=P1^0; /* L298的Enable A */
sbit s1=P1^2; /* L298的Input 1 */
sbit s2=P1^3; /* L298的Input 2 */
uchar t=0; /* 中断计数器 */
uchar m1=0; /* 电机1速度值 */
uchar tmp1,tmp2; /* 电机当前速度值 */

/* 电机控制函数 index-电机号(1,2); speed-电机速度(-100—100) */
void motor(uchar index, char speed)
{
if(speed>=-100 && speed<=100)
{
if(index==1) /* 电机1的处理 */
{
m1=abs(speed); /* 取速度的绝对值 */
if(speed<0) /* 速度值为负则反转 */
{
s1=0;
s2=1;
}
else /* 不为负数则正转 */
{
s1=1;
s2=0;
}
}

}
}
void delay(uint j) /* 简易延时函数 */
{
for(j;j>0;j--);
}

void main()
{