📄 可调频.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 + -