導航:首頁 > 操作系統 > STC8單片機pwm歷程

STC8單片機pwm歷程

發布時間:2022-05-26 12:53:52

1. stc8hpwm如何選對應的io口


有個項目需要PWM輸出,使用的是TIM2_CH2,請問將此引腳配置為PWM輸出時 ,對應引腳的IO口寄存器是否需要配置為推挽輸出模式。
現在的程序是引腳配置為PWM模式,但是對應IO口引腳寄存器配置使用的是默認:輸入模式,現在產品也能正常工作,已經出貨幾千套,但是到了客戶那裡總是反應沒有PWM輸出,但是在生產線和客戶生產線測試時都沒有出現過這個問題。一直找不到原因。
今天專門網上查詢PWM相關常式,發現有的常式是有將PWM引腳對應的IO口寄存器配置為推挽輸出模式的,有的常式卻沒有,請問,如果沒有強制設置為推挽輸出模式,是否會出現PWM沒有輸出的可能。
使用環境是IAR 2.10.4 寄存器控制,

2. STC單片機輸出PWM信號,頻率要25KHz,請大神指教,怎麼實現,或者直接給我一個程序,謝謝!

void PWM_init (void){//PWM初始化函數
CMOD=0x02; //設置PCA定時器,計數頻率為晶振頻率/2 當為12Mhz時,PWM輸出頻率約23.4Khz
//CMOD=0x00; //設置PCA定時器,計數頻率為晶振頻率/12 當為12Mhz時,PWM輸出頻率約3.9Khz
//CMOD=0x04; //設置PCA定時器,計數頻率為定時器0的溢出率,如果讓定時器0設為16位計數模式,其溢出頻率可以在很大范圍內調節,從而以產生很高或很低的PWM頻率
CL=0x00;
CH=0x00;
CCAPM1=0x42; //PWM1設置PCA工作方式為PWM方式(0100 0010)
CCAP1L=0x00; //設置PWM1初始值與CCAP0H相同
CCAP1H=0x00; // PWM1初始時為0
CR=1; //啟動PCA定時器
}
實際上要產生低頻率的PWM波,不用其硬體PWM功能完全可以
用定時器中斷方式即可實現
讓定時器 200us中斷一次(中斷不算頻繁呀) ,設一變數a,每次中斷a加1,100次就是20ms,,另設一變數b,數值在1-100之間,每次中斷比較a和 b的大小,如果a<b,則引腳 輸出高電平,否則為低電平,這樣通過改變b的值,就可實現頻率為50HZ,占空比1-100%可調的PWM方波

3. sTc8 pwm調光程序怎麼寫

下面這個程序是應用在stc上的pwm程序,測試成功
#includesfr CCON =0xD8; //PCA control register
sfr CMOD =0xD9;
sfr CL =0xe9;
sfr CH =0xF9;
sfr CCAP0L=0xea;
sfr CCAP1L=0xeb;
sfr CCAP0H=0xfa;
sfr CCAP1H=0xfb;
sfr CCAPM0=0xda;
sfr CCAPM1=0xdb;

sbit CR=0xde; //位定址

void main(void)
{
CMOD=0x02; //使用系統時鍾,時鍾輸入源頻率fosc/2。PWM頻率=fosc/2/256
/************************************
7 6 5 4 3 2 1 0
CIDL - - - cps2 CPS1 CPS0 ECF

CIDL: =0時,空閑模式下PCA計數器繼續工作;=1時,空閑模式下PCA計數器停止工作。
CPS2,CPS1,CPS0:PCA計數脈沖選擇。010,定時器0的溢出,可以實現可調頻率的PWM輸出。
ECF: =1時,使能寄存器CCON CF位的中斷;=0時,禁止該功能。
***************************************/
CL=0x00;
CH=0x00;
CCAP0L=0xc0; //當CL小於CCAP0L時,輸出為低;大於時,輸出為高。
CCAP0H=0x7f; //當CL由ff變為00溢出時,CCAP0H裝載到CCAP0L中,實現無干擾的更新PWM。
CCAP1L=0xc0; //當CL小於CCAP1L時,輸出為低;大於時,輸出為高。
CCAP1H=0xc0; //當CL由ff變為00溢出時,CCAP1H裝載到CCAP1L中,實現無干擾的更新PWM。
CCAPM0=0X42; //使能PWM模式,PWM0=1,ECOM0=1
CCAPM1=0X42; //使能PWM模式,PWM1=1,ECOM1=1
CR=1; //啟動PCA計數器
while(1)
{
CCAP0H=RF4432_TxRxBuf[4]; //此處改變占空比
CCAP1H=RF4432_TxRxBuf[5];
CCAP2H=RF4432_TxRxBuf[6]/2.5;
};
}

4. stc單片機產生pwm波這個程序看不懂求講解,最好能一句一句解釋,編程也不太懂回答的好還有追加獎勵

對於每個人的努力來說,奇跡不可能不會發生

5. STC單片機使用定時器進行PWM調速

STC單片機 使用PWM功能,有PWM專用定時器,和定時器 T0 與 T1 無關。
STC單片機 的 數據手冊 上有 PWM 常式,有C 語言的,也有匯編語言的,】
可以上官網下載 個 相關 單片機的 數據手冊 看看。

6. stc單片機產生pwm,這有一個程序,有人能詳細解釋下它怎麼產生pwm波嗎,能逐句詳解嗎

哥們,這個已經很詳細了;
大概說說吧,PWM[54]是定義的一組PWM脈寬輸出數組,PWM脈寬輸出是0-255;0的時候脈寬輸出最大,255的時候脈寬輸出最小;
然後那個初始化PCA,初始化定時器0就不說了,你自己下一個手冊看下就明白;
然後是中斷,每中斷一次index加1,然後判斷index是不是等於54,意思就是PWM[54]整個數組裡面的PWM是不是都送了一次CCAP寄存器;如果都數組都送了一次,將index置零,從頭開始送;標志位取反,如果標志位zf=1,讓P14輸出PWM,P13關閉;,如果zf=0,讓P13輸出PWM,P14關閉;if(zf==0)後面的語句就是讓PWM[54]中的每一個數都送CCAP寄存器一次;

其實按這個程序注釋的話,他本意是PWM波形從小變大P14輸出,PWM波形有大變小P13輸出;但是這個程序的實際效果是P14由小變大再由大變小。然後P14關閉,P13由小變大再由大變小
如此循環;

你最關心的PWM怎麼輸出:就是這兩個語句,CCAP0H=pwm[index]; CCAP1H=pwm[index]; index每中斷一次加1,那麼index是由0加到54,假如說index=0 ,那麼CCAP0H=pwm[0]; ,pwm[0]對應數字裡面的255,寄存器CCAP0H=255;這個寄存器等於255,PWM輸出就是一個小脈寬;下一次中斷CCAP0H=240了,脈寬有增加了一點;至於CCAP0H送一個數據就有脈寬輸出,這個是由單片機硬體本身決定的;你看看手冊就知道了;
這個已經說得很明白了吧;累死,打字都打了20分鍾;

7. STC單片機PWM編程!

看看這個,單片機用的是ADUC848,AD轉換輸出正弦波,和PWM原理類似。

2、源程序清單

DACCONEQU0xfD;定義模數轉換控制器

DACHEQU0xfc;定義模數轉換數據寄存器高8位

DACLEQU0xfb;定義模數轉換數據寄存器低8位

ORG0000H

LJMPMAIN

ORG0200H

MAIN:MOVDACCON,#0fH;DACoperation

CLRA;

MOVDACH,A;模數轉換高八位清零

PRG3:MOVR0,#09H;正弦波

MOVR4,#40H

LP11:MOVA,R0

MOVCA,@A+PC

MOVDACL,A;2

ACALLDELAY;2

INCR0;1

DJNZR4,LP11;2

SJMPPRG3;2

DATA0:

DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH

DB0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H

DB0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH

DB80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H

DB0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H

DB1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

RET

DELAY:MOVR6,#10H

MOVR7,#0A1H

DELAYLOOP:;延時程序

DJNZR6,DELAYLOOP

DJNZR7,DELAYLOOP

RET

四、實驗板插針配置:

無需插針配置,注意DAC是從CONDACOUT1端子輸出,可用示波器觀察DAC輸出波形。若產生失真情況,請檢查開發板DA輸出端LM358運算放大器的放大倍數,適當更改所查函數表的范圍。

五、思考題

1、改變程序,使能添加輸出鋸齒波;

2、改變程序,使輸出添加三角波;

3、改變程序,使輸出添加方波;

4、改變程序,並製作一個簡單的函數發生器

8. 單片機PWM程序是怎麼編寫的啊,能給一個簡單的例子嗎

有PWM功能的單片機入STC12系列單片機,直接給專用寄存器賦值開啟相應定時器就可以了。普通單單片機,PWM需要用自己來調配。比如:
#include<reg51.h>
unsigned char pwhh,pwhl,pwlh,pwll;
bit flag;
sbit pwm=P1^0;
void t0isr() interrupt 1
{
if(flag)
{
TH0=pwhh;
TL0=pwhl;
}
else
{
TH0=pwlh;
TL0=pwll;
}
pwm=~pwm;
}
main()
{
TMOD=0x01;
pwhh=(65536-1000)/256;
pwhl=(65536-1000)%256;
pwlh=(65536-500)/256;
pwll=(65536-500)%256;
TH0=pwhh;
L0=pwhl;
TR0=1;
ET0=1;
EA=1;
while(1);
}

9. stc8系列單片機有PCA模塊設置PWM工作模式時,與PWM相關的IO口還需要定義嗎

stc12c5a60s2單片機 的 PCA 定時器 PWM 發生器,與 T0 T1 定時器 無關,相互是獨立的
使用 PWM 發生器。 不會影響 T0 T1 的使用,進不了中斷 應該 是 定時器 設置有問題,
檢查一下 程序吧。

閱讀全文

與STC8單片機pwm歷程相關的資料

熱點內容
兩個數字的加減乘除運算編程 瀏覽:221
給手機加密碼忘記了怎麼辦 瀏覽:596
單片機運算符 瀏覽:292
移動端微信商城源碼 瀏覽:442
編程貓下一個背景在哪裡 瀏覽:356
javaclasstype 瀏覽:237
樂高編程和樂高課的延伸 瀏覽:354
蘋果手機怎麼切換app美國賬號 瀏覽:865
編譯程序輸入一個字元串 瀏覽:407
圓命令畫法 瀏覽:308
如果給電腦e盤文件加密 瀏覽:802
javaswing項目 瀏覽:778
androidsdksetup 瀏覽:1005
pdf怎麼設置中文 瀏覽:128
安卓手機用什麼軟體看倫敦金 瀏覽:966
魅族文件夾無名稱 瀏覽:792
蘇黎世無人機演算法 瀏覽:876
核桃編程和小碼王的融資 瀏覽:686
微積分教材pdf 瀏覽:728
寫python給微信好友發消息 瀏覽:340