找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6441|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

我用51單片機(jī)寫的波形發(fā)生器 可以輸出正弦波 但是不能調(diào)整頻率 難道是我的中斷...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51036 發(fā)表于 2013-6-18 13:04 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define fosc 12000000
#define all 65535
float sindatar;
sbit hong=P2^3;
sbit lan=P2^5;
sbit huang=P2^7;
uint VM=2500,b=0;
uint FREQ=1,j=0;
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=1;y>0;y--);
}

/**********************************************
                計(jì)算正弦波數(shù)據(jù)
********************************************/
void getsin(uchar x)
{   
    sindatar=((sin(6.28*x/256)+1)/2.0)*VM*0.051;
P3=(uchar)sindatar;
delay(1);
}
void main()
{
   TH1=(all-fosc/12/256/FREQ)/256;
   TL1=(all-fosc/12/256/FREQ)%256;
   ET1=1;
   EA=1;
   TR1=1;
   while(1)
   {
       n getsin(j);
   }
}
void timer1() interrupt 3 using 3
{
   TH1=(all-fosc/12/256/FREQ)/256;
   TL1=(all-fosc/12/256/FREQ)%256;
   j++;
   if(j==256)
   j=0;
}



這是我的程序,麻煩幫忙解答一下為什么。  此時(shí)示波器上的顯示的周期是2s,這跟我的設(shè)置的頻率的FREQ=1有點(diǎn)不對(duì)。  求解釋一下。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:262 發(fā)表于 2013-6-19 00:51 | 只看該作者
有高手知道嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:51036 發(fā)表于 2013-6-19 01:02 | 只看該作者

謝謝  我真的調(diào)了好多天了  
回復(fù)

使用道具 舉報(bào)

地板
ID:51036 發(fā)表于 2013-6-19 01:04 | 只看該作者

還是沒有調(diào)試出來(lái)
回復(fù)

使用道具 舉報(bào)

5#
ID:7485 發(fā)表于 2013-6-19 11:00 | 只看該作者
本帖最后由 ahshmj 于 2013-6-19 11:09 編輯

你有必要搞這么復(fù)雜么?你這樣,中斷函數(shù)的運(yùn)行過(guò)程就超過(guò)了中斷定時(shí),怎能會(huì)正常?
不信,你直接將你需要的數(shù)值填寫進(jìn)去試一試!
“   TH1=(all-fosc/12/256/FREQ)/256;
   TL1=(all-fosc/12/256/FREQ)%256;

如下改試一試,如果是值不對(duì)你自己計(jì)算一下:
   TL1=0XBD;
   TH1=0XF0;

正弦波發(fā)生器,如果要求嚴(yán)格的話,定時(shí)部分最好使用匯編。
回復(fù)

使用道具 舉報(bào)

6#
ID:7485 發(fā)表于 2013-6-19 11:06 | 只看該作者
本帖最后由 ahshmj 于 2013-6-19 11:10 編輯

定時(shí)需要再延長(zhǎng)一些,中間的計(jì)算過(guò)程耗時(shí)多。如果不能延長(zhǎng),就要使用更高的晶振。否則這個(gè)程序調(diào)不正常。
回復(fù)

使用道具 舉報(bào)

7#
ID:51036 發(fā)表于 2013-6-19 13:12 | 只看該作者
ahshmj 發(fā)表于 2013-6-19 11:00
你有必要搞這么復(fù)雜么?你這樣,中斷函數(shù)的運(yùn)行過(guò)程就超過(guò)了中斷定時(shí),怎能會(huì)正常?
不信,你直接將你需要 ...

恩恩  謝謝啊   是要開始學(xué)學(xué)匯編了
因?yàn)槲沂且{(diào)這個(gè)波形發(fā)生器頻率的   假如不用這種方法  還可以有其他的方法么?
真的謝謝您啊
回復(fù)

使用道具 舉報(bào)

8#
ID:51036 發(fā)表于 2013-6-19 13:14 | 只看該作者
ahshmj 發(fā)表于 2013-6-19 11:06
定時(shí)需要再延長(zhǎng)一些,中間的計(jì)算過(guò)程耗時(shí)多。如果不能延長(zhǎng),就要使用更高的晶振。否則這個(gè)程序調(diào)不正常。

我當(dāng)時(shí)是想通過(guò)這種計(jì)算來(lái)控制頻率的  我是不能延時(shí)太長(zhǎng)了   因?yàn)橐蟛ㄐ伟l(fā)生器的頻率最高要1k  HZH
回復(fù)

使用道具 舉報(bào)

9#
ID:7485 發(fā)表于 2013-6-19 15:38 | 只看該作者
忘了告訴你了:
你沒有設(shè)置定時(shí)器的工作模式,就成了默認(rèn)的13位計(jì)數(shù)/定時(shí),需要加上一句:   TMOD = 0x10; 當(dāng)然你不加這一句也行,13位的。但是初裝值不一樣。
回復(fù)

使用道具 舉報(bào)

10#
ID:51036 發(fā)表于 2013-6-20 13:55 | 只看該作者
ahshmj 發(fā)表于 2013-6-19 15:38
忘了告訴你了:
你沒有設(shè)置定時(shí)器的工作模式,就成了默認(rèn)的13位計(jì)數(shù)/定時(shí),需要加上一句:   TMOD = 0x10; ...

好的  好的  謝謝
回復(fù)

使用道具 舉報(bào)

11#
ID:76287 發(fā)表于 2015-4-7 19:02 | 只看該作者
不懂,但是還是要頂,安撫樓主受傷心靈,每一個(gè)新手都是痛苦的開始,快樂(lè)的結(jié)局
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表