📄 main.lst
字号:
C51 COMPILER V7.20 MAIN 08/24/2007 11:29:03 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*任意波形发生程序*/
2 /*此程序设定波形频率,幅度,类型并显示*/
3
4 //包含头文件
5 #include<STC89C51RC_RD_PLUS.H>
6 #include<absacc.h>
7 #include<intrins.h>
8 sbit p10=P1^0;
9 sbit p12=P1^2;
10
11 //自定义数据类型
12 #define uchar unsigned char
13 #define uint unsigned int
14
15 //定义各个端口地址
16 #define COM XBYTE [0x0001] //8279的命令状态口
17 #define DAT XBYTE [0X0000] //8279的数据口
18 #define RAM XBYTE [0X8001] //8279的RAM地址
19 #define CS_DAC XBYTE [0X0400] //DAC选通口地址
20 #define CS_7132 XBYTE [0X0800] //7C142选通口地址
21 #define CS_FPGA XBYTE [0X0C00] //FPGA选通口地址1
22 //#define CS_FPGA1 XBYTE [0X0C01] //FPGA选通地址2
23 #define CS_RAM XBYTE[0X1000] //双口RAM选通地址
24 #define CS_TEMP XBYTE[0X2400] //无用地址空间
25
26 ///////////////////////////////////////////////////////////////////////宏定义
27 // 宏定义以
28 /* 定义常量 */
29 #define ERROR 0
30 #define OK 1
31
32 /* 定义Flash 操作等待时间 */
33 //#define WAIT_TIME 0x00 //mcu clock 40mhz
34 //#define WAIT_TIME 0x01 //mcu clock 20mhz
35 #define WAIT_TIME 0x02 //mcu clock 10mhz
36 //#define WAIT_TIME 0x03 //mcu clock 5mhz
37
38 #define bits 512 //波形表格字节数
39
40 #define save_sector 0xE200 //定义波形存储空间
41 #define save_mag 0xE400 //定义幅度存储空间
42 #define save_freq 0xE401 //freq存储
43 #define save_count 0xe403 //存储显示周期个数
44
45 //////////////////////////////////////////////////////////////////////////////定义各种常量表
46 //定义各种常量表
47
48 /*共阴的七段数码管译码0 1 2 3 4 5 6 7 8 9*/
49 uchar code seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
50
51 //0级键值表 正弦波 方波 三角波 组合波
52 uchar code tb0[]={0x40,0x48,0x50,0x58,0x19};
53
54 //1级键值表
55 uchar code tb1[]={0x01,0x02,0x03};
C51 COMPILER V7.20 MAIN 08/24/2007 11:29:03 PAGE 2
56
57 //2级键值表
58 uchar code tb2[]={0x5a,0x5b,0x1a,0x1b};
59
60 //波形系数键值表
61 uchar code xishu[]={0x59,0x41,0x42,0x43,0x49,0x4a,0x4b,0x51,0x52,0x53};
62 //正弦波形表
63 uchar code sin[]={127,129,130,132,133,135,136,138,139,141,143,144,146,147,149,150,152,153,155,156,158,159,
-161,163,164,166,167,168,170,171,173,174,176,177,179,180,182,183,184,186,187,188,190,191,193,194,195,197,198,199,200,202,
-203,204,205,207,208,209,210,211,213,214,215,216,217,218,219,220,221,223,224,225,226,227,228,228,229,230,231,232,233,234,
-235,236,236,237,238,239,239,240,241,242,242,243,244,244,245,245,246,247,247,248,248,249,249,249,250,250,251,251,251,252,
-252,252,253,253,253,253,254,254,254,254,254,254,254,254,254,254,255,254,254,254,254,254,254,254,254,254,254,253,253,253,
-253,252,252,252,251,251,251,250,250,249,249,249,248,248,247,247,246,245,245,244,244,243,242,242,241,240,239,239,238,237,
-236,236,235,234,233,232,231,230,229,228,228,227,226,225,224,223,221,220,219,218,217,216,215,214,213,211,210,209,208,207,
-205,204,203,202,200,199,198,197,195,194,193,191,190,188,187,186,184,183,182,180,179,177,176,174,173,171,170,168,167,166,
-164,163,161,159,158,156,155,153,152,150,149,147,146,144,143,141,139,138,136,135,133,132,130,129,127,125,124,122,121,119,
-118,116,115,113,111,110,108,107,105,104,102,101,99,98,96,95,93,91,90,88,87,86,84,83,81,80,78,77,75,74,72,71,70,68,67,66,
-64,63,61,60,59,57,56,55,54,52,51,50,49,47,46,45,44,43,41,40,39,38,37,36,35,34,33,31,30,29,28,27,26,26,25,24,23,22,21,20,
-19,18,18,17,16,15,15,14,13,12,12,11,10,10,9,9,8,7,7,6,6,5,5,5,4,4,3,3,3,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,1,1,1,1,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,8,9,9,10,10,11,12,12,13,14,15,15,16,17,18,18,19,20,21,22,23,24,25,26,26,27
-,28,29,30,31,33,34,35,36,37,38,39,40,41,43,44,45,46,47,49,50,51,52,54,55,56,57,59,60,61,63,64,66,67,68,70,71,72,74,75,77
-,78,80,81,83,84,86,87,88,90,91,93,95,96,98,99,101,102,104,105,107,108,110,111,113,115,116,118,119,121,122,124,125};
64 //方波波形表
65 uchar code rec[]={255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0};
66 //三角波波形表
67 uchar code tri[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32
-,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72
-,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,10
-9,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,13
-9,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,16
-9,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,19
-9,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,22
-9,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,255,254,253,25
-2,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,22
-2,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,19
-2,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,16
-2,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,13
-2,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,10
-2,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63
-,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23
-,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};
68 //组合波形表
69 //uchar code junc[]={1};
70 //暂定表
71 //uchar temp_jun[512]={1};
72 uchar xdata temp_jun[511]={1};
73
74
75 ///////////////////////////////////////////////////////////////////////////////////定义全局变量
C51 COMPILER V7.20 MAIN 08/24/2007 11:29:03 PAGE 3
76 //定义全局变量
77
78 sbit clflag=ACC^7;
79 bit int_flag=0; /*中断标志位*/
80 uchar key_value;/*中断返回键值*/
81 uchar value; //系数寄存器
82 //uchar freq_step=10; //频率步进
83 //uchar mag_step=1; //幅度步进
84
85 uint cycle_count; //周期个数
86 uchar baiwei; //百位
87 uchar shiwei; //十位
88 uchar gewei; //个位
89 uchar count_cycle=0;
90
91 uint freq=65500; //频率寄存器
92 uchar mag=100; //幅度寄存器
93 //uchar indicate; //定义频率,幅度flag,indicate=0:freq;indicate=1:mag.
94
95
96 uchar a; //正弦波的波形系数
97 uchar b; //方波的波形系数
98 uchar c; //三角波的波形系数
99
100 uchar state0=0; //0级状态
101 uchar state1=0; //1级状态
102 uchar state2=0; //2级状态
103
104 bit ok=0; //ok=1为确认
105
106 uchar count=0; //记顺序按键植
107
108 /////////////////////////////////////////////////////////////////////////定义个功能子函数
109 //定义个功能子函数
110 void save(uchar *reg_temp);
111
112 /* 打开 ISP,IAP 功能 */
113 void ISP_EN(void)
114 {
115 1 EA = 0; // 关中断
116 1 ISP_CONTR = ISP_CONTR & 0x18; // 0001,1000
117 1 ISP_CONTR = ISP_CONTR | WAIT_TIME;
118 1 ISP_CONTR = ISP_CONTR | 0x80; // 1000,0000
119 1 }
120
121
122
123 /* 关闭 ISP,IAP 功能 */
124 void ISP_DI(void)
125 {
126 1 ISP_CONTR = ISP_CONTR & 0x7f; // 0111,1111
127 1 ISP_TRIG = 0x00;
128 1 EA = 1; // 开中断
129 1 }
130
131
132
133 /* 字节读 *//* 程序执行时间15us,指令周期为0.12us */
134 uchar Byte_read(uint byte_addr)
135 {
136 1 ISP_ADDRH = (uchar)(byte_addr >> 8);
137 1 ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
C51 COMPILER V7.20 MAIN 08/24/2007 11:29:03 PAGE 4
138 1 ISP_CMD = ISP_CMD & 0xf8; // 1111,1000
139 1 ISP_CMD = ISP_CMD | 0x01; // 0000,0001 字节读数据存储区
140 1 ISP_EN();
141 1 ISP_TRIG = 0x46;
142 1 ISP_TRIG = 0xb9;
143 1 _nop_();
144 1 ISP_DI();
145 1 return (ISP_DATA);
146 1 }
147
148
149 /* 扇区擦除 *//* 程序执行时间10ms,指令周期为0.12us */
150 void Sector_erase(uint Sector_addr)
151 {
152 1 uchar addre;
153 1 addre = (uchar)(Sector_addr >> 8); // 1111,1110,0000,0000; 取扇区地址
154 1 ISP_ADDRH = addre&0xfe;
155 1 ISP_ADDRL = 0x00;
156 1
157 1 ISP_CMD = ISP_CMD & 0xf8; // 1111,1000
158 1 ISP_CMD = ISP_CMD | 0x03; // 0000,0011 扇区擦除数据存储区
159 1
160 1 ISP_EN();
161 1
162 1 ISP_TRIG = 0x46; // 触发ISP_IAP命令
163 1 ISP_TRIG = 0xb9; // 触发ISP_IAP命令
164 1 _nop_();
165 1 ISP_DI();
166 1 }
167
168
169 /* 字节编程 *//* 程序执行时间64us,指令周期为0.12us */
170 void Byte_program(uint byte_addr, uchar DataBuf)
171 {
172 1 ISP_ADDRH = (uchar)(byte_addr >> 8);
173 1 ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
174 1 ISP_CMD = ISP_CMD & 0xf8; // 1111,1000
175 1 ISP_CMD = ISP_CMD | 0x02; // 0000,0010 字节编程数据存储区
176 1 ISP_DATA = DataBuf;
177 1 ISP_EN();
178 1
179 1 ISP_TRIG = 0x46; // 触发ISP_IAP命令
180 1 ISP_TRIG = 0xb9; // 触发ISP_IAP命令
181 1 _nop_();
182 1 ISP_DI();
183 1 }
184
185
186 /* 字节编程并校验 */
187 uchar ByteProgramVerify(uint byte_addr, uchar DataBuf)
188 {
189 1 ISP_ADDRH = (uchar)(byte_addr >> 8);
190 1 ISP_ADDRL = (uchar)(byte_addr & 0x00ff);
191 1 ISP_CMD = ISP_CMD & 0xf8; // 1111,1000
192 1 ISP_CMD = ISP_CMD | 0x02; // 0000,0010 字节编程数据存储区
193 1 ISP_DATA = DataBuf;
194 1 ISP_EN();
195 1 ISP_TRIG = 0x46;
196 1 ISP_TRIG = 0xb9;
197 1 _nop_();
198 1 ISP_DATA = 0x00;
199 1 ISP_CMD = ISP_CMD & 0xf8; // 1111,1000
C51 COMPILER V7.20 MAIN 08/24/2007 11:29:03 PAGE 5
200 1 ISP_CMD = ISP_CMD | 0x01; // 0000,0001
201 1 ISP_TRIG = 0x46; // 触发ISP_IAP命令
202 1 ISP_TRIG = 0xb9; // 触发ISP_IAP命令
203 1 _nop_();
204 1 ISP_DI();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -