📄 main.lst
字号:
C51 COMPILER V6.12 MAIN 03/13/2007 12:04:03 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\main.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #include <intrins.h>
3 sbit CS_A = P3^3;
4 sbit CS_B = P3^4;
5 sbit CS_C = P3^5;
6 sbit S_SCK = P1^7;
7 sbit S_SDO = P1^6;
8 sbit S_SDI = P1^5;
9 sbit S_LOAD = P3^6;
10 unsigned char read_data[2]=0;
11 unsigned char bdata comdata[2]=0;
12 unsigned char bdata valve[3]=0;
13
14 #define INBUF_LEN 4 //数据长度
15
16 unsigned char inbuf1[INBUF_LEN];
17 unsigned char checksum,count3;
18 bit read_flag=0;
19 sbit tx_enable=P3^2;
20 sbit v1=valve[0]^0;
21 sbit v2=valve[0]^1;
22 sbit v3=valve[0]^2;
23 sbit v4=valve[0]^3;
24 sbit v5=valve[0]^4;
25 sbit v6=valve[0]^5;
26
27 sbit v7= valve[1]^0;
28 sbit v8= valve[1]^1;
29 sbit v9= valve[1]^2;
30 sbit v10=valve[1]^3;
31 sbit v11=valve[1]^4;
32 sbit v12=valve[1]^5;
33
34 sbit v13=valve[2]^0;
35 sbit v14=valve[2]^1;
36 sbit v15=valve[2]^2;
37 sbit v16=valve[2]^3;
38 sbit led_red=valve[2]^4;
39 sbit led_gre=valve[2]^5;
40
41 sbit v1_1=comdata[0]^0;
42 sbit v2_2=comdata[0]^1;
43 sbit v3_3=comdata[0]^2;
44 sbit v4_4=comdata[0]^3;
45 sbit v5_5=comdata[0]^4;
46 sbit v6_6=comdata[0]^5;
47 sbit v7_7=comdata[0]^6;
48 sbit v8_8=comdata[0]^7;
49
50 sbit v9_9= comdata[1]^0;
51 sbit v10_10=comdata[1]^1;
52 sbit v11_11=comdata[1]^2;
53 sbit v12_12=comdata[1]^3;
54 sbit v13_13=comdata[1]^4;
55 sbit v14_14=comdata[1]^5;
C51 COMPILER V6.12 MAIN 03/13/2007 12:04:03 PAGE 2
56 sbit v15_15=comdata[1]^6;
57 sbit v16_16=comdata[1]^7;
58 /*******************************************************************/
59 /* */
60 /* 延时函数 */
61 /* */
62 /*******************************************************************/
63 void delay(int ms)
64 {
65 1 while(ms--)
66 1 {
67 2 unsigned char i;
68 2 for(i=0;i<250;i++)
69 2 {
70 3 _nop_();
71 3 _nop_();
72 3 _nop_();
73 3 _nop_();
74 3 }
75 2 }
76 1 }
77 void write(unsigned char dd)
78 {
79 1 unsigned char i;
80 1 for (i=0;i<8;i++)
81 1 {
82 2 S_SDI=dd&0x80;
83 2 S_SCK=1;
84 2 dd<<=1;
85 2 _nop_();
86 2 _nop_();
87 2 S_SCK=0;
88 2 _nop_();
89 2 _nop_();
90 2 }
91 1 }
92
93 void output__tip2603(unsigned char writedata[3])
94 {
95 1 CS_C=0;
96 1 CS_B=0;
97 1 CS_A=1;
98 1 write(writedata[0]);
99 1 CS_C=0;
100 1 CS_B=1;
101 1 CS_A=0;
102 1 write(writedata[1]);
103 1 CS_C=0;
104 1 CS_B=1;
105 1 CS_A=1;
106 1 write(writedata[2]);
107 1 }
108 void read_74hc589(unsigned char readdata[2])
109 {
110 1 unsigned char i,j,d_dat=0;
111 1 S_LOAD=0;
112 1 S_LOAD=1;
113 1 for(j=0;j<2;j++)
114 1 {
115 2 for (i=0;i<8;i++)
116 2 {
117 3 S_SCK=0;
C51 COMPILER V6.12 MAIN 03/13/2007 12:04:03 PAGE 3
118 3 d_dat<<=1;
119 3 d_dat|=S_SDO;
120 3 S_SCK=1;
121 3 }
122 2 readdata[j]=d_dat;
123 2 }
124 1 }
125
126 void init_serialcomm(void)
127 {
128 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
129 1 TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload
130 1 PCON |= 0x80; //SMOD=1;
131 1 TH1 = 0xFA; //Baud:9600 fosc=11.0592MHz
132 1 IE |= 0x90; //Enable Serial Interrupt
133 1 TR1 = 1; // timer 1 run
134 1 // TI=1;
135 1 }
136
137 //向串口发送一个字符
138 void send_char_com(unsigned char ch)
139 {
140 1 SBUF=ch;
141 1 while(TI==0);
142 1 TI=0;
143 1 }
144
145 //向串口发送一个字符串,strlen为该字符串长度
146 void send_string_com(unsigned char *str,unsigned int strlen)
147 {
148 1 unsigned int k=0;
149 1 tx_enable=1;
150 1 do
151 1 {
152 2 send_char_com(*(str + k));
153 2 k++;
154 2 } while(k < strlen);
155 1 tx_enable=0;
156 1 }
157
158
159 //串口接收中断函数
160 void serial () interrupt 4 using 3
161 {
162 1 if(RI)
163 1 {
164 2 unsigned char ch;
165 2 RI = 0;
166 2 ch=SBUF;
167 2 if(ch>127)
168 2 {
169 3 count3=0;
170 3 inbuf1[count3]=ch;
171 3 checksum= ch-128;
172 3 }
173 2 else
174 2 {
175 3 count3++;
176 3 inbuf1[count3]=ch;
177 3 checksum ^= ch;
178 3 if (count3==(INBUF_LEN-1))// && (!checksum) )
179 3 {
C51 COMPILER V6.12 MAIN 03/13/2007 12:04:03 PAGE 4
180 4 read_flag=1; //如果串口接收的数据达到INBUF_LEN个,且校验没错,
181 4 //就置位取数标志
182 4 }
183 3 }
184 2 }
185 1
186 1 }
187
188
189 void main()
190 {
191 1 init_serialcomm();
192 1 while(1)
193 1 {
194 2 v1=v1_1;
195 2 v2=v2_2;
196 2 v3=v3_3;
197 2 v4=v4_4;
198 2 v5=v5_5;
199 2 v6=v6_6;
200 2 v7=v7_7;
201 2 v8=v8_8;
202 2
203 2 v9=v9_9;
204 2 v10=v10_10;
205 2 v11=v11_11;
206 2 v12=v12_12;
207 2 v13=v13_13;
208 2 v14=v14_14;
209 2 v15=v15_15;
210 2 v16=v16_16;
211 2 output__tip2603(valve);
212 2 CS_C=1;
213 2 CS_B=0;
214 2 CS_A=0;
215 2 read_74hc589(read_data);
216 2 delay(50);
217 2 if(read_flag) //如果取数标志已置位,就将读到的数从串口发出
218 2 {
219 3 read_flag=0; //取数标志清0
220 3 comdata[0]=inbuf1[2];
221 3 comdata[1]=inbuf1[3];
222 3
223 3 send_string_com(read_data,2);
224 3 led_gre=~led_gre;//正在通讯
225 3 led_red=0;
226 3 }
227 2 else
228 2 {
229 3 led_gre=0;
230 3 led_red=1;//通讯停止
231 3 }
232 2
233 2 }
234 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 423 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V6.12 MAIN 03/13/2007 12:04:03 PAGE 5
DATA SIZE = 13 10
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -