资源简介
使用方法含在代码的注释内,只要有基础的单片机知识即可了解,及其详尽
代码片段和文件信息
/*****************************************************************************
** 文件 : main.c
** 作者 : Zheng23
** 日期 :
** 功能 :
/*****************************************************************************/
//#include
//#include“STC89C5xRC.H“
//一定要用12M的晶振
//一定要用12M的晶振
//一定要用12M的晶振
//一定要用12M的晶振
//一定要用12M的晶振
//一定要用12M的晶振
#include “reg51.h“
#define uint8 unsigned char
#define uint16 unsigned short int
#define uint32 unsigned long
sbit SERVO0=P0^0; //控制舵机的PWM输出口
uint16 Servo0PwmDuty=1500; //PWM脉冲宽度
/***********************************************************
* 名 称: DelayMs(uint16 ms)
* 功 能: 延时ms毫秒
* 入口参数: ms 毫秒
* 出口参数: 无
* 说 明:
/**********************************************************/
void DelayMs(uint16 ms)
{
uint16 ij;
for(i=0;i<85;i++) //89单片机用8512系列单片机用800
for(j=0;j }
/***********************************************************
* 名 称:InitTimer0()
* 功 能:时钟0初始化
* 入口参数:无
* 出口参数:无
* 说 明:12M晶振,12分频,所以计数器每递增一个数就是1微秒,完全满足舵机控制的精度要求
因为定时器是TH0,TL0都要全部计数到0xFF后在计1个数就会产生中断,所以要想产生
x毫秒的中断,那么TH0,TL0就应该赋值(0xFFFF-x) 从这个值开始计数产生定时中断
/**********************************************************/
void InitTimer0(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x00; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //开定时器0中断
}
/***********************************************************
* 名 称:Timer0Value(uint16 pwm)
* 功 能:给定时器0计数器赋值产生定时中断
* 入口参数:pwm 控制舵机的PWM脉冲宽度值(范围:500~2500)
* 出口参数:无
* 说 明:12M晶振,12分频,所以计数器每递增一个数就是1微秒,完全满足舵机控制的精度要求
因为定时器是TH0,TL0都要全部计数到0xFF后在计1个数就会产生中断,所以要想产生
pwm毫秒的中断,那么TH0,TL0就应该赋值(0xFFFF-pwm) 从这个值开始计数产生定时中断
/**********************************************************/
void Timer0Value(uint16 pwm)
{
uint16 value;
value=0xffff-pwm;
TR0 = 0;
TL0=value; //16位数据给8位数据赋值默认将16位数据的低八位直接赋给八位数据
TH0=value>>8; //将16位数据右移8位,也就是将高8位移到低八位,再赋值给8位数据
TR0 = 1;
}
/***********************************************************
* 名 称: main()
* 功 能: 入口函数
* 入口参数: 无
* 出口参数: 无
* 说 明:
/**********************************************************/
void main(void)
{
InitTimer0(); //定时器0初始化
EA = 1; //开总中断
while(1) //大循环
{
Servo0PwmDuty = 500; //脉冲宽度在500微秒,对应-90°
DelayMs(1000); //延时1秒
Servo0PwmDuty = 1000; //脉冲宽度在1000微秒,对应-45°
DelayMs(1000);
Servo0PwmDuty = 1500;
DelayMs(1000);
Servo0PwmDuty = 2000;
DelayMs(1000);
Servo0PwmDuty = 2500;
DelayMs(1000);
Servo0PwmDuty = 2000;
DelayMs(1000);
Servo0PwmDuty = 1500;
DelayMs(1000);
Servo0PwmDuty = 1000;
DelayMs(1000);
}
}
/***********************************************************
* 名 称: Timer0_isr() interrupt 1 using 1
* 功 能: 时钟0中断处理
* 入口参数: 无
* 出口参数: 无
* 说 明:
/**********************************************************/
void Timer0_isr(void) interrupt 1 using
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 0 2016-06-18 15:36 STC单片机舵机PWM控制教程\一定要用12M的晶振.txt
文件 4113 2016-06-18 15:34 STC单片机舵机PWM控制教程\单个舵机控制\main.c
文件 8110 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\main.LST
文件 4659 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\main.OBJ
文件 34 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\main.__i
文件 4680 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1
文件 1153 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1.hex
文件 82 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1.lnp
文件 7822 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1.M51
文件 178 2015-06-16 17:42 STC单片机舵机PWM控制教程\单个舵机控制\Project1.plg
文件 85271 2019-08-07 14:19 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvgui.10707
文件 72597 2015-06-23 19:16 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvgui.Administrator
文件 138889 2016-06-18 15:36 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvgui.Xia
文件 72563 2015-06-21 21:12 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvgui_Administrator.bak
文件 138886 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvgui_Xia.bak
文件 5443 2019-08-07 14:19 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvopt
文件 14041 2019-08-07 14:19 STC单片机舵机PWM控制教程\单个舵机控制\Project1.uvproj
文件 5869 2016-06-18 15:33 STC单片机舵机PWM控制教程\单个舵机控制\Project1_uvopt.bak
文件 13456 2015-06-14 14:03 STC单片机舵机PWM控制教程\单个舵机控制\Project1_uvproj.bak
文件 6376 2010-09-03 17:12 STC单片机舵机PWM控制教程\单个舵机控制\STARTUP.A51
文件 14049 2015-06-14 12:00 STC单片机舵机PWM控制教程\单个舵机控制\STARTUP.LST
文件 749 2015-06-14 12:00 STC单片机舵机PWM控制教程\单个舵机控制\STARTUP.OBJ
文件 42 2015-06-14 12:06 STC单片机舵机PWM控制教程\单个舵机控制\说明.txt
文件 8861 2015-06-14 12:07 STC单片机舵机PWM控制教程\单个舵机控制\__Previews\main.cPreview
文件 5649 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\main.c
文件 11607 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\main.LST
文件 7248 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\main.OBJ
文件 53 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\main.__i
文件 7479 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\Project1
文件 3947 2016-06-18 15:35 STC单片机舵机PWM控制教程\单个舵机速度控制\Project1.hex
............此处省略86个文件信息
相关资源
- SVPWM的仿真
- 三相SVPWM整流
- 汇编实现pwm及按键控制
- STM8S单片机输出互补PWM可通过刹车输入
- Verilog实现APB总线接口的PWM模块
- PWM 逆变器双环控制技术研究
- 113172211svpwm_get.zip
- msp430G2553直流电机控制PWM调速和正反转
- 基于CC2530单路PWM控制程序
- 用FPGA生成SPWM波形
- pwm 步进电机pwm 步进电机 pwm 步进电机
- 计算生成SPWM的占空比的软件
- 基于MSP430单片机实现的正弦波PWM输出
- SPWM计算器
- 利用单片机定时器产生的占空比可调
- Qt编写的Leds以及蜂鸣器奏乐
- 直流电机PWM控制proteus仿真图
- SPWM脉宽数计算器
- 3路、4路红外循迹智能小车程序
- 51产生PWM波控制舵机用于智能小车控制
- 单相PWM整流器模型
- PWM输出程序 MSP430
- PID方式PWM输出温度控制stc12c5a+ds18b20
- 28335结合AD采样的svpwm实现
- PROTUSE仿真自动避障or寻迹小车
- msp430的pwm程序
- 三相PWM整流88335
- 基于DSP28335的四路PWM移相代码
- 基于DSP28335的4路PWM移相程序
- 基于 ATMEGA-16 的 PWM 与 Proteus 仿真
评论
共有 条评论