您的位置 首页 应用

8051直流电机的开环控制程序

———————–函数声明,变量定义——————————————————–includereg51

//———————–函数声明,变量界说——————————————————–
#include
#include
#include
//———————–界说管脚——————————————————–
sbit PWM=P1^0; //PWM波形输出
sbit DR=P1^1; //方向操控
#define timer_data (256-100) //守时器预置值,12M时钟是,守时0.1ms
#define PWM_T 100 //界说PWM的周期T为10ms
unsigned char PWM_t; //PWM_t为脉冲宽度(0~100)时刻为0~10ms
unsigned char PWM_count; //输出PWM周期计数
unsigned char time_count; //守时计数
bit direction; //方向标志为
//————————————————————————————————–
// 函数称号:timer_init
// 函数功用:初始化设备守时器
//————————————————————————————————–
void timer_init()
{
TMOD=0x22; /*守时器1为作业形式2(8位主动重装),0为形式2(8位主动重装) */
PCON=0x00;
TF0=0;
TH0=timer_data; //确保守时时长为0.1ms
TL0=TH0;
ET0=1;
TR0=1; //开端计数
EA=1; //中止答应
}
//————————————————————————————————–
// 函数称号:setting_PWM
// 函数功用:设置PWM的脉冲宽度和设定方向
//————————————————————————————————–
void setting_PWM()
{
if(PWM_count==0) //初始设置
{
PWM_t=20;
direction=1;
}
}
//————————————————————————————————–
// 函数称号:IntTimer0
// 函数功用:守时器中止处理程序
//————————————————————————————————–
void IntTimer0() interrupt 1
{
time_count++;
DR=direction;
if(time_count>=PWM_T)
{
time_count=0;
PWM_count++;
setting_PWM(); //每输出一个PWM波调用一次
}
if(time_countPWM=1;
else
PWM=0;
}
//————————————————————————————————–
// 函数称号:main
// 用户主函数
// 函数功用:主函数
//————————————————————————————————–
void main()
{
timer_init();
setting_PWM();
}
admin2009-6-12 21:522#
//———————–函数声明,变量界说——————————————————–
#include
#include
sbit SDA=P1^0; // 将p1.0口模仿数据口
sbit SCL=P1^1; // 将p1.1口模仿时钟口
#define NUM 10 // 接纳和发送缓存区的深度
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
unsigned char idata sendbuf[NUM]; // 数据发送缓冲区
unsigned char idata receivebuf[NUM]; // 数据接纳缓冲区
bit bdata SystemError; // 从机过错标志位
//————————————————————————————————–
// 函数称号: iic_start()
//函数功用: 发动I2C总线子程序
//————————————————————————————————–
void iic_start(void)
{ EA=0; //时钟坚持高,数据线从高到低一次跳变,I2C通讯开端
SDA = 1;
SCL = 1;
delayNOP(); // 延时5us
SDA = 0;
delayNOP();
SCL = 0;
}
//————————————————————————————————–
// 函数称号: iic_stop()
// 函数功用: 中止I2C总线数据传送子程序
//————————————————————————————————–
void iic_stop(void)
{
SDA = 0; //时钟坚持高,数据线从低到高一次跳变,I2C通讯中止
SCL = 1;
delayNOP();
SDA = 1;
delayNOP();
SCL = 0;
}
//————————————————————————————————–
// 函数称号: slave_ACK
//函数功用: 从机发送应对位子程序
//————————————————————————————————–
void slave_ACK(void)
{
SDA = 0;
SCL = 1;
delayNOP();
SDA = 1;
SCL = 0;
}
//————————————————————————————————–
// 函数称号: slave_NOACK
// 函数功用: 从机发送非应对位子程序,迫使数据传输进程完毕
//————————————————————————————————–
void slave_NOACK(void)
{
SDA = 1;
SCL = 1;
delayNOP();
SDA = 0;
SCL = 0;
}
//————————————————————————————————–
// 函数称号: check_ACK
//函数功用: 主机应对位查看子程序,迫使数据传输进程完毕
//————————————————————————————————–

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/318435.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部