找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助,用51單片機輸出兩路正弦波的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:117370 發(fā)表于 2016-4-28 19:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
        #include <reg52.h>  
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4;  
unsigned char code sin[]={0x8B,0x98,0xA4,0xB0,0xBB,0xC6,0xD0,0xD9,0xE2,0xE9,0xEF,0xF5,0xF9,0xFC,0xFE
,0xFE,0xFE,0xFC,0xF9,0xF5,0xEF,0xE9,0xE2,0xD9,0xD0,0xC6,0xBB,0xB0,0xA4,0x98,0x8B
,0x7F,0x73,0x66,0x5A,0x4E,0x43,0x38,0x2E,0x25,0x1C,0x15,0x0F,0x09,0x05,0x02,0x00
,0x00,0x00,0x02,0x05,0x09,0x0F,0x15,0x1C,0x25,0x2E,0x38,0x43,0x4E,0x5A,0x66,0x73
, 0x7F};
unsigned char i = 0;   //動態(tài)掃描的索引
unsigned int cnt = 0;  //記錄 T0 中斷次數(shù) 同時50HZ正弦波輸出點
   unsigned long t=0;  
void main()
{  
   unsigned long sec = 0;  //記錄50HZ輸出點數(shù)  
   unsigned long sec2=0;
   float E0; //正弦波幅值
  //1HZ正弦波輸出點
    EA = 1;       //使能總中斷   
        ENLED = 0;    //使能 U3,選擇控制數(shù)碼管   
         ADDR3 = 1;    //因為需要動態(tài)改變 ADDR0-2 的值,所以不需要再初始化了     
         TMOD = 0x01;  //設置 T0 為模式 1     
      // void         conminucation()
             TH0  = 0xFE;  //為 T0 賦初值 FEE0,定時 0.2ms     
         TL0  = 0xE0;     
         ET0  = 1;     //使能 T0 中斷   
          TR0  = 1;     //啟動 T0   
            while (1)   
                 {      
                   if (cnt >= 1)  //判斷 T0 溢出是否達到 1 次      
                     {        //幅值最大為5V
                          
                       
                                    cnt = 0;       //第一路
                        P2 = sin[sec] ;           
                                        sec++;         //秒計數(shù)自加 1            
                       if(sec>62)                                 
                                sec=0;
                                                    
                         }
                        if(t>=50)          //第二路
                               {       
                            
                                  t=0;
                                  
                          P3 = sin[sec2];
                                       sec2++;
                                   if (sec2>62)
                                       sec2=0;
                                   }
                                  
                                           
                                                         }   
                                                          }
                                                          
/* 定時器 0 中斷服務函數(shù) */
  void InterruptTimer0() interrupt 1
   {          TH0  = 0xFE;  //為 T0 賦初值 FEE0,定時 0.2ms     
         TL0  = 0xE0;                                                                                           
     cnt++;        //中斷次數(shù)計數(shù)值加 1   
             t++;  

                              }
         
   程序在上面  可是那個1HZ的正弦波峰峰值 離5V差的很遠。而且波形很差。每個點都會有一定的下降。這是為什么啊

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

使用道具 舉報

沙發(fā)
ID:117370 發(fā)表于 2016-4-28 19:37 | 只看該作者
就是那個第二路的波形。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表