日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

我用AT89C51來產(chǎn)生PWM……麻煩了,做不出來

我用AT89C51來產(chǎn)生PWM……麻煩了,做不出來

求助!!!!

謝謝
全部回復(fù)(40)
正序查看
倒序查看
grtang
LV.7
2
2005-04-05 13:37
頻率是多少?分辨率又是多少?
0
回復(fù)
2005-04-05 13:58
怎么會出不來?查詢和中斷方式都可以完成,頻率?分辨率?產(chǎn)生幾路?
0
回復(fù)
2005-04-07 20:36
@老化中的鎮(zhèn)流器
怎么會出不來?查詢和中斷方式都可以完成,頻率?分辨率?產(chǎn)生幾路?
假設(shè)頻率是1K,分辨率為一個機(jī)器周期,產(chǎn)生1路……
應(yīng)該怎么實(shí)現(xiàn)呢?
0
回復(fù)
qihao
LV.4
5
2005-04-07 22:42
理論可以,不過標(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ù)
qiuyy
LV.6
6
2005-04-08 13:27
這個應(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的頻率.
0
回復(fù)
2005-04-08 13:32
@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)在是要它行的通……只是我還行不通
0
回復(fù)
2005-04-08 13:38
@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)不懂...請指教!!!
    謝謝!!!
0
回復(fù)
qihao
LV.4
9
2005-04-08 14:08
@清泉石上流
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ù)
2005-04-08 16:58
@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)電源的..
    請問有什么可行的辦法?
    我還沒有做出來..
    謝謝!
0
回復(fù)
qiuyy
LV.6
11
2005-04-08 18:00
@清泉石上流
二進(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ù)
tase
LV.5
12
2005-04-08 18:17
@清泉石上流
二進(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ù)
qihao
LV.4
13
2005-04-08 18:25
@清泉石上流
二進(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)時咋做的
0
回復(fù)
qihao
LV.4
14
2005-04-08 18:31
@清泉石上流
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ù)
grtang
LV.7
15
2005-04-08 21:54
@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?
0
回復(fù)
2005-04-08 22:03
@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)所在嗎?
    謝謝!
0
回復(fù)
qiuyy
LV.6
17
2005-04-09 09:55
@清泉石上流
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ù)
qiuyy
LV.6
18
2005-04-09 10:04
@grtang
看來你是高手.我從來沒有做個單片機(jī)電源.想請教一個問題.有一個輸出電壓信號,轉(zhuǎn)換成數(shù)字信號后,怎么控制占空比D?
0延遲
1讀電壓AD值.
2如果讀到的電壓在額定范圍內(nèi),SJMP EXIT
3進(jìn)行判斷,如果大于額定電壓,則PWM-DEC,否則INC
4 SJMP 0
5 EXIT
6 SJMP 0
這僅僅是一個思路.
0
回復(fù)
kangjl668
LV.4
19
2005-04-09 10:18
@qiuyy
你把要調(diào)制的數(shù)據(jù)變成表格也可以的.首先你要明白什么是PWM,好好地分析D(占空比)和T(周期)的關(guān)系.再構(gòu)思一下.這個算法也是我以前想出來的.當(dāng)然如果你要用程序做成正弦的話,你可以選用DA轉(zhuǎn)換,這也個也不難做.
能傳個程序上來看看嗎?
0
回復(fù)
qiuyy
LV.6
20
2005-04-09 10:29
@kangjl668
能傳個程序上來看看嗎?
D=100,
T=1000;     \\duty=1/10;

INT_TIM0:
D++;
t++;
if (T=100) {P1^1=0;}
if (D=1000) {P1^1=1;
            D=0;
            T=0;}
;exit
;----end----------

用到定時器,定時器按你的頻率來賦值,上述程序是一個思路,我信手寫的.再不明白要打屁股了.
0
回復(fù)
grtang
LV.7
21
2005-04-09 10:42
@qiuyy
0延遲1讀電壓AD值.2如果讀到的電壓在額定范圍內(nèi),SJMPEXIT3進(jìn)行判斷,如果大于額定電壓,則PWM-DEC,否則INC4SJMP05EXIT6SJMP0這僅僅是一個思路.
對于第3步調(diào)整D值,是不是對計(jì)數(shù)器重新置數(shù)?
0
回復(fù)
qiuyy
LV.6
22
2005-04-09 10:44
@grtang
對于第3步調(diào)整D值,是不是對計(jì)數(shù)器重新置數(shù)?
try and experience it by yourslef ,pls
0
回復(fù)
grtang
LV.7
23
2005-04-09 13:04
@qiuyy
tryandexperienceitbyyourslef,pls
thank your help.
0
回復(fù)
kangjl668
LV.4
24
2005-04-09 16:35
@qiuyy
D=100,T=1000;    \\duty=1/10;INT_TIM0:D++;t++;if(T=100){P1^1=0;}if(D=1000){P1^1=1;            D=0;            T=0;};exit;----end----------用到定時器,定時器按你的頻率來賦值,上述程序是一個思路,我信手寫的.再不明白要打屁股了.
3ks!
0
回復(fù)
2005-04-09 23:38
@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ù)正弦波.
0
回復(fù)
2005-04-10 06:29
@清泉石上流
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ù)
qiuyy
LV.6
27
2005-04-10 19:58
@清泉石上流
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ù)
kexingong
LV.5
28
2005-04-10 20:26
@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ù)
2005-04-10 20:49
@qiuyy
it'salsoagoodwayttoproducethePLUSOfPWM.ButtheFislimited!
limited?  How to  increase the F ? by using another one-chip ?
0
回復(fù)
2005-04-12 11:40
@清泉石上流
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)!!!
0
回復(fù)
qiuyy
LV.6
31
2005-04-12 13:34
@清泉石上流
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ù)
發(fā)