📄 mian.lst
字号:
C51 COMPILER V7.06 MIAN 09/18/2007 10:26:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MIAN
OBJECT MODULE PLACED IN mian.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE mian.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"AT89S8252.h"
2
3
4
5 #define TRUE 1
6 #define FALSE 0
7
8 #define uchar unsigned char
9 #define uint unsigned int
10
11 #define LCDCOM_R XBYTE[0x7f01] /*液晶口地址定义*/
12 #define LCDCOM_W XBYTE[0x7f00]
13 #define LCDDATA_R XBYTE[0x7f03]
14 #define LCDDATA_W XBYTE[0x7f02]
15
16 sbit BF=ACC^7; /*液晶忙标志位*/
17
18 /*输入/输出引脚定义*/
19
20 sbit LED =P1^6;
21 sbit MODEM =P1^7;
22 sbit DIN7705=P3^4; /*数据输入输出为同一端口*/
23 sbit DOUT7705=P3^4;
24 sbit CLK7705=P3^5;
25 sbit AD7705_DRDY=P1^5;
26
27
28 /*全局变量定义*/
29 uchar ADH_1;
30 uchar ADL_1;
31 uchar ADH_2;
32 uchar ADL_2;
33
34 uchar k_stat;
35 uchar mod_buff_head;
36 uchar mod_buff_tail;
37 uchar mod_buff[16];
38
39 uchar bdata flag;
40 sbit ch_flag=flag^0;
41 sbit tx_f=flag^1;
42 sbit state=flag^3;
43
44
45 /*发送命令,命令为ASC码形式,待发送命令串数据存放在str缓冲区中*/
46 void mod_comd(uchar *str)
47 {
48 1 uchar i,k;
49 1 do
50 1 {
51 2 if(*str!=0x00) /*字符串结束符*/
52 2 {
53 3 SBUF=*str;
54 3 state=FALSE;
55 3 while(state==FALSE);
C51 COMPILER V7.06 MIAN 09/18/2007 10:26:01 PAGE 2
56 3 str++;
57 3 }
58 2 else break; /*字符串发送完成结束循环*/
59 2 }while(1);
60 1 SBUF=0x0d; /*发送回车符,命令必须以回车符结尾*/
61 1 state=FALSE;
62 1 for(i=0;i<250;i++)
63 1 for(k=0;k<16;k++);
64 1 }
65
66 /*发送数据函数,发送的数据存在缓冲区p中,字符数为n*/
67 void mod_data(uchar *p,uchar n)
68 {
69 1 uchar i;
70 1 for(i=0;i<n;i++)
71 1 {
72 2 SBUF=*p;
73 2 state=FALSE;
74 2 while(state==FALSE);
75 2 p++;
76 2 }
77 1 state=FALSE;
78 1 }
79
80 /*检测四个开关输入量,检测后的状态存入变量k_stat中,以供显示和发送*/
81 void test_kio(void)
82 {
83 1 P1=P1|0x0f;
84 1 k_stat=P1;
85 1 k_stat&=0x0f;
86 1 }
87
88
89 /*主函数*/
90
91 void main (void)
92 {
93 1 uchar i,j,k;
94 1
95 1 MODEM=1; /*关MODEM电源开关*/
96 1 for(i=0;i<20;i++)
97 1 for(j=0;j<150;j++) /*总共延迟时间20*150*150=450000*0.2=90ms*/
98 1 for(k=0;k<150;k++);
99 1
100 1 MODEM=0;
101 1
102 1 WMCON|=PS0_; /*看门狗周期2048ms*/
103 1 WMCON|=PS1_;
104 1 WMCON|=PS2_;
105 1 WMCON|=WDTEN_; /*使能片内看门狗*/
106 1
107 1 ES=0; /*关串口中断以免干扰初始化*/
108 1
109 1 WMCON|=WDTRST_; /*喂狗*/
110 1
111 1 tx_f=0; /*清中断标志位,未发生中断*/
112 1 init();
113 1
114 1 for(i=0;i<50;i++)
115 1 {
116 2 for(j=0;j<150;j++)
117 2 for(k=0;k<150;k++);
C51 COMPILER V7.06 MIAN 09/18/2007 10:26:01 PAGE 3
118 2
119 2 WMCON|=WDTRST_; /*喂狗*/
120 2 }
121 1 init_lcd();
122 1
123 1 test_kio(); /*A/D转换结果默认为零*/
124 1
125 1 ADH_1=0;
126 1 ADL_1=0;
127 1 ADH_2=0;
128 1 ADL_2=0;
129 1
130 1
131 1
132 1 ES=1;
133 1
134 1 modem_init(); /*MODEM初始化*/
135 1
136 1 for(i=0;i<50;i++)
137 1 for(j=0;j<250;j++);
138 1
139 1 tx_f=0; /*清通信标志(接收中断标志位)*/
140 1
141 1 /*缓冲区尾指针必须清零,以便从头存放接收的数据*/
142 1
143 1 mod_buff_tail=0;
144 1 for(i=0;i<16;i++)
145 1 mod_buff[i]=0;
146 1
147 1 while(!tx_f) /*接收中断发生,表示有振铃信号*/
148 1 {
149 2 WMCON|=WDTRST_; /*喂狗*/
150 2 ch_flag=0;
151 2 AD7705_init(ch_flag); /*通道0初始化*/
152 2 readfromda7705(ch_flag);/*读取通道结果*/
153 2
154 2 delay();
155 2
156 2 ch_flag=1;
157 2 AD7705_init(ch_flag); /*通道1初始化*/
158 2 readfromda7705(ch_flag);/*读取通道结果*/
159 2
160 2 test_kio(); /*刷新显示*/
161 2
162 2
163 2 LED=!LED; /*工作灯闪亮*/
164 2 }
165 1
166 1 tx();
167 1 while(1);
168 1 }
169
170
171
172 /*串行中断函数*/
173 void SCON_int (void ) interrupt 4 using 2
174 {
175 1 if(RI==1) /*如果可以接收*/
176 1 {
177 2 RI=0; /*清除接收标志*/
178 2 tx_f=1; /*可以开始通信*/
179 2
C51 COMPILER V7.06 MIAN 09/18/2007 10:26:01 PAGE 4
180 2 mod_buff[mod_buff_tail]=SBUF;
181 2 mod_buff_tail=(mod_buff_tail+1)%0x10; /*为什么%0x10???*/
182 2 }
183 1 if(TI==1)
184 1 {
185 2 TI=0;
186 2 state=TRUE; /*发送完成则志位完成标志*/
187 2 }
188 1 }
189
190
191
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 369 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 23 2
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -