開門第一話,授人以魚不如授人以漁。簡單介紹一下原理及程序過程。
通過定時中斷翻轉IO口電平。PWM波一個周期需要兩次電平翻轉,因為高電平時間與低電平時間可能不相對,所以定時器需要根據該電平狀態的持續時間來負初值,也就是說,不能用常量。賦初值后啟動定時器,中斷時翻轉IO口電平,實現PWM波的輸出。
開門第二話,直接上代碼。
IO口及變量定義
//定義IO口以及高低電平持續時間對應定時器初值的暫存變量
sbit PWM=P2^6;
uint PWM_H=0; //高電平定時器初值
uint PWM_L=0; //低電平定時器初值
初始化部分,提供“周期+脈寬”和“頻率+占空比”兩種方式的初始化函數
////////////////////////////////////////////////////////////////////////
// 名稱 : PWM_Init_Cycle(uint cycle,uint width)
// 功能 : 通過周期和脈寬調制PWM波
// 參數 :
// uint cycle 周期 單位:微秒 范圍:20-65535
// uint width 脈寬 單位:微秒 范圍:20-65535
// 返回 : 無
////////////////////////////////////////////////////////////////////////
void PWM_Init_Cycle(uint cycle,uint width)
{
TMOD=0x01;//定時器0工作方式1
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TH0=TL0=0;
PWM_H=0xFFFF-width;
PWM_L=0xFFFF-(cycle-width);
TR0=1; //啟動定時器0
}
////////////////////////////////////////////////////////////////////////
// 名稱 : PWM_Init_Fre(uint fre,uchr duty)
// 功能 : 通過頻率和占空比調制PWM波
// 參數 :
// uint fre 頻率 單位:赫茲 范圍:20-50000
// uchr duty 占空比 單位:百分比 范圍:1-100
// 返回 : 無
////////////////////////////////////////////////////////////////////////
void PWM_Init_Fre(uint fre,uchr duty)
{
int cycle=1000000/fre;
TR0=0; //停止定時器0
TMOD=0x01;//定時器0工作方式1
TH0=TL0=0;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
PWM_H=cycle/100*duty; //算出持續時間
PWM_L=cycle-PWM_H;
PWM_H=0xFFFF - PWM_H;/持續時間轉換為初值 PWM_L=0xFFFF - PWM_L; TR0=1; //啟動定時器0 }
PWM調制定時器中斷處理
////////////////////////////////////////////////////////////////////////
// 名稱 : interrupt_timer0(void)
// 功能 : 定時器0溢出終端處理函數
// 參數 : 無
// 返回 : 無
////////////////////////////////////////////////////////////////////////
void interrupt_timer0(void) interrupt 1
{
PWM=!PWM; //翻轉IO電平
if(PWM) //高電平,把高電平對應的初值搬入定時器
{
TH0=(uchr)(PWM_H>>8);
TL0=(uchr)(PWM_H>>0);
}
else //低電平,把低電平對應的初值搬入定時器
{
TH0=(uchr)(PWM_L>>8);
TL0=(uchr)(PWM_L>>0);
}
}
是不是覺得特別簡單。放心,我沒有偷懶代碼都在。
總結一下,由于是通過定時器中斷調制的脈寬,所以,高低電平持續時間都不能大于65535個機器周期。同事,由于中斷處理函數也需要時間,高低電平持續時間也都不能太短,最好在10個機器周期以上,如果太短,CPU就沒時間干其他事了。這算是一個缺點把,但這個范圍應該也夠用了。
上一篇:基于STC15單片機芯片的直流電機PID控制轉速源碼
下一篇:基于狀態機的51單片機獨立按鍵檢測與消抖思路
推薦閱讀
史海拾趣
隨著環保意識的日益增強,Caddell-Burns Manufacturing公司也積極響應國家號召,致力于實現綠色發展。公司引進了先進的環保設備和技術,對生產過程中的廢棄物進行無害化處理。同時,公司還研發了一系列環保型電子產品,滿足了客戶對綠色產品的需求。此外,公司還加強了對員工的環保教育,提高他們的環保意識,共同為保護環境貢獻力量。
通過以上五個故事,我們可以看到Caddell-Burns Manufacturing公司在電子行業里發展起來的艱辛與輝煌。他們憑借過硬的技術實力、敏銳的市場洞察力和卓越的管理能力,在激烈的市場競爭中脫穎而出,成為一家備受矚目的電子制造企業。
隨著全球化進程的加速,Conexcon Group積極實施國際化戰略,將業務拓展至海外市場。公司通過在海外設立研發中心和生產基地,進一步提升了自身的研發能力和生產效率。同時,公司還加強了與國際知名品牌的合作,通過共同推廣和營銷活動,提升了自身品牌在國際市場的知名度和影響力。這些舉措不僅為公司帶來了豐厚的利潤回報,也為公司的長遠發展奠定了堅實的基礎。
隨著全球化進程的加速,Conexcon Group積極實施國際化戰略,將業務拓展至海外市場。公司通過在海外設立研發中心和生產基地,進一步提升了自身的研發能力和生產效率。同時,公司還加強了與國際知名品牌的合作,通過共同推廣和營銷活動,提升了自身品牌在國際市場的知名度和影響力。這些舉措不僅為公司帶來了豐厚的利潤回報,也為公司的長遠發展奠定了堅實的基礎。
在電子行業中,技術創新是企業持續發展的關鍵。動運科技始終將技術創新作為公司的核心競爭力,不斷投入研發資源,推動產品升級和技術創新。近年來,公司在自動對焦和光學防抖技術方面取得了重大突破,成功應用于音圈馬達驅動芯片中,為智能手機等設備的攝像頭模組提供了更加穩定、清晰的成像效果。這一技術的成功應用,不僅提升了動運科技在業界的地位,也為公司帶來了廣闊的市場前景。
在國內市場取得一定成績后,BOPLA開始將目光投向海外市場。通過參加國際電子展會、與海外客戶建立合作關系等方式,公司成功將產品打入國際市場。同時,BOPLA還積極調整產品策略,根據不同國家和地區的市場需求,推出定制化的電子元件產品,進一步擴大了市場份額。
BOPLA公司成立于XXXX年,初期主要致力于電子開關、熔斷器等基礎電子元件的研發與生產。創始人憑借對電子行業的深厚理解和敏銳的市場洞察力,帶領公司逐步在競爭激烈的市場中站穩腳跟。通過不斷的技術創新和品質提升,BOPLA的產品逐漸獲得了客戶的認可,為公司后續的發展奠定了堅實的基礎。
實驗六 DMA實驗實驗目的:學習DMA的原理的使用方法實驗內容:用DMA方法接收McBSP接口語音芯片的數據 DMA是直接存儲器存取,是一種傳送不占用CPU處理時間的大批量數據傳送的有效方式。我們用以下實例來說明它的應用:如果我們要做一個音頻處理系統, ...… 查看全部問答∨ |
|
摘要:針對現有水輪發電機組振擺監測系統永久性結構模式 問題,構建了基于CC2430的水輪發電機組無線振擺監測系 統。給出了系統的體系結構和工作流程;設計基于CC2430模 塊的無線傳感器節點;詳盡給出系統能源、信號同步及采樣 精度測試等關鍵技 ...… 查看全部問答∨ |
請教,bootloader中有這么一個函數: // lqm: 1G08:dwStartSector = 7 * 64 (boot:7個block) HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags) { & ...… 查看全部問答∨ |
wince5.0下 問題: 怎樣定制內核,讓系統默認語言是英文,但是我能瀏覽中文及中文繁體的網站? 我在定制內核的時候 platform --setting LOACL 選了三種 中文、中文(臺灣)、英文。 defaulte language:英語(美國)的時候,中文網頁顯示不出 ...… 查看全部問答∨ |
|