⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 可调频.lst

📁 DAC0832可调频的程序
💻 LST
字号:
C51 COMPILER V8.09   可调频                                                                08/13/2008 13:54:51 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE 可调频
OBJECT MODULE PLACED IN 可调频.OBJ
COMPILER INVOKED BY: C:\Program Files\C51\BIN\C51.EXE 可调频.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************************
   2          **实验目的:练习数据输出控制的C编程
   3          **应用软件:Keil 8.0
   4          **系统使用器件: STC8051  ADC0832
   5          ___________________________________________________________
   6          -----------------------------------------------------------
   7          **创建人:历岩          QQ:342372282
   8          **文件名:0832
   9          **创建日期: 2008.8.13
  10          ___________________________________________________________
  11          -----------------------------------------------------------
  12          **描述:用8051输出控制0832,在定时器中断程序里输出三角波、方
  13                          波、锯齿波、正弦波;并通过外部中断调节频率;另外用数
  14                          码管显示频率(因为频率调节不明显主要是用来调试作用);
  15          
  16          ***********************************************************/
  17          #include <reg51.h>
  18          #define uchar unsigned char
  19          #define uint unsigned int
  20          #define DAC0832 P2                      //将DAC0832定义为P2口;
  21          #define ALL 65536                       //将ALL定义为65536;
  22          #define Fosc 12000000           //频率为12M
  23          uchar TH_0,TL_0,flag1,flag=0;
  24          uchar qian,bai,shi,ge;  //显示部分参数
  25          uint  FREQ=100,num;     //起始频率设定为100HZ
  26          float temp;
  27          uchar code sin_num[]={     
  28                0,0,      0,      0,      0,      0,      0,      0,      1,      1,      1,      1,      1,      2,      2,      2,
  29                    2,    3,      3,      4,      4,      4,      5,      5,      6,      6,      7,      7,      8,      8,      9,      9,
  30                10,       10,     11,     12,     12,     13,     14,     15,     15,     16,     17,     18,     18,     19,     20,     21,
  31                    22,   23,     24,     25,     25,     26,     27,     28,     29,     30,     31,     32,     34,     35,     36,     37,
  32                38,       39,     40,     41,     42,     44,     45,     46,     47,     49,     50,     51,     52,     54,     55,     56,
  33                57,       59,     60,     61,     63,     64,     66,     67,     68,     70,     71,     73,     74,     75,     77,     78,
  34                    80,   81,     83,     84,     86,     87,     89,     90,     92,     93,     95,     96,     98,     99,     101,102,
  35                    104,  106,    107,    109,    110,    112,    113,    115,    116,    118,    120,    121,    123,    124,    126,    128,
  36                    129,  131,    132,    134,    135,    137,    139,    140,    142,    143,    145,    146,    148,    149,    151,    153,
  37                    154,  156,    157,    159,    160,    162,    163,    165,    166,    168,    169,    171,    172,    174,    175,    177,
  38                    178,  180,    181,    182,    184,    185,    187,    188,    189,    191,    192,    194,    195,    196,    198,    199,
  39                    200,  201,    203,    204,    205,    206,    208,    209,    210,    211,    213,    214,    215,    216,    217,    218,    
  40                    219,  220,    221,    223,    224,    225,    226,    227,    228,    229,    230,    230,    231,    232,    233,    234,    
  41                    235,  236,    237,    237,    238,    239,    240,    240,    241,    242,    243,    243,    244,    245,    245,    246,    
  42                    246,  247,    247,    248,    248,    249,    249,    250,    250,    251,    251,    251,    252,    252,    253,    253,    
  43                    253,  253,    254,    254,    254,    254,    254,    255,    255,    255,    255,    255,    255,    255,    255,    255
  44                    };
  45          /***********8051端口设置***************/
  46          sbit cs=P3^6;
  47          sbit change=P1^0; 
  48          sbit ADDFREQ=P1^1;
  49          sbit SUBBFREQ=P1^2;
  50          
  51          void display(uchar qian,uchar bai,uchar shi,uchar ge);
  52          /***********延时函数:延时1ms*********/
  53          void delay(uint z)
  54          {
  55   1              uint x,y;
C51 COMPILER V8.09   可调频                                                                08/13/2008 13:54:51 PAGE 2   

  56   1              for(x=z;x>0;x--)
  57   1                      for(y=110;y>0;y--);
  58   1      } 
  59          /***********初始化函数***********/
  60          void init()
  61          {
  62   1              TMOD=0X01;       //设定工作模式 1
  63   1              temp=ALL-Fosc/12.0/256/FREQ; //定时器初值计算(将没个周期划分为256份)
  64   1              TH_0=(uint)temp/256;
  65   1              TL_0=(uint)temp%256;
  66   1              EA=1;     //开总中断
  67   1              EX0=1;    //开外部中断
  68   1              IT0=1;    //设定下降沿有效工作方式
  69   1              ET0=1;    //设定定时器工作在定时方式
  70   1              TR0=1;    //开定时器中断
  71   1      } 
  72          
  73          /************频率调节函数********************/
  74          void changefreq(void)
  75          {
  76   1              if(change==0)
  77   1              {flag++;        if(flag==4) {flag=0;num=0;}}
  78   1              if(ADDFREQ==0)  FREQ=FREQ+10;//FREQ++;
  79   1              if(SUBBFREQ==0) FREQ=FREQ-10;//FREQ--;
  80   1          temp=ALL-Fosc/12.0/256/FREQ;//通过改变初值来实现定时器定时时间,从而改变波形频率
  81   1              TH_0=(uint)temp/256;
  82   1              TL_0=(uint)temp%256;
  83   1              ge=FREQ%10;        //数值分离;
  84   1              shi=FREQ/10%10;
  85   1              bai=FREQ/100%10;
  86   1              qian=FREQ/1000;
  87   1      }  
  88          /***********三角波发生函数**********************/
  89          void san(void)
  90          {
  91   1              for(num=0;num<255;num++)
  92   1              {cs=0;DAC0832=num;cs=1;}
  93   1              for(num=255;num>0;--num)
  94   1              {cs=0;DAC0832=num;cs=1;}
  95   1      }
  96          /************方波发生函数*********************/
  97          void fang(void)
  98          {
  99   1              cs=0;DAC0832=0XFF;cs=1;
 100   1              for(num=0;num<255;num++);
 101   1              cs=0;DAC0832=0X00;cs=1;
 102   1              for(num=255;num>0;num--);
 103   1      }
 104          /************锯齿波发生函数**********************/
 105          void juchi(void)
 106          {
 107   1              cs=0;DAC0832=++num;cs=1;        
 108   1      }
 109          /*************正弦波发生函数********************/
 110          void zhengxian(void)
 111          {
 112   1              for(num=0;num<255;num++)
 113   1              {cs=0;DAC0832=sin_num[num];cs=1;}
 114   1              for(num=255;num>0;num--)
 115   1              {cs=0;DAC0832=sin_num[num];cs=1;}
 116   1      }
 117          /*************外部中断服务函数***********************/
C51 COMPILER V8.09   可调频                                                                08/13/2008 13:54:51 PAGE 3   

 118          void ext0() interrupt 0
 119          {
 120   1              changefreq(); //引用频率改变函数
 121   1      }
 122          /**************定时器中断函数****************/
 123          void timer0() interrupt 1
 124          {
 125   1              TH0=TH_0;TL0=TL_0;      //重新装初值
 126   1              TR0=0;
 127   1              switch(flag)
 128   1              {
 129   2                      case 0: {san();TR0=1;break;}  
 130   2                      case 1: {fang();TR0=1;break;}
 131   2                      case 2: {juchi();TR0=1;break;}
 132   2                      case 3: {zhengxian();TR0=1;break;} 
 133   2                      default: ;
 134   2              }
 135   1      }
 136          /**************频率显示函数*********************/
 137          void display(uchar qian,uchar bai,uchar shi,uchar ge)
 138          {
 139   1              P0=0X00+qian;
 140   1              delay(5);
 141   1              P0=0X10+bai;
 142   1              delay(5);
 143   1              P0=0X20+shi;
 144   1              delay(5);
 145   1              P0=0x30+ge;
 146   1              delay(5);
 147   1      }
 148          
 149          /**************主函数********************/
 150          void main()
 151          {
 152   1              init();
 153   1      //      while(1){display(qian,bai,shi,ge);};
 154   1              while(1);
 155   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    634    ----
   CONSTANT SIZE    =    256    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -