资源简介
本文使用单片机T2定时器,这个定时器大多数人很少使用它,而却不知道它有一个非常优秀的功能就是定时自动重载功能。利用这个功能能够更为精确的对定时器进行设定,可控制精度在1个机器周期(12M晶振下就是1us),T0、T1都需要手动重载,其精度无法很好的控制。
/*------------------------------
硬件需求: 12T系列单片机(8051内核)
拥有T2定时器
12M时钟晶振
P2_0输出控制
舵机角度范围在0~180 高电平范围0.5ms~2.5ms 20ms周期
--------------------------------*/
代码片段和文件信息
// Header:舵机控制程序
// File Name:
// Author:程蒙蒙(QQ1058515967)
// Date:2018年9月12日
//Description:基于12T系列单片机且有T2定时器的单片机舵机控制程序
//,本程序控制精度高(1us),定时器自动控制舵机转动
/*------------------------------
硬件需求: 12T系列单片机(8051内核)
拥有T2定时器
12M时钟晶振
P2_0输出控制
舵机角度范围在0~180 高电平范围0.5ms~2.5ms 20ms周期
--------------------------------*/
#include
#define T2_PWMout P2_0 //舵机控制端
unsigned int PWMTimes=0;//高电平时间
unsigned char angle=0; //测试角度
void T2_Init();//初始化定时器2
void SetMotoangle(float angle);//设置舵机角度
void Delay100ms(); //@12.000MHz
void main()
{
bit SWdir=0;
T2_Init();//初始化定时器
while(1)//演示程序,舵机左右摆动
{
if(angle>180)SWdir=0;
else if(angle==0)SWdir=1;
SetMotoangle(SWdir?angle++:angle--);
Delay100ms();
}
}
void T2_Init()
{
unsigned int time=65536-20000;
RCAP2L = TL2 = time; //initial timer2 low byte
RCAP2H = TH2 = time >> 8; //initial timer2 high byte
TR2 = 1; //timer2 start running
ET2 = 1; //enable timer2 interrupt
EA = 1; //open global interrupt switch
}
void SetMotoangle(float angle)
{
//防止越界而损伤电机
if(angle > 175) angle = 175;
if(angle <5) angle = 5;
PWMTimes=500+angle*2000.0/180;//计算出高电平时间
}
/* Timer2 interrupt routine */
void tm2_isr() interrupt 5 using 1
{
static bit SW=0;
unsigned int T2count;
TF2 = 0;//标志位清零
SW=~SW;//状态取反
T2_PWMout=SW;//更新输出
if(SW)//低电平时间
{
T2count=0xB1E0+PWMTimes;//0xB1E0即为20ms中断用时
RCAP2L=T2count;
RCAP2H=T2count>>8;
}
else//高电平时间
{
T2count=0-PWMTimes;
RCAP2L=T2count;
RCAP2H=T2count>>8;
}
}
void Delay100ms() //@12.000MHz
{
unsigned char i j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-09-12 00:57 T2控制舵机\
文件 138042 2018-09-12 00:57 T2控制舵机\12T单片机T2控制舵机.uvgui.cheng
文件 6900 2018-09-12 00:57 T2控制舵机\12T单片机T2控制舵机.uvopt
文件 14052 2018-09-11 23:57 T2控制舵机\12T单片机T2控制舵机.uvproj
目录 0 2018-09-12 00:57 T2控制舵机\Listings\
文件 9829 2018-09-12 00:46 T2控制舵机\Listings\12T单片机T2控制舵机.m51
目录 0 2018-09-12 00:57 T2控制舵机\ob
文件 7610 2018-09-12 00:46 T2控制舵机\ob
文件 6376 2015-05-29 12:09 T2控制舵机\STARTUP.A51
文件 2101 2018-09-12 00:57 T2控制舵机\main.c
相关资源
- 两超声波模块测量角度
- 51单片机闹钟
- 51单片机 心形花样流水灯程序
- 四位数码管时钟程序
- BC28+51单片机的原理图
- 51单片机控制电机的转速转向以及启停
- T型三电平逆变器加SPWM控制仿真
- STM8S103定时器1多模式输出PWMCH3单通道
- DSP的SVPWM产生
- 51单片机双机通信
- SPWM加入三次谐波调制仿真
- 51开发板密码锁
- 单片机控制舵机程序
- 基于51单片机的心形流水灯仿真
- 51单片机控制CS5463程序
- 51单片机最小系统原理图.SchDoc
- 51单片机红外遥控器程序
- 28335 spwm
- 遗传算法实现求PID参数控制电压的代
- 基于51单片机的智能窗帘系统全套资料
- 51单片机控制步进电机电路图
- 三路舵机51程序按键控制角度
- 基于STM32F4的PWM程序
- 51单片机读取DS18b20数据加1602显示+pr
- stm32基于战舰修改八路pwm
- 基于51单片机寻光小车
- c51单片机数码管显示60s倒计时
- 51单片机控制DS18b20,在数码管上显示
- AT89C51单片机--CC1101无线接收程序经本
- 51单片机+DS18B20+NRF24L01+LCD1602=无线温度
评论
共有 条评论