📄 ad9850.lst
字号:
C51 COMPILER V7.05 AD9850 06/01/2008 17:16:59 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE AD9850
OBJECT MODULE PLACED IN ad9850.OBJ
COMPILER INVOKED BY: C:\silabs\IDEfiles\C51\BIN\C51.exe ad9850.c DB OE
stmt level source
*** WARNING C500 IN LINE 1 OF AD9850.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
1 #include <c8051f120.h>
2 #include <intrins.h>
3 #include<ABSACC.H>
4 //-----------------------定义管脚--------------------------------------------------------
5 #define data_OUT P0
6 #define keypad P3
7
8 sbit FQ_UD = P2^5; //AD9850信号更新申请
9 sbit W_CLK = P2^6; //写控制字时钟
10 sbit SETRST= P2^7;
11 sbit led = P1^6;
12 unsigned char key;
13 unsigned char CON_word[5];
14 const ksp[4]={0XF7,0XFB,0XFD,0XFE};//扫描码
15 const keycode[]={0X7D,0XE7,0XEB,0XED,0XD7,0XDB,0XDD,0XB7,0XBB,0XBD,
16 0XEE,0XDE,0XBE,0X7E,0X77,0X7B};//参考键值
17 //-----------------------------------------------------------------------------
18 // P3.3 P3.2 P3.1 P3.0
19 // | | | |
20 //P3.4---1---2---3---A(+)----
21 // | | | |
22 //P3.5---4---5---6---B(-)----
23 // | | | |
24 //P3.6---7---8---9---C(Enter)--
25 // | | | |
26 //P3.7---E---F---0---D(Clr)---
27 //---------------------------------------------------------------------------
28
29 void Oscillator_Init()
30 {
31 1 int i = 0;
32 1 SFRPAGE = CONFIG_PAGE;
33 1 OSCXCN = 0x77;
34 1 for (i = 0; i < 3000; i++); // Wait 1ms for initialization
35 1 while ((OSCXCN & 0x80) == 0);
36 1 CLKSEL = 0x01;
37 1 }
38 void Port_IO_Init()
39 {
40 1 SFRPAGE = CONFIG_PAGE;
41 1 P0MDOUT = 0xFF;
42 1 P1MDOUT = 0xFF;
43 1 P3MDOUT = 0x0F;
44 1 P2MDOUT = 0xFF;
45 1 XBR2 = 0x40;
46 1
47 1
48 1 }
49 void Init_Device(void)
50 {
51 1 Port_IO_Init();
52 1 Oscillator_Init();
53 1 }
54 //--------------------------------------------------------------------------------------------------
C51 COMPILER V7.05 AD9850 06/01/2008 17:16:59 PAGE 2
55 // 函数名称: delay
56 // 入口参数: N
57 // 函数功能:延时子程序,实现(16*N+24)us的延时
58 // 系统采用11.0592MHz的时钟时,延时满足要求,其它情况需要改动
59 //--------------------------------------------------------------------------------------------------
60 void delay(unsigned int N)
61 {
62 1 int i;
63 1 for(i=N;i>0;i--);
64 1 }
65
66
67 void jisuan(unsigned long frequence);
68 void WRITE_AD9850(void);
69 unsigned char keypad_scan();
70 unsigned long keypad_data();
71 //--------------------------------------------------------------------------------------------------
72 // 函数名称:main
73 // 用户主函数
74 // 函数功能:主函数
75 //--------------------------------------------------------------------------------------------------
76 void main()
77 {
78 1 long freq;
79 1 // disable watchdog timer
80 1 WDTCN = 0xde;
81 1 WDTCN = 0xad;
82 1 Init_Device();
83 1 led=0;
84 1 jisuan(9000000);
85 1 WRITE_AD9850();
86 1 FQ_UD=0;
87 1 delay(150);
88 1 while(1){
89 2 if(keypad_scan()==0x0e)
90 2 {
91 3 led=~led;
92 3 freq=keypad_data();
93 3 jisuan(freq);
94 3 WRITE_AD9850();
95 3 FQ_UD=0;
96 3 delay(150);
97 3 }
98 2
99 2 }
100 1
101 1 }
102 // -----------------计算频率------------------------//
103 void jisuan(unsigned long frequence)
104 {
105 1 long freq;
106 1 freq=85.89934592*frequence; //使用50M晶振,frequence就是所要输出的频率
107 1 CON_word[1]=(freq&(0xff000000))>>24; //用与控制频率的高8位
108 1 CON_word[2]=(freq&(0x00ff0000))>>16; //用与控制频率的中8位
109 1 CON_word[3]=(freq&(0x0000ff00))>>8; //用与控制频率的中8位
110 1 CON_word[4]=freq&(0x000000ff); //用与控制频率的低8位
111 1 }
112 //--------------------------------------------------------------------------------------------------
113 // 函数名称: WRITE_AD9850
114 // 函数功能: 将控制字写入AD9850
115 //--------------------------------------------------------------------------------------------------
116 void WRITE_AD9850(void)
C51 COMPILER V7.05 AD9850 06/01/2008 17:16:59 PAGE 3
117 {
118 1 unsigned char i;
119 1 W_CLK=0;
120 1 FQ_UD=0;
121 1 delay(0);
122 1 SETRST=1;
123 1 delay(0);
124 1 SETRST=0;
125 1 CON_word[0]=CON_word[0]&0xfc; //置工作方式选择位为00
126 1
127 1 for(i=0;i<5;i++)
128 1 {
129 2 W_CLK=0;
130 2 data_OUT=CON_word[i]; //送控制字
131 2 delay(0);
132 2 W_CLK=1; //上升延
133 2 delay(0);
134 2 W_CLK=0;
135 2
136 2 }
137 1 // delay(0);
138 1 FQ_UD=1; //上升延要求AD9850改变输出
139 1
140 1 }
141
142 //------------------键盘扫描------------------------//
143 //-----------------------------------------------------------------------------
144 // P3.3 P3.2 P3.1 P3.0
145 // | | | |
146 //P3.4---1---2---3---A(+)----
147 // | | | |
148 //P3.5---4---5---6---B(-)----
149 // | | | |
150 //P3.6---7---8---9---C(Enter)--
151 // | | | |
152 //P3.7---E---F---0---D(Clr)---
153 //---------------------------------------------------------------------------
154 //---------------------------------------------------------------------------
155 unsigned char keypad_scan()
156 {
157 1 unsigned char i,j;
158 1
159 1 P3=0Xf0;
160 1 while(P3!=0XF0);//检查键盘是否有键按下
161 1 do
162 1 {
163 2 for(i=0;i<=3;i++)
164 2 {
165 3 P3=ksp[i];
166 3 if(P3!=ksp[i])//检查第i行是否有键按下
167 3 {
168 4 delay(100);
169 4 key=P3; //读键值
170 4 if(key!=ksp[i])//确认有键按下
171 4 {
172 5 for(j=0;j<16;j++)
173 5 {
174 6 if(key==keycode[j])
175 6 return (j);
176 6 }
177 5 return (0x10);
178 5 }
C51 COMPILER V7.05 AD9850 06/01/2008 17:16:59 PAGE 4
179 4 }
180 3 }
181 2
182 2 }
183 1 while(1);
184 1
185 1 }
186
187
188 unsigned long keypad_data()
189 {
190 1 unsigned char temp1;
191 1 unsigned long temp=0;
192 1
193 1 while(keypad_scan()!=0X0C)
194 1
195 1 {
196 2 temp1=keypad_scan();
197 2 if(temp1>=0&&temp1<=9)
198 2 {
199 3 led=~led;
200 3 temp=temp*10+temp1;
201 3 }
202 2 }
203 1 led=~led;
204 1
205 1 return(temp);
206 1 }
207
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 465 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 13
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -