微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机直流电机调试

STC89C52单片机直流电机调试

时间:11-21 来源:互联网 点击:
/////////////////////////////////////////////////////////////////////////

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

#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) interrupt 3
{
TL1 = TIMS; //重新给定时器1的低字节寄存器赋值
TH1 = TIMS>>8; //重新给定时器1的高字节寄存器赋值
cCount++; //
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top