久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 32192|回復: 9
打印 上一主題 下一主題
收起左側

第8章 單片機CCP/PCA/PWM模塊(可用作DAC)

  [復制鏈接]
跳轉到指定樓層
樓主
51單片機輕松入門—基于STC15W4K系列(C語言版)
李友全
編著:http://www.zg4o1577.cn/bbs/dpj-37954-1.html


8CCP/PCA/PWM模塊(可用作DAC)
1 捕獲模式(用于擴展外中斷)
2 16位定時器模式
3 高速輸出模式
4 脈寬調節模式


花開見佛

CCP/PCA/PWM模塊其實是1個模塊,通過不同的軟件設置可實現4種不同的功

能:外中斷(3個)、定時器(1個)、時鐘輸出(3個)、PWM脈寬調制輸出

3個)。

1 捕獲模式(用于擴展外中斷)

PCA模塊工作于捕獲模式的結構如圖所示。
要使PCA 模塊工作在捕獲模式,寄存器CCAPMn的兩位CAPPn和CAPNn中至少有一位必須置

1,PCA模塊工作于捕獲模式時,對外部輸入CCPn引腳的跳變進行采樣,當采樣到有效跳變 時,置位CCON中的CCFn,如果CCAPMn中的ECCFn位為1,將產生中斷,可在中斷服務程序中 根據標志CCF2、CCF1、CCF0和CF判斷是哪一個模塊產生了中斷或是定時器溢出中斷,并注 意中斷標志位的軟件清0問題。


例8.1 利用PCA模塊擴展3路外部中斷。 說明:將P1.0(PCA模塊1的外部輸入)擴展為上升沿/下降沿都可觸發的外部中斷,當中 斷產生時對P0.0取反,將P1.1(PCA模塊0的外部輸入)擴展為下降沿觸發的外部中斷,當 中斷產生時對P0.1 取反,將P3.7(PCA模塊2的外部輸入)擴展為上升沿/下降沿都可觸發 的外部中斷,當中斷產生時對P0.3 取反, P0.0 、P0.1和P0.2連接LED燈指示狀態。

#include "STC15W4K.H" // 包含STC15W4K寄存器定義文件
sbit
LED_PCA0=P0^1;


//
PCA0對應P1.1腳
sbit
LED_PCA1=P0^0;


//
PCA1對應P1.0腳
sbit void
LED_PCA2=P0^2;
main (void)


//
PCA2對應P3.7腳
{





port_mode();
//
所有IO口設為準雙向弱上拉方式。
CMOD=0x80;
//
空閑模式下停止PCA 計數器工作


//
PCA 時鐘源為SYSclk /12,禁止PCA 計數器溢出時中斷
CCON=0;
//
清0 PCA計數器溢出中斷請求標志位CF
// CR = 0, 不允許PCA計數器計數;PCA各模塊中斷請求標志位CCFn清0
CL=0; // PCA 計數器清0
CH=0;
CCAPM0=0x11; // 設置PCA模塊0下降沿觸發捕捉功能 CCAPM1=0x31; // 設置PCA模塊1上升/下降沿均可觸發捕捉功能
CCAPM2=0x31; // 設置PCA模塊2上升/下降沿均可觸發捕捉功能 EA=1; // 開整個單片機所有中斷共享的總中斷控制位
CR=1; // 啟動 PCA 計數器(CH,CL)計數
while(1); // 等待中斷
}
void PCA(void) interrupt 7 // PCA中斷服務程序

{

if(CCF0) // PCA模塊0中斷服務程序

{

LED_PCA0=! LED_PCA0; // LED_PCA0取反,表示PCA模塊0發生了中斷

CCF0=0; // 清PCA模塊0中斷標志

}

else if(CCF1) // PCA模塊1中斷服務程序

{

LED_PCA1=!LED_PCA1; // LED_PCA1取反, 表示PCA模塊1發生了中斷

CCF1=0; // 清PCA模塊1中斷標志

}

else if(CCF2) // PCA模塊2中斷服務程序

{

LED_PCA2=!LED_PCA2; // LED_PCA2取反, 表示PCA模塊2發生了中斷

CCF2=0; // 清PCA模塊2中斷標志

}

}

2 16位定時器模式

16位定時器模式的結構如圖8-3所示,定時精度與16位自動重裝的通用定時器相 同,但為了得到需要的輸出頻率,通常要在中斷函數中修改CCAPnH、CCAPnL遞 增步長值,并且必須讓CPU反復中斷,使用不如通用定時器方便。


通過置位寄存器CCAPMn的ECOMn和MATn位,可使PCA模塊用作定時器,為了得到需要的輸

出頻率,通常要在中斷函數中修改CCAPnH、CCAPnL遞增步長值,因此需要置位ECCFn打開 中斷。PCA計數器[CH,CL]每隔一定時間自動加1,時間間隔取決于選擇的時鐘源。例如, 當選擇的時鐘源為SYSclk/12時,每12個時鐘周期[CH,CL]加1,當[CH,CL]增加到等于捕 捉/比較寄存器[CCAPnH,CCAPnL] 的值時,CCFn=1,產生中斷請求,如果每次PCA模塊中 斷后,在中斷服務程序中給[CCAPnH,CCAPnL]增加一個相同的數值,那么下一次中斷來臨 的間隔時間T也是相同的,從而實現了定時功能,PCA計數器計數值與定時時間的計算公 式如下:

PCA計數器計數值(CCAPnH、CCAPnL設置值或遞增步長值)= 定時時間/計數脈沖周期

= 定時時間*計數脈沖頻率 假設,系統時鐘頻率SYSclk = 22.1184MHz,選擇的時鐘源為SYSclk/12,定時時間T為

5ms,則PCA計數器計數值為:T*(SYSclk/12)= 0.005*22118400/12=9216 = 2400H,也 就是說,PCA 計數器計數2400H次,定時時間就是5ms,這也就是每次給[CCAPnH,CCAPnL] 增加的數值(步長)。

3 高速輸出模式
高速輸出模式的結構如圖8-5所示,原理與16位定時器模式幾乎完全相同。
當PCA計數器CH、CL的值與模塊捕捉/比較寄存器CCAPnH、CCAPnL的值相等時,PCA模塊的輸

出引腳CCPn將發生翻轉,要激活高速輸出模式,CCAPMn寄存器的ECOMn、MATn、TOGn位必須 都置位,為了得到需要的輸出頻率,需要在中斷函數中修改CCAPnH、CCAPnL遞增步長值, 因此需要置位ECCFn打開中斷。

PCA計數器計數值(CCAPnH、CCAPnL設置值或遞增步長值)= 定時時間/計數脈沖周期

= 定時時間×計數脈沖頻率 = ((1/Fout)/2)×計數脈沖頻率 = 計數脈沖頻率/(2×Fout) 其中Fout表示PCA模塊n輸出時鐘頻率。比如系統時鐘頻率SYSclk = 22.1184MHz,選擇的時 鐘源是SYSclk/2時,要求在CCPn引腳輸出100KHz的方波,CCAPnH_CCAPnL遞增步長值 = (22118400/2)/(2×100000)=55.296,四舍五入取整得55,即十六進制37H。

4 脈寬調節模式

PWM意為脈沖寬度調制,可用于調整輸出直流平均電壓,對于矩形波而言,輸出平均壓等 于峰值電壓×占空比,占空比是一個脈沖周期內高電平時間與周期的比值,例如,峰值電 壓等于5V,占空比等于50%的方波信號平均電壓等于2.5V,也就是萬用表直流檔測量得到 的電壓值,8位PWM模式結構如圖所示, PWM輸出不需要使用中斷。

定時器CL確定輸出頻率

要使能PWM模式,模塊CCAPMn寄存器的ECOMn和PWMn位必須置位。

{0,CL[7:0]}與[EPCnL,CCAPnL[7:0]]進行比較,當{0,CL[7:0]}中的值小于

{EPCnL,CCAPnL[7:0]}時,輸出為低,當{0,CL[7:0]}中的值等于或大于

{EPCnL,CCAPnL[7:0]}時,輸出為高,當EPCnL=0且CCAPnL=00H時,PWM固定輸出高,當 EPCnL=1且CCAPnL=FFH 時,PWM固定輸出低。

PCA時鐘輸入源可以從以下8種中選擇一種:SYSclk/12、SYSclk /8、SYSclk /6、 SYSclk /4、SYSclk /2、SYSclk、定時器0的溢出、ECI/P1.2輸入。

PWM輸出占空比由{EPCnL,CCAPnL[7:0]}確定。

8位PWM的周期 = 計數脈沖周期×256

8位PWM的頻率 = 計數脈沖頻率/256

8位PWM的脈寬時間(高電平時間)= 計數脈沖周期×(256-CCAPnL)

8位PWM的占空比 = 脈寬時間/PWM周期 = (1- CCAPnL/256) ×100% 如果要實現給定頻率的PWM輸出,可選擇定時器0的溢出作為PCA的時鐘輸入源。當某個 I/O 口作為PWM使用時,該口自動切換到強推挽輸出模式。


例8.5 利用PCA 模塊實現占空比固定的PWM輸出。

說明:利用PCA模塊0實現在P1.1輸出占空比固定的PWM信號,假設R/C時鐘頻率Fosc = 22.1184MHz。

#include "STC15W4K.H" // 包含STC15W4K寄存器定義文件

void initPWM()

{

CMOD=0x80; // #10000000B 空閑模式下停止PCA計數器工作

// 選擇PCA時鐘源為Fosc/12,禁止PCA計數器溢出時中斷 CCAPM0=0x42; // 設置PCA模塊為PWM輸出方式。

CR=1; // PCA計數器開始運行

}

void main()

{

initPWM();

CCAP0H=0x20; // 脈寬控制

while(1); // 讓程序停在這里。

}

實驗結果:用萬用表測量P1.1輸出頻率為7.210KHz,占空比為87.5%。理論計算P1.1頻率=計數脈沖 頻率/256 = 22118400/12/256=7.2 KHz,占空比=(1- CCAPnL/256) ×100%=(1-32/256)
×100%=87.5%。可見理論計算與實際結果是一致的。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:343779 發表于 2019-4-15 13:13 | 只看該作者
急需的好資料
回復

使用道具 舉報

板凳
ID:564631 發表于 2019-6-22 16:46 | 只看該作者
好資料
回復

使用道具 舉報

地板
ID:585311 發表于 2019-7-24 19:44 | 只看該作者
好資料
回復

使用道具 舉報

5#
ID:427492 發表于 2019-9-8 17:29 | 只看該作者
好資料
回復

使用道具 舉報

6#
ID:334047 發表于 2019-12-9 08:02 | 只看該作者
真是好資料呀!
回復

使用道具 舉報

7#
ID:333807 發表于 2020-2-19 16:32 | 只看該作者
高手啊,學習了了啊
回復

使用道具 舉報

8#
ID:369562 發表于 2020-4-14 19:16 | 只看該作者
謝謝 來試試
回復

使用道具 舉報

9#
ID:1071848 發表于 2023-4-15 18:05 | 只看該作者
我正想要好資料!!!
回復

使用道具 舉報

10#
ID:1114453 發表于 2024-3-27 16:50 | 只看該作者
太救急了!!!過幾天筆試這里看書真沒看明白
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产福利资源 | 亚洲精色 | a视频在线播放 | 午夜精品久久久久久久星辰影院 | 91视频88av| 91精品国产色综合久久不卡98 | 小h片免费观看久久久久 | 蜜月va乱码一区二区三区 | 欧美日一区二区 | 国产一级片免费看 | 成人国产一区二区三区精品麻豆 | 亚洲精品福利视频 | 精品一区在线看 | 久久久精品一区二区三区 | 天堂中文资源在线 | 亚洲福利av | 瑞克和莫蒂第五季在线观看 | 免费在线毛片 | 精品欧美乱码久久久久久1区2区 | 九九九久久国产免费 | 精产嫩模国品一二三区 | 色必久久 | 欧美日韩免费在线 | aaaa网站 | 亚洲欧美视频一区二区 | 亚洲国产成人久久综合一区,久久久国产99 | 精品成人佐山爱一区二区 | 欧美日韩在线一区二区三区 | 久久亚洲综合 | 2021狠狠干 | 亚洲国产伊人 | 午夜精品一区二区三区免费视频 | 免费a网站| www.日本国产 | 国产精品久久久久久久久免费软件 | 国产999精品久久久 午夜天堂精品久久久久 | 婷婷色国产偷v国产偷v小说 | 日本五月婷婷 | 中文字幕在线观看一区二区 | 狠狠干2020 | 91成人精品视频 |