我用AT89C51來產(chǎn)生PWM……麻煩了,做不出來
求助!!!!
謝謝
我用AT89C51來產(chǎn)生PWM……麻煩了,做不出來
全部回復(fù)(40)
正序查看
倒序查看
理論可以,不過標(biāo)準(zhǔn)51的話1us為最小指令周期-》1M,去掉中斷響應(yīng):至少一個周期吧第一個長跳轉(zhuǎn):好像是3個周期?push 若干個查表(計(jì)算)若干個賦值若干個pop XX 若干個最后中斷返回:1個還是兩個?如果還要求是中心對齊的PWM,能產(chǎn)生10K的PWM都勉強(qiáng),像你說的:你有麻煩了,如果你再用C而不是匯編 ^_^ 你有麻煩了.這還有分辨率的事沒說呢!此路不通! 有一次逼得我就在T2中斷入口后面直接寫-沒長跳轉(zhuǎn),節(jié)省3個周期,不過是我錯了,因?yàn)槭强梢杂贸J熳詣友b載的.用DSP吧,不過我現(xiàn)在還不會.2407大約就幾十K,所以現(xiàn)在出28XX了.數(shù)字電路的晶體頻率聽起來很嚇人,一算下來:我有麻煩了.
0
回復(fù)
@qihao
理論可以,不過標(biāo)準(zhǔn)51的話1us為最小指令周期-》1M,去掉中斷響應(yīng):至少一個周期吧第一個長跳轉(zhuǎn):好像是3個周期?push 若干個查表(計(jì)算)若干個賦值若干個pop XX 若干個最后中斷返回:1個還是兩個?如果還要求是中心對齊的PWM,能產(chǎn)生10K的PWM都勉強(qiáng),像你說的:你有麻煩了,如果你再用C而不是匯編 ^_^ 你有麻煩了.這還有分辨率的事沒說呢!此路不通! 有一次逼得我就在T2中斷入口后面直接寫-沒長跳轉(zhuǎn),節(jié)省3個周期,不過是我錯了,因?yàn)槭强梢杂贸J熳詣友b載的.用DSP吧,不過我現(xiàn)在還不會.2407大約就幾十K,所以現(xiàn)在出28XX了.數(shù)字電路的晶體頻率聽起來很嚇人,一算下來:我有麻煩了.
聽到你說“此路不通”好傷心啊……
不過現(xiàn)在就是用標(biāo)準(zhǔn)51,匯編語言編程.
如果分辨率可調(diào)整的話,那你覺得要考慮哪些問題呢?
我現(xiàn)在是要它行的通……只是我還行不通
不過現(xiàn)在就是用標(biāo)準(zhǔn)51,匯編語言編程.
如果分辨率可調(diào)整的話,那你覺得要考慮哪些問題呢?
我現(xiàn)在是要它行的通……只是我還行不通
0
回復(fù)
@qiuyy
這個應(yīng)該是可以做的吧.你首先要定義兩個變量:一個是叫周期T,另一外一個占空比D.T的值要大于D,首先讓I/O口輸出高電平,讓T,D同進(jìn)計(jì)數(shù),當(dāng)D已經(jīng)到了預(yù)計(jì)值的時候,則I/0變?yōu)榈?然后低電平一直延續(xù)到T的值.當(dāng)T的值到的時候,I/O口拉高.改變D,T的時間可以控制頻率,改變D的值可以達(dá)到占空比的變化.這個思路很重要.這種算法要用到定時器,只要單片機(jī)時鐘頻率足夠高,可以任意改變PWM的頻率.
TO qinuyy: 現(xiàn)在我是要用MCS-5系列單片機(jī),軟件編程實(shí)現(xiàn)脈寬調(diào)制PWM的正弦波,然后根據(jù)串行口的高、低電平產(chǎn)生頻移鍵控信號并發(fā)送,最終實(shí)現(xiàn)CPFSK的調(diào)制...
如你所說,我必須選擇帶有AD轉(zhuǎn)換,PWM模塊的51系列芯片,要不沒有辦法檢測電壓電流……這里我有點(diǎn)不懂...請指教!!!
謝謝!!!
如你所說,我必須選擇帶有AD轉(zhuǎn)換,PWM模塊的51系列芯片,要不沒有辦法檢測電壓電流……這里我有點(diǎn)不懂...請指教!!!
謝謝!!!
0
回復(fù)
@清泉石上流
TOqinuyy:現(xiàn)在我是要用MCS-5系列單片機(jī),軟件編程實(shí)現(xiàn)脈寬調(diào)制PWM的正弦波,然后根據(jù)串行口的高、低電平產(chǎn)生頻移鍵控信號并發(fā)送,最終實(shí)現(xiàn)CPFSK的調(diào)制... 如你所說,我必須選擇帶有AD轉(zhuǎn)換,PWM模塊的51系列芯片,要不沒有辦法檢測電壓電流……這里我有點(diǎn)不懂...請指教!!! 謝謝!!!
"頻移鍵控信號" 是什么樣的信號,說來聽聽,我也感興趣,大家來評估一下實(shí)現(xiàn)方法.如果不是用來做開關(guān)電源,也許行,我以為你是說做開關(guān)電源呢
0
回復(fù)
@qihao
"頻移鍵控信號"是什么樣的信號,說來聽聽,我也感興趣,大家來評估一下實(shí)現(xiàn)方法.如果不是用來做開關(guān)電源,也許行,我以為你是說做開關(guān)電源呢
二進(jìn)制數(shù)字頻率調(diào)制(2FSK)是利用二進(jìn)制數(shù)字基帶信號控制載波的頻率進(jìn)行頻譜變換的過程.在發(fā)送端,產(chǎn)生不同頻率的載波振蕩來傳輸數(shù)字信息“1”或“0”,在接收端,不不同頻率的載波振蕩還原成響應(yīng)的數(shù)字基帶信號.FSK有相位連續(xù)(CPFSK)和相位不連續(xù)(DPFSK)之分.
在這里所說的CPFSK,就是相位連續(xù)的頻移鍵控調(diào)制.
現(xiàn)在就是計(jì)劃用MCS51系列單片機(jī)來產(chǎn)生一路PWM信號(或者兩路),不是用來做開關(guān)電源的..
請問有什么可行的辦法?
我還沒有做出來..
謝謝!
在這里所說的CPFSK,就是相位連續(xù)的頻移鍵控調(diào)制.
現(xiàn)在就是計(jì)劃用MCS51系列單片機(jī)來產(chǎn)生一路PWM信號(或者兩路),不是用來做開關(guān)電源的..
請問有什么可行的辦法?
我還沒有做出來..
謝謝!
0
回復(fù)
@清泉石上流
二進(jìn)制數(shù)字頻率調(diào)制(2FSK)是利用二進(jìn)制數(shù)字基帶信號控制載波的頻率進(jìn)行頻譜變換的過程.在發(fā)送端,產(chǎn)生不同頻率的載波振蕩來傳輸數(shù)字信息“1”或“0”,在接收端,不不同頻率的載波振蕩還原成響應(yīng)的數(shù)字基帶信號.FSK有相位連續(xù)(CPFSK)和相位不連續(xù)(DPFSK)之分. 在這里所說的CPFSK,就是相位連續(xù)的頻移鍵控調(diào)制. 現(xiàn)在就是計(jì)劃用MCS51系列單片機(jī)來產(chǎn)生一路PWM信號(或者兩路),不是用來做開關(guān)電源的.. 請問有什么可行的辦法? 我還沒有做出來.. 謝謝!
俺講得這么詳細(xì),還是做不出來??
0
回復(fù)
@清泉石上流
二進(jìn)制數(shù)字頻率調(diào)制(2FSK)是利用二進(jìn)制數(shù)字基帶信號控制載波的頻率進(jìn)行頻譜變換的過程.在發(fā)送端,產(chǎn)生不同頻率的載波振蕩來傳輸數(shù)字信息“1”或“0”,在接收端,不不同頻率的載波振蕩還原成響應(yīng)的數(shù)字基帶信號.FSK有相位連續(xù)(CPFSK)和相位不連續(xù)(DPFSK)之分. 在這里所說的CPFSK,就是相位連續(xù)的頻移鍵控調(diào)制. 現(xiàn)在就是計(jì)劃用MCS51系列單片機(jī)來產(chǎn)生一路PWM信號(或者兩路),不是用來做開關(guān)電源的.. 請問有什么可行的辦法? 我還沒有做出來.. 謝謝!
用LPC900系列的單片機(jī),本身就帶PWM
0
回復(fù)
@清泉石上流
二進(jìn)制數(shù)字頻率調(diào)制(2FSK)是利用二進(jìn)制數(shù)字基帶信號控制載波的頻率進(jìn)行頻譜變換的過程.在發(fā)送端,產(chǎn)生不同頻率的載波振蕩來傳輸數(shù)字信息“1”或“0”,在接收端,不不同頻率的載波振蕩還原成響應(yīng)的數(shù)字基帶信號.FSK有相位連續(xù)(CPFSK)和相位不連續(xù)(DPFSK)之分. 在這里所說的CPFSK,就是相位連續(xù)的頻移鍵控調(diào)制. 現(xiàn)在就是計(jì)劃用MCS51系列單片機(jī)來產(chǎn)生一路PWM信號(或者兩路),不是用來做開關(guān)電源的.. 請問有什么可行的辦法? 我還沒有做出來.. 謝謝!
是不是就是調(diào)頻信號:一個頻率表示1,一個表示0?
哪就是可以用常數(shù)自動裝載,AT的T2可以的,這個時atmel擴(kuò)展的標(biāo)準(zhǔn)51功能,以前我用來發(fā)生紅外調(diào)制基波,估計(jì)能是你說的那樣.記住:常數(shù)自動裝載,CPU設(shè)定一次后無需再干預(yù)
不過解調(diào)呢? 測脈寬來解調(diào)?忘了當(dāng)時咋做的
哪就是可以用常數(shù)自動裝載,AT的T2可以的,這個時atmel擴(kuò)展的標(biāo)準(zhǔn)51功能,以前我用來發(fā)生紅外調(diào)制基波,估計(jì)能是你說的那樣.記住:常數(shù)自動裝載,CPU設(shè)定一次后無需再干預(yù)
不過解調(diào)呢? 測脈寬來解調(diào)?忘了當(dāng)時咋做的
0
回復(fù)
@清泉石上流
TOqinuyy:現(xiàn)在我是要用MCS-5系列單片機(jī),軟件編程實(shí)現(xiàn)脈寬調(diào)制PWM的正弦波,然后根據(jù)串行口的高、低電平產(chǎn)生頻移鍵控信號并發(fā)送,最終實(shí)現(xiàn)CPFSK的調(diào)制... 如你所說,我必須選擇帶有AD轉(zhuǎn)換,PWM模塊的51系列芯片,要不沒有辦法檢測電壓電流……這里我有點(diǎn)不懂...請指教!!! 謝謝!!!
其實(shí)搭兩個方波振蕩,用串口數(shù)據(jù)直接控制一個電子開關(guān)呢?發(fā)送CPU就免干預(yù)了,只要做解調(diào)工作
0
回復(fù)
@qiuyy
這個應(yīng)該是可以做的吧.你首先要定義兩個變量:一個是叫周期T,另一外一個占空比D.T的值要大于D,首先讓I/O口輸出高電平,讓T,D同進(jìn)計(jì)數(shù),當(dāng)D已經(jīng)到了預(yù)計(jì)值的時候,則I/0變?yōu)榈?然后低電平一直延續(xù)到T的值.當(dāng)T的值到的時候,I/O口拉高.改變D,T的時間可以控制頻率,改變D的值可以達(dá)到占空比的變化.這個思路很重要.這種算法要用到定時器,只要單片機(jī)時鐘頻率足夠高,可以任意改變PWM的頻率.
看來你是高手.我從來沒有做個單片機(jī)電源.想請教一個問題.
有一個輸出電壓信號,轉(zhuǎn)換成數(shù)字信號后,怎么控制占空比D?
有一個輸出電壓信號,轉(zhuǎn)換成數(shù)字信號后,怎么控制占空比D?
0
回復(fù)
@qihao
其實(shí)搭兩個方波振蕩,用串口數(shù)據(jù)直接控制一個電子開關(guān)呢?發(fā)送CPU就免干預(yù)了,只要做解調(diào)工作
TO qiuyy:
如你所說,就是用中斷的方式來實(shí)現(xiàn)吧.如果是采用查表的方式的實(shí)現(xiàn),會不會很麻煩?
500) {this.resized=true; this.width=500; this.alt='這是一張縮略圖,點(diǎn)擊可放大。\n按住CTRL,滾動鼠標(biāo)滾輪可自由縮放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/28/1112967578.gif');}" onmousewheel="return imgzoom(this);">
正弦波PWM調(diào)制就是使調(diào)制出的波形盡可能接近正弦波.象上圖的那樣,在調(diào)制過程中使每個時段內(nèi)上下圖對應(yīng)的陰影部分面積相等.由于正弦波是對稱的,那就要求時段的分割數(shù)是偶數(shù).如果采取這種方式的話,那是不是要用查詢的方式來完成?這樣的話,那不是要占用大量的內(nèi)存來存放數(shù)據(jù)嗎?就假設(shè)單片機(jī)的時鐘頻率為12MHz,調(diào)制時段數(shù)分到52的話……
能說說各自的出發(fā)點(diǎn)所在嗎?
謝謝!
如你所說,就是用中斷的方式來實(shí)現(xiàn)吧.如果是采用查表的方式的實(shí)現(xiàn),會不會很麻煩?

正弦波PWM調(diào)制就是使調(diào)制出的波形盡可能接近正弦波.象上圖的那樣,在調(diào)制過程中使每個時段內(nèi)上下圖對應(yīng)的陰影部分面積相等.由于正弦波是對稱的,那就要求時段的分割數(shù)是偶數(shù).如果采取這種方式的話,那是不是要用查詢的方式來完成?這樣的話,那不是要占用大量的內(nèi)存來存放數(shù)據(jù)嗎?就假設(shè)單片機(jī)的時鐘頻率為12MHz,調(diào)制時段數(shù)分到52的話……
能說說各自的出發(fā)點(diǎn)所在嗎?
謝謝!
0
回復(fù)
@清泉石上流
TO qiuyy: 如你所說,就是用中斷的方式來實(shí)現(xiàn)吧.如果是采用查表的方式的實(shí)現(xiàn),會不會很麻煩? [圖片]500){this.resized=true;this.width=500;this.alt='這是一張縮略圖,點(diǎn)擊可放大。\n按住CTRL,滾動鼠標(biāo)滾輪可自由縮放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/28/1112967578.gif');}"onmousewheel="returnimgzoom(this);"> 正弦波PWM調(diào)制就是使調(diào)制出的波形盡可能接近正弦波.象上圖的那樣,在調(diào)制過程中使每個時段內(nèi)上下圖對應(yīng)的陰影部分面積相等.由于正弦波是對稱的,那就要求時段的分割數(shù)是偶數(shù).如果采取這種方式的話,那是不是要用查詢的方式來完成?這樣的話,那不是要占用大量的內(nèi)存來存放數(shù)據(jù)嗎?就假設(shè)單片機(jī)的時鐘頻率為12MHz,調(diào)制時段數(shù)分到52的話…… 能說說各自的出發(fā)點(diǎn)所在嗎? 謝謝!
你把要調(diào)制的數(shù)據(jù)變成表格也可以的.首先你要明白什么是PWM,好好地分析D(占空比)和T(周期)的關(guān)系.再構(gòu)思一下.這個算法也是我以前想出來的.當(dāng)然如果你要用程序做成正弦的話,你可以選用DA轉(zhuǎn)換,這也個也不難做.
0
回復(fù)
@grtang
thankyourhelp.
TO qiuyy:
謝謝您!我明白您的意思.
假設(shè)MCS51的串行數(shù)據(jù)速率I(由軟件設(shè)置,硬件自動產(chǎn)生MOV SCON ****),數(shù)據(jù)電平“1”的調(diào)制頻率為f1,數(shù)據(jù)電平“0”的調(diào)制頻率為f0,通過軟件檢測MCS51的串行數(shù)據(jù)輸出端口TXD對數(shù)據(jù)進(jìn)行調(diào)制.
首先讓I/O口(如P1.3)輸出高電平,然后檢測TXD.當(dāng)TXD輸出為“1”時,進(jìn)行頻率為f1的調(diào)制;當(dāng)TXD輸出為“0”時,進(jìn)行頻率為f0的調(diào)制.接著讓I/O口(如P1.3)輸出低電平,并檢測TXD,重復(fù)上面的步驟.這樣的話,要實(shí)現(xiàn)PWM輸出,還是用中斷來實(shí)現(xiàn)嗎?
你所說的占空比和數(shù)據(jù)電平的調(diào)制頻率f0、f1有什么必然的聯(lián)系?
PWM輸出后經(jīng)穩(wěn)壓、濾波,就可得到經(jīng)過調(diào)制的相位連續(xù)正弦波.
謝謝您!我明白您的意思.
假設(shè)MCS51的串行數(shù)據(jù)速率I(由軟件設(shè)置,硬件自動產(chǎn)生MOV SCON ****),數(shù)據(jù)電平“1”的調(diào)制頻率為f1,數(shù)據(jù)電平“0”的調(diào)制頻率為f0,通過軟件檢測MCS51的串行數(shù)據(jù)輸出端口TXD對數(shù)據(jù)進(jìn)行調(diào)制.
首先讓I/O口(如P1.3)輸出高電平,然后檢測TXD.當(dāng)TXD輸出為“1”時,進(jìn)行頻率為f1的調(diào)制;當(dāng)TXD輸出為“0”時,進(jìn)行頻率為f0的調(diào)制.接著讓I/O口(如P1.3)輸出低電平,并檢測TXD,重復(fù)上面的步驟.這樣的話,要實(shí)現(xiàn)PWM輸出,還是用中斷來實(shí)現(xiàn)嗎?
你所說的占空比和數(shù)據(jù)電平的調(diào)制頻率f0、f1有什么必然的聯(lián)系?
PWM輸出后經(jīng)穩(wěn)壓、濾波,就可得到經(jīng)過調(diào)制的相位連續(xù)正弦波.
0
回復(fù)
@清泉石上流
TOqiuyy: 謝謝您!我明白您的意思. 假設(shè)MCS51的串行數(shù)據(jù)速率I(由軟件設(shè)置,硬件自動產(chǎn)生MOVSCON****),數(shù)據(jù)電平“1”的調(diào)制頻率為f1,數(shù)據(jù)電平“0”的調(diào)制頻率為f0,通過軟件檢測MCS51的串行數(shù)據(jù)輸出端口TXD對數(shù)據(jù)進(jìn)行調(diào)制. 首先讓I/O口(如P1.3)輸出高電平,然后檢測TXD.當(dāng)TXD輸出為“1”時,進(jìn)行頻率為f1的調(diào)制;當(dāng)TXD輸出為“0”時,進(jìn)行頻率為f0的調(diào)制.接著讓I/O口(如P1.3)輸出低電平,并檢測TXD,重復(fù)上面的步驟.這樣的話,要實(shí)現(xiàn)PWM輸出,還是用中斷來實(shí)現(xiàn)嗎? 你所說的占空比和數(shù)據(jù)電平的調(diào)制頻率f0、f1有什么必然的聯(lián)系? PWM輸出后經(jīng)穩(wěn)壓、濾波,就可得到經(jīng)過調(diào)制的相位連續(xù)正弦波.
的確有水平!
0
回復(fù)
@清泉石上流
TOqiuyy: 謝謝您!我明白您的意思. 假設(shè)MCS51的串行數(shù)據(jù)速率I(由軟件設(shè)置,硬件自動產(chǎn)生MOVSCON****),數(shù)據(jù)電平“1”的調(diào)制頻率為f1,數(shù)據(jù)電平“0”的調(diào)制頻率為f0,通過軟件檢測MCS51的串行數(shù)據(jù)輸出端口TXD對數(shù)據(jù)進(jìn)行調(diào)制. 首先讓I/O口(如P1.3)輸出高電平,然后檢測TXD.當(dāng)TXD輸出為“1”時,進(jìn)行頻率為f1的調(diào)制;當(dāng)TXD輸出為“0”時,進(jìn)行頻率為f0的調(diào)制.接著讓I/O口(如P1.3)輸出低電平,并檢測TXD,重復(fù)上面的步驟.這樣的話,要實(shí)現(xiàn)PWM輸出,還是用中斷來實(shí)現(xiàn)嗎? 你所說的占空比和數(shù)據(jù)電平的調(diào)制頻率f0、f1有什么必然的聯(lián)系? PWM輸出后經(jīng)穩(wěn)壓、濾波,就可得到經(jīng)過調(diào)制的相位連續(xù)正弦波.
it's also a good wayt to produce the PLUS Of PWM.But the F is limited!
0
回復(fù)
@qihao
理論可以,不過標(biāo)準(zhǔn)51的話1us為最小指令周期-》1M,去掉中斷響應(yīng):至少一個周期吧第一個長跳轉(zhuǎn):好像是3個周期?push 若干個查表(計(jì)算)若干個賦值若干個pop XX 若干個最后中斷返回:1個還是兩個?如果還要求是中心對齊的PWM,能產(chǎn)生10K的PWM都勉強(qiáng),像你說的:你有麻煩了,如果你再用C而不是匯編 ^_^ 你有麻煩了.這還有分辨率的事沒說呢!此路不通! 有一次逼得我就在T2中斷入口后面直接寫-沒長跳轉(zhuǎn),節(jié)省3個周期,不過是我錯了,因?yàn)槭强梢杂贸J熳詣友b載的.用DSP吧,不過我現(xiàn)在還不會.2407大約就幾十K,所以現(xiàn)在出28XX了.數(shù)字電路的晶體頻率聽起來很嚇人,一算下來:我有麻煩了.
用P4,大概就沒問題吧?
0
回復(fù)
@清泉石上流
limited? Howto increasetheF?byusinganotherone-chip?
TO qiuyy:您好!非常感謝您提供的思路!
●●可變脈寬PWM輸出
用T0定時器控制PWM的占空比,T1定時器控制脈寬(最大65536μs.)
T0、T1定時器設(shè)置成16位定時器.
程序清單:(12MHz)
PwmData0 ;T0定時t1的初值(字)
PwmData1 ;T1定時T的初值(字)
;***************************
setb tro ;啟動T0
setb tr1
……
T0Int:Clr tr0 ;T0中斷服務(wù)程序
setb p1.0 ;PWM輸出腳
reti
T1Int:Clr p1.0 ;T1中斷服務(wù)程序
Clr tr0
Clr tr1
Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
Mov TH1,High(PwmData1)
Mov TL1,Low(PwmData1)
Setb tr1
Setb tr0
reti
說明:在主程序中計(jì)算PwmData0、PwmData1的值.
我有一個疑問:利用單片機(jī)MCS51實(shí)現(xiàn)可變脈寬PWM輸出時,在主程序中計(jì)算PwmData0、PwmData1的值過程中,是采用查表的方式,還是動態(tài)計(jì)算呢?因?yàn)樵诿恳淮蜹1產(chǎn)生中斷后,T1所裝載的值都會改變,這樣,假如:
1)采用查表的方式,那么就必須在T1INT程序段中加入讀表、裝載指令.那么大量的數(shù)據(jù)表就會占用了大量的存儲單元,并且煩瑣容易弄錯.
2)采用動態(tài)計(jì)算,則需要在主程序中進(jìn)行算術(shù)運(yùn)算,并實(shí)現(xiàn)二進(jìn)制向十六進(jìn)制的轉(zhuǎn)換,然后再裝載進(jìn)T1中,也很煩瑣……
而且這樣的話,會不會有時間上的延時問題?
另外還問一個弱弱的問題:單片機(jī)的串行輸出口TXD能不能自動產(chǎn)生一系列的不規(guī)則的數(shù)字信號?應(yīng)該如何實(shí)現(xiàn)呢??
請指點(diǎn)!!!
●●可變脈寬PWM輸出
用T0定時器控制PWM的占空比,T1定時器控制脈寬(最大65536μs.)
T0、T1定時器設(shè)置成16位定時器.
程序清單:(12MHz)
PwmData0 ;T0定時t1的初值(字)
PwmData1 ;T1定時T的初值(字)
;***************************
setb tro ;啟動T0
setb tr1
……
T0Int:Clr tr0 ;T0中斷服務(wù)程序
setb p1.0 ;PWM輸出腳
reti
T1Int:Clr p1.0 ;T1中斷服務(wù)程序
Clr tr0
Clr tr1
Mov TH0,High(PwmData0)
Mov TL0,Low(PwmData0)
Mov TH1,High(PwmData1)
Mov TL1,Low(PwmData1)
Setb tr1
Setb tr0
reti
說明:在主程序中計(jì)算PwmData0、PwmData1的值.
我有一個疑問:利用單片機(jī)MCS51實(shí)現(xiàn)可變脈寬PWM輸出時,在主程序中計(jì)算PwmData0、PwmData1的值過程中,是采用查表的方式,還是動態(tài)計(jì)算呢?因?yàn)樵诿恳淮蜹1產(chǎn)生中斷后,T1所裝載的值都會改變,這樣,假如:
1)采用查表的方式,那么就必須在T1INT程序段中加入讀表、裝載指令.那么大量的數(shù)據(jù)表就會占用了大量的存儲單元,并且煩瑣容易弄錯.
2)采用動態(tài)計(jì)算,則需要在主程序中進(jìn)行算術(shù)運(yùn)算,并實(shí)現(xiàn)二進(jìn)制向十六進(jìn)制的轉(zhuǎn)換,然后再裝載進(jìn)T1中,也很煩瑣……
而且這樣的話,會不會有時間上的延時問題?
另外還問一個弱弱的問題:單片機(jī)的串行輸出口TXD能不能自動產(chǎn)生一系列的不規(guī)則的數(shù)字信號?應(yīng)該如何實(shí)現(xiàn)呢??
請指點(diǎn)!!!
0
回復(fù)
@清泉石上流
TOqiuyy:您好!非常感謝您提供的思路! ●●可變脈寬PWM輸出 用T0定時器控制PWM的占空比,T1定時器控制脈寬(最大65536μs.) T0、T1定時器設(shè)置成16位定時器. 程序清單:(12MHz) PwmData0 ;T0定時t1的初值(字) PwmData1 ;T1定時T的初值(字);*************************** setbtro ;啟動T0 setbtr1 ……T0Int:Clr tr0 ;T0中斷服務(wù)程序 setb p1.0 ;PWM輸出腳 retiT1Int:Clr p1.0 ;T1中斷服務(wù)程序 Clrtr0 Clrtr1 MovTH0,High(PwmData0) MovTL0,Low(PwmData0) MovTH1,High(PwmData1) MovTL1,Low(PwmData1) Setbtr1 Setbtr0 reti 說明:在主程序中計(jì)算PwmData0、PwmData1的值. 我有一個疑問:利用單片機(jī)MCS51實(shí)現(xiàn)可變脈寬PWM輸出時,在主程序中計(jì)算PwmData0、PwmData1的值過程中,是采用查表的方式,還是動態(tài)計(jì)算呢?因?yàn)樵诿恳淮蜹1產(chǎn)生中斷后,T1所裝載的值都會改變,這樣,假如: 1)采用查表的方式,那么就必須在T1INT程序段中加入讀表、裝載指令.那么大量的數(shù)據(jù)表就會占用了大量的存儲單元,并且煩瑣容易弄錯. 2)采用動態(tài)計(jì)算,則需要在主程序中進(jìn)行算術(shù)運(yùn)算,并實(shí)現(xiàn)二進(jìn)制向十六進(jìn)制的轉(zhuǎn)換,然后再裝載進(jìn)T1中,也很煩瑣…… 而且這樣的話,會不會有時間上的延時問題? 另外還問一個弱弱的問題:單片機(jī)的串行輸出口TXD能不能自動產(chǎn)生一系列的不規(guī)則的數(shù)字信號?應(yīng)該如何實(shí)現(xiàn)呢?? 請指點(diǎn)!!!
我想你用串口實(shí)現(xiàn)的話是可以實(shí)現(xiàn)一系列不規(guī)則的數(shù)字的.比如你裝載不同的數(shù)據(jù)的時候.另外用查表和動態(tài)度計(jì)算的優(yōu)點(diǎn),要試試才知道.
0
回復(fù)