資源簡介
使用方法含在代碼的注釋內,只要有基礎的單片機知識即可了解,及其詳盡

代碼片段和文件信息
/*****************************************************************************
?**?文件 :?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個文件信息
評論
共有 條評論