佚名通过本文主要向大家介绍了stc12c5a60s2单片机,stc12c5a60s2 adc型号,stc12c5a60s2,stc12c5a60s2中文资料,stc12c5a60s2引脚图等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 对于单片机型号为stc12c5a60s2问题
描述:
用STC12C5A60S2控制直流电机,PWM控制转速,按键s1、s2控制加速减速
因只控制一路电机所以只用到一路PWM,若用到两路则打开另一路即可
晶振为22.1184MHz,使用其他晶振时把延时函数改一下即可。
***************************************************************/
#include<STC12C5A60S2.H> //头文件
sbit s1 = P2^7;//加速控制
sbit s2 = P2^6;//减速控制
sbit R1 = P1^1;
sbit R2 = P1^2;//R1和R2控制转向,一个高电平一个低电平
sbit IO = P1^3;
sbit ENB = P0^2;
unsigned int z=0;
unsigned char flag=0;
void time0_init();
void delay_ms(unsigned int time)
{
int x,y;
for(x=time;x>0;x--)
for(y=229;y>0;y--);
}
void PWM_init (void)
{
CMOD=0x04; //设置PCA定时器
CL=0x00;
CH=0x00;
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
CCAP0L=0xFF; //设置PWM0初始值与CCAP0H相同
CCAP0H=0x8D; // PWM0初始时为0
CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
CCAP1H=0x00; // PWM1初始时为0
CR=1; //启动PCA定时器
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:PWM0占空比设置函数
调 用:PWM0_set();
参 数:0x00~0xFF(亦可用0~255)
返回值:无
结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM0_set (unsigned char a)
{
CCAP0L= a; //设置值直接写入CCAP0L
CCAP0H= a; //设置值直接写入CCAP0H
}
/*
void PWM1_set (unsigned char a)
{
CCAP1L= a; //设置值直接写入CCAP0L
CCAP1H= a; //设置值直接写入CCAP0H
}*/
/**********************************************************************************************/
void main ()
{
//AUXR |= 0x80; //定时器0设置为1T
PWM_init(); //PWM初始化
time0_init();
R1 = 0;
R2 = 1;
PWM0_set (100);
z = 1;
while(1)
{ ;
// if(s1==0)
// {
// delay_ms(50);
// if(s1==0)
// {
// z++;
// ENA = 0;
// ENB =0;
// while(s1==0);//等待按键松开
// PWM0_set (z);
// if(z == 250)
// {
// z=80;
// }
// }
// }
// if(s2==0)
// {
// delay_ms(50);
// if(s2==0)
// {
// z--;
// ENA = 1;
// ENB =1;
// while(s2 == 0);//等待按键松开
// PWM0_set (z);
// if(z == 1)
// {
// z=1;
// }
// }
// }
}
}
void time0_init()
{
TMOD=0x02;
TH0=-62;
TL0=-62;
ET0=1;
TR0=1;
EA=1;
}
void timer_interrupt () interrupt 1
{
TH0=-62;
TL0=-62;
flag=!flag;
if(flag==1)
{
PWM0_set(100);
}
else
{
CR=0;
}
}
对于这一程序。我该实现PWM频率改成8K .。但是却测试不了。有谁帮下忙。看看什么问题。在线等`~急
描述:
单片机stc12c5a60s2PWM频率
/**************************************************************用STC12C5A60S2控制直流电机,PWM控制转速,按键s1、s2控制加速减速
因只控制一路电机所以只用到一路PWM,若用到两路则打开另一路即可
晶振为22.1184MHz,使用其他晶振时把延时函数改一下即可。
***************************************************************/
#include<STC12C5A60S2.H> //头文件
sbit s1 = P2^7;//加速控制
sbit s2 = P2^6;//减速控制
sbit R1 = P1^1;
sbit R2 = P1^2;//R1和R2控制转向,一个高电平一个低电平
sbit IO = P1^3;
sbit ENB = P0^2;
unsigned int z=0;
unsigned char flag=0;
void time0_init();
void delay_ms(unsigned int time)
{
int x,y;
for(x=time;x>0;x--)
for(y=229;y>0;y--);
}
void PWM_init (void)
{
CMOD=0x04; //设置PCA定时器
CL=0x00;
CH=0x00;
CCAPM0=0x42; //PWM0设置PCA工作方式为PWM方式(0100 0010)
CCAP0L=0xFF; //设置PWM0初始值与CCAP0H相同
CCAP0H=0x8D; // PWM0初始时为0
CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
CCAP1H=0x00; // PWM1初始时为0
CR=1; //启动PCA定时器
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:PWM0占空比设置函数
调 用:PWM0_set();
参 数:0x00~0xFF(亦可用0~255)
返回值:无
结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM0_set (unsigned char a)
{
CCAP0L= a; //设置值直接写入CCAP0L
CCAP0H= a; //设置值直接写入CCAP0H
}
/*
void PWM1_set (unsigned char a)
{
CCAP1L= a; //设置值直接写入CCAP0L
CCAP1H= a; //设置值直接写入CCAP0H
}*/
/**********************************************************************************************/
void main ()
{
//AUXR |= 0x80; //定时器0设置为1T
PWM_init(); //PWM初始化
time0_init();
R1 = 0;
R2 = 1;
PWM0_set (100);
z = 1;
while(1)
{ ;
// if(s1==0)
// {
// delay_ms(50);
// if(s1==0)
// {
// z++;
// ENA = 0;
// ENB =0;
// while(s1==0);//等待按键松开
// PWM0_set (z);
// if(z == 250)
// {
// z=80;
// }
// }
// }
// if(s2==0)
// {
// delay_ms(50);
// if(s2==0)
// {
// z--;
// ENA = 1;
// ENB =1;
// while(s2 == 0);//等待按键松开
// PWM0_set (z);
// if(z == 1)
// {
// z=1;
// }
// }
// }
}
}
void time0_init()
{
TMOD=0x02;
TH0=-62;
TL0=-62;
ET0=1;
TR0=1;
EA=1;
}
void timer_interrupt () interrupt 1
{
TH0=-62;
TL0=-62;
flag=!flag;
if(flag==1)
{
PWM0_set(100);
}
else
{
CR=0;
}
}
对于这一程序。我该实现PWM频率改成8K .。但是却测试不了。有谁帮下忙。看看什么问题。在线等`~急