📄 信号发生器.lst
字号:
C51 COMPILER V7.20 _藕欧_蒧器 06/06/2008 19:04:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE _藕欧_蒧器
OBJECT MODULE PLACED IN 信号发生器.OBJ
COMPILER INVOKED BY: G:\keil\keil\C51\BIN\C51.EXE 信号发生器.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //本信号发生器能发出 矩型波,三角,锯齿,及正弦,并能显示在实验设计中
2 #include<reg51.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5 #define DAC0832 XBYTE[0XFE00]
6 uchar bdata flag1=0;
7 uchar waveno=0; //选择信号类型
8 sbit start=flag1^0; //用在遇外问中断时,结束原信号的标志
9 uchar code duan_table[]={0xc0,0xcf,0xa4,0xb0}; //显示1,2,3,4
10 void squarewave(void); //方波0
11 void sawtoothwave(void); //锯齿波1
12 void trianglewave(void); //三角波2
13 void sinwave(void);//正弦波 3
14 void main(void)
15 {
16 1 IT0=1;//用下降延触发方式比较好,经实验得操作键有效率大
17 1 EA=1;
18 1 EX0=1;//开外部0中断
19 1 while(1)
20 1 { switch(waveno)
21 2 { case 0 : squarewave();break;
22 3 case 1: sawtoothwave();break;
23 3 case 2: trianglewave();break;
24 3 case 3: sinwave(); break;
25 3 default : break;
26 3 }
27 2 }
28 1 }
29 void ex0_int() interrupt 0 using 1//外部0中断入口
30 {
31 1 ++waveno;
32 1 P1=duan_table[waveno];//模式显示
33 1 if(waveno>=4) waveno=0;
34 1 start=1;//使程序跳出原来一种模工的信号
35 1 }
36 void squarewave(void)
37 {
38 1 uchar i;
39 1 start=0;
40 1 while(~start)
41 1 { DAC0832=0xff;
42 2 P1=duan_table[waveno];
43 2 for(i=0;i<255;i++);
44 2 DAC0832=0X00;
45 2 P1=duan_table[waveno];
46 2 for(i=0;i<255;i++);
47 2 }
48 1 }
49 void sawtoothwave(void)
50 { unsigned char i;
51 1 start=0;
52 1 while(~start)
53 1 { for(i=0;i<255;i++)
54 2 { DAC0832=i;
55 3 P1=duan_table[waveno];
C51 COMPILER V7.20 _藕欧_蒧器 06/06/2008 19:04:00 PAGE 2
56 3 }
57 2 }
58 1 }
59 void trianglewave(void)
60 { uchar i;
61 1 start=0;
62 1 while(~start)
63 1 { P1=duan_table[waveno];
64 2 for(i=0;i<255;i++)
65 2 DAC0832=i;
66 2 P1=duan_table[waveno];
67 2 for (i=0;i<255;i++)
68 2 DAC0832=i;
69 2 }
70 1 }
71 void sinwave(void)
72 {
73 1 uchar i;
74 1 uchar code sin_table[]={0x7f,0x89,0x94,0x9f,0xaa,0xb4,0xbe,0xc8,0xd1,0xd9,
75 1 0xe0,0xe7,0xed,0xf2,0xf7,0xfa,0xfc,0xfe,0xff};
76 1 start=0;
77 1 while(~start)
78 1 { for(i=0;i<18;i++)
79 2 DAC0832=sin_table[i];
80 2 P1=duan_table[waveno];
81 2 for(i=18;i>0;i--)
82 2 DAC0832=sin_table[i];
83 2 for(i=0;i<18;i++)
84 2 DAC0832=-sin_table[i];
85 2 for(i=18;i>0;i--)
86 2 DAC0832=-sin_table[i];
87 2 }
88 1 }
89
90 //实验总结:1 D/A转换问题,2单片机访问外部数据存,程序存,的地址问题,P0口做低8位数据,
91 //地址分时复用,P2口做高8位地址线,在用MOVX @r0 指今时,P0,P2锁存器,自动转换 ,WR,写
92 //允许端也自动转换,高变低,- ,应将其与D/A//转换的WR端相连;当然也可以将被 控制端直接接地2:
93 //按键问题,对于利用中断口的按键,应选用下降延触发方式,即//IT=1;这样更灵敏
94
95
96
97
98
99
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 298 ----
CONSTANT SIZE = 23 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
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 + -