怎样用AT80C51单片机编写汇编程序输出pwm 通过不同的占空比控制直流电机的转速和转向?

51的输出是没法直接驱动电机的,电机需要有驱动电路。只能用PWM控制驱动电路,进而控制电机转向和转速。比如用P1^1和P1^2输出两路PWM信号,正向转动时P1^1输出PWM信号,P1^2输出低电平。反向转动时则相反设置。而转速则是改变PWM的占空比,即脉冲宽度与所占周期的比例,占空比为0则制动,占空比为1则全速转动。先理清大致的流程,再进行细节考虑。对于程序,根据自己的电路,自己编吧!网上很多这些程序的。追问

关键就是占空比不会调 要采用中断方式 网上都是C 我们要汇编

追答

之前用51产生PWM信号去控制舵机,那才叫坑。51没有专门的PWM控制器,所以只能用定时器去产生PWM信号。而写程序的时候,关于占空比一般就考虑高电平与低电平的时间比例。比如给出一个周期的时间为500ms(LOOP_TIME),给定时器赋初值,即高电平持续时间(H_TIME),定时器溢出时,先关闭定时器,然后电平翻转为低电平,加一个延时也就是低电平持续时间(L_TIME=LOOP_TIME-H_TIME),延时执行完之后电平翻转为高,再开定时器,中断返回。这样就产生了一个高电平为H_TIME,低电平为L_TIME的PWM信号,而其中周期是定值LOOP_TIME,H_TIME是自变量,L_TIME是因变量。增大高电平时间(加速转动)的同时就相当于减小了低电平的时间。不知道这样说明白吗。

追问

MOV TMOD,#01H
MOV TH1,#
MOV TL1,# ;假如说这是500ms的定时 也就是高电平的时间
SETB EA
SETB ETO
SETB TRO
SJMP $
CLR EA
CPL P1.0
LCALL DELY
下面dely延时不写了 这样写对么

追答

嗯,框架就这样吧!调用延时后记得开中断和电平翻转。子程序的标号记得加上。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-25
用Keil C51软件
第2个回答  2012-12-25
留下邮箱、给你一个实例追问

[email protected]