📄 调速程序.c
字号:
//-----------------------函数声明,变量定义----------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include<ABSACC.h>
//-----------------------定义管脚--------------------------------------------------------
sbit LPWM=P1^7;
sbit RPWM=P1^6; //PWM波形输出
//sbit LDR=P1^4; //方向控制
//sbit RDR=P1^3; //方向控制
sbit tr=P1^7 ; //485通讯控制脚
//------------------------------------------------------------------------------------------------
#define uint unsigned int
#define uchar unsigned char
//------------------------------------------------------------------------------------------------
#define ADDRESS 0x01
#define timer_data (256-100) //定时器预置值,12M时钟是,定时0.1ms
#define PWM_T 118 //定义LPWM的周期T为10ms 100 周期越大速度越慢
unsigned char PWM_t; //PWM_t为脉冲宽度(0~100)时间为0~10ms
unsigned char time_count; //定时计数
uint l; //定义全局变量
//--------------------------------------------------------------------------------------------------
// 函数名称:timer_init
// 函数功能:初始化设施定时器
//--------------------------------------------------------------------------------------------------
void timer_init(void)
{
TMOD=0x22; //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装)
PCON=0x00;
SCON=0xd8; //串行口模式3,TB8=1发送地址呼叫
EA=1; //中断允许
ES=1;ET0=1;ET1=0;
PS=1;PT0=0;
TF0=0;TF1=0;
//RI=0;TI=0;
TH0=timer_data; //保证定时时长为0.1ms
TL0=TH0;
TH1=0xfd; //产生9600波特率
TL1=0xfd;
// ET0=1;
TR0=1; //开始计数
// ET1=1;
TR1=1; //开始计数
tr=0; //设置为接收
}
//--------------------------------------------------------------------------------------------------
// 函数名称:setting_PWM
// 函数功能:设置PWM的脉冲宽度
//--------------------------------------------------------------------------------------------------
void setting_PWM(uint x)
{
PWM_t=x;
}
//--------------------------------------------------------------------------------------------------
// 函数名称:IntTimer0
// 函数功能:定时器中断处理程序
//--------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1 using 1
{
time_count++;
//LDR=Ldirection;
if(time_count>=PWM_T)
{
time_count=0;
setting_PWM(l); //每输出一个PWM波调用一次
}
if(time_count<PWM_t)
{ LPWM=1; RPWM=1;}
else
{LPWM=0; RPWM=0;}
}
//主函数//------------------------------------------------------------------------------------------------
//中断接收程序
void sevice_serial(void)interrupt 4 using 1
{uchar rs;uchar i=0; ES=0;
if(RI==1)
{RI=0;
tr=0;
while(RI==0);RI=0;
rs=SBUF;
if(rs==0xff) //是复位命令
{SM2=1;
ES=1;
}
else if(rs!=ADDRESS) //不是呼叫本机
{
ES=1;
}
else{
SM2=0;
tr=1;
SBUF=ADDRESS; //用本机地址作为应答
while(TI==0);
TI=0;
tr=0;
//下面开始接收
while(RI==0);RI=0;
l=SBUF;
tr=1;
SBUF=1;
while(TI==0);TI=0;
}
}
ES=1;
}
void main(void)
{ //IE=0;
timer_init();
l=50;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -