欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)PWM波的誤差問(wèn)題
[打印本頁(yè)]
作者:
haoaini
時(shí)間:
2019-6-2 16:29
標(biāo)題:
51單片機(jī)PWM波的誤差問(wèn)題
小組在玩51單片機(jī)的開(kāi)發(fā)板的時(shí)候發(fā)現(xiàn),代碼上設(shè)計(jì)的PWM波為100Hz,用示波器測(cè)只有80Hz左右,出現(xiàn)的誤差是什么造成的
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16; //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;
//--定義使用的IO口--//
sbit PWM=P2^1;
bit DIR;
//--定義一個(gè)全局變量--//
u16 count,value,timer0;
/*******************************************************************************
* 函 數(shù) 名 : Timer1Init
* 函數(shù)功能 : 定時(shí)器1初始化
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Timer0Init(void) //40微秒@11.0592MHz
{
// AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0xDB; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{
Timer0Init(); //定時(shí)器0初始化
while(1)
{
if(count>300)//多長(zhǎng)時(shí)間變一次
{
count=0;
if(DIR==1) //DIR控制增加或減小
{
value++;
}
if(DIR==0)
{
value--;
}
}
if(value==250)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>250) //PWM周期為40*250=10ms,f=100Hz
{
timer1=0;
}
if(timer1 <value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : Time1
* 函數(shù)功能 : 定時(shí)器1的中斷函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Time1(void) interrupt 1 //3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2 4 串口中斷
{
TL0 = 0xDB; //
TH0 = 0xFF;
timer1++;
count++;
}
復(fù)制代碼
HC6800-ES V2.0 新版.pdf
2019-6-2 16:29 上傳
點(diǎn)擊文件名下載附件
759.71 KB, 下載次數(shù): 7
作者:
xuyaqi
時(shí)間:
2019-6-2 17:55
調(diào)整定時(shí)器參數(shù),修改PWM波的誤差。
作者:
honey_teck
時(shí)間:
2019-6-2 18:01
是你的count變量造成的啊,count變量就是80HZ啊。
作者:
1直到世界盡頭
時(shí)間:
2019-6-2 19:59
你先查看一下你的晶振頻率對(duì)不對(duì) 然后看一下定時(shí)進(jìn)入中斷時(shí)間對(duì)不對(duì)
作者:
lele5211314
時(shí)間:
2019-6-3 13:22
你的定時(shí)器初始值需要考慮,還需要考慮的你的晶振是12MHz? 還是11.0592MHz的
作者:
wulin
時(shí)間:
2019-6-4 06:53
樓主的程序沒(méi)有打開(kāi)中斷,根本就無(wú)法正常運(yùn)行。定時(shí)器改8位自動(dòng)重裝模式更合理些。
#include "reg52.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16; //對(duì)數(shù)據(jù)類(lèi)型進(jìn)行聲明定義
typedef unsigned char u8;
//--定義使用的IO口--//
sbit PWM=P2^1;
bit DIR;
//--定義一個(gè)全局變量--//
u16 count,value,timer1;
/*******************************************************************************
* 函 數(shù) 名 : Timer1Init
* 函數(shù)功能 : 定時(shí)器1初始化
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Timer0Init() //40微秒@11.0592MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x02; //設(shè)置定時(shí)器8位自動(dòng)重裝模式
TL0 = 0xDB; //設(shè)置定時(shí)初值
TH0 = 0xDB; //設(shè)置定時(shí)重載值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
EA=1; //開(kāi)總中斷
ET0=1; //開(kāi)定時(shí)器0中斷
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{
Timer0Init(); //定時(shí)器0初始化
while(1)
{
if(count>300)//多長(zhǎng)時(shí)間變一次
{
count=0;
if(DIR==1) //DIR控制增加或減小
{
value++;
}
if(DIR==0)
{
value--;
}
}
if(value==250)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>250) //PWM周期為40*250=10ms,f=100Hz
{
timer1=0;
}
if(timer1 <value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
/*******************************************************************************
* 函 數(shù) 名 : Time1
* 函數(shù)功能 : 定時(shí)器1的中斷函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void Time1(void) interrupt 1 //3 為定時(shí)器1的中斷號(hào) 1 定時(shí)器0的中斷號(hào) 0 外部中斷1 2 外部中斷2 4 串口中斷
{
// TL0 = 0xDB;
// TH0 = 0xFF;
timer1++;
count++;
}
復(fù)制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1