新闻中心

EEPW首页>嵌入式系统>设计应用> STC89C52单片机直流电机调试

STC89C52单片机直流电机调试

作者: 时间:2016-11-21 来源:网络 收藏
/////////////////////////////////////////////////////////////////////////

实现功能: 配置定时器1,让其每隔1毫秒产生一次中断,通过对中断的次数的统计,
让定义的P2口的第0个引脚产生占空比为70%的PWM,通过它来驱动直流
电机
实验板型号:BS-XYD-C52
实验名称:直流电机测试实验
编写人:谢应东
编写日期:2012-4-30
/////////////////////////////////////////////////////////////////////////
#include

本文引用地址://m.amcfsurvey.com/article/201611/319224.htm

#define uchar unsigned char
#define uint unsigned int

#define FOSC 12000000L
#define TIMS(65535-FOSC/12/1000)//在12T模式下定时器中断1秒的计算方法

uchar cCount;//定义定时器中断的次数,依次为根据产生PWM

sbit PWM=P2^0;//定义直流电机相连的引脚为PWM
/////////////////////////////////////////////////////////////////////////
函数名称:毫秒延时函数
函数功能:实现毫秒级的延时
参数介绍:Delay_MS: 定义需要延时的毫秒的数值
iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得
返回值:
注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形
式完成,所以如果改变了晶振的频率,请做相应的改变
/////////////////////////////////////////////////////////////////////////
void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber {
iValue=107;
while(iValue--);
}
}
/////////////////////////////////////////////////////////////////////////
函数名称:Init_System
函数功能:配置定时器,让其产生每1毫秒产生一次中断,以此为根据生成相应的PWM
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////

void Init_System()
{
DelayMs(50);//稳定系统
TMOD|= 0x10;//设置定时器1为模式1(16bit)
//PWM
TL1 = TIMS;//给定时器1低字节寄存器赋初值
TH1 = TIMS>>8;//给定时器1高字节寄存器赋初值
TR1= 1;//让定时器1开始工作
ET1=1;//打开定时器1的中断允许位
EA=1;//允许全局中断

cCount=0;//给全局变量赋初值
}
/////////////////////////////////////////////////////////////////////////
函数名称:main
函数功能:让定义的P2口的第0个引脚产生PWM,产生占空比为70%的PWM
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////
void main()
{
Init_System();//系统初始化函数
while(1)
{
if(cCount>100)//定义cCount的上限
cCount=0;
if(cCount<30)//定义占空比
PWM=0;
else PWM=1;
}
}
/////////////////////////////////////////////////////////////////////////
函数名称:Timer1_Routine
函数功能:定时器1中断服务函数,实现重新给定时器赋值,改变计数变量的值
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////

void Timer1_Routine(void)interrupt3
{
TL1 = TIMS;//重新给定时器1的低字节寄存器赋值
TH1 = TIMS>>8;//重新给定时器1的高字节寄存器赋值
cCount++;//
}



评论


技术专区

关闭