📄 chengxu.lst
字号:
C51 COMPILER V9.00 CHENGXU 03/08/2012 22:00:15 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:串口发送控制继电器开关
5 使用芯片:STC15F104E
6 晶振:12MHZ
7 编译环境:Keil
8 作者:zhangxinchunleo
9 网站:www.ourhc.cn
10 淘宝店:汇诚科技 http://shop36330473.taobao.com
11 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
12
13 *********************************************************************/
14 /********************************************************************
15 单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.
16 单片机接收PC机发送的数据码表如下:
17
18 01、开:PC发送'A';
19 02、关:PC发送'B';
20 03、输出状态查询:PC发送C;单片机返回输出状态‘A’表示开 ‘B’表示关;
21 04、继电器状态取反:PC发送D 继电器状态取反
22 *********************************************************************/
23 #include "reg52.h"
24 #include <intrins.H>
25 #define uchar unsigned char //宏定义字符型变量
26 #define uint unsigned int //宏定义整型变量
27 /********************************************************************
28 eeprom函数声明
29 *********************************************************************/
30 extern void IapIdle(); //操作函数
31 extern uchar IapReadByte(uint addr); //读取函数
32 extern void IapProgramByte(uint addr,uchar dat); //写入函数
33 extern void IapEraseSector(uint addr); //擦除函数
34 /********************************************************************
35 波特率设定
36 *********************************************************************/
37 //#define BAUD 0XF400 //1200bps@ 11.0592MHZ
38 //#define BAUD 0XFA00 //2400bps@ 11.0592MHZ
39 //#define BAUD 0XFD00 //4800bps@ 11.0592MHZ
40 #define BAUD 0XFE80 //9600bps@ 11.0592MHZ
41 //#define BAUD 0XFF40 //19200bps@ 11.0592MHZ
42 //#define BAUD 0XFFA0 //38400bps@ 11.0592MHZ
43 uchar miao,fen,times;
44 uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
45 sbit P33=P3^3; //定义继电器控制输出脚
46
47 /********************************************************************
48 定义特殊寄存器
49 *********************************************************************/
50 sfr AUXR = 0x8E; //辅助寄存器
51 sbit RXB=P3^0;
52 sbit TXB=P3^1;
53 /********************************************************************
54 定义数据类型
55 *********************************************************************/
C51 COMPILER V9.00 CHENGXU 03/08/2012 22:00:15 PAGE 2
56 uchar TBUF,RBUF;
57 uchar TDAT,RDAT;
58 uchar TCNT,RCNT;
59 uchar TBIT,RBIT;
60 uint TING,RING;
61 uint TEND,REND;
62
63 void UART_INIT(); //声明函数
64
65 uchar t,r; //定义数据类型
66 uchar but[16]; //数据存储数组
67 /********************************************************************
68 延时函数
69 *********************************************************************/
70 void delay(uchar t)
71 {
72 1 uchar i,j;
73 1 for(i=0;i<t;i++)
74 1 {
75 2 for(j=13;j>0;j--);
76 2 { ;
77 3 }
78 2 }
79 1 }
80 /********************************************************************
81 定时器0初始化函数
82 *********************************************************************/
83 void TIMER0_INIT(void)
84 {
85 1 TMOD=0X00; //定时器T0设定
86 1 AUXR|=0X80; //辅助寄存器
87 1 TL0=BAUD; //十六位寄存器
88 1 TH0=BAUD>>8; //十六位寄存器
89 1 TR0=1; //开定时器
90 1 ET0=1;
91 1 PT0=1;
92 1 }
93 /********************************************************************
94 定时器1初始化函数
95 *********************************************************************/
96 void TIMER1_INIT(void)
97 {
98 1 TH1=(65536-10000)/256; //对TH1 TL1赋值
99 1 TL1=(65536-10000)%256;
100 1 ET1=1;
101 1 TR1=1; //开始定时
102 1 }
103 /********************************************************************
104 外部中断0初始化
105 *********************************************************************/
106 void Init_exint(void)
107 {
108 1 INT0=1; //下降沿触发
109 1 IT0=1;
110 1 EX0=1;
111 1 }
112 /********************************************************************
113 功能:串口初始化,波特率9600,方式1
114 *********************************************************************/
115 void UART_INIT()
116 {
117 1 TING=0;
C51 COMPILER V9.00 CHENGXU 03/08/2012 22:00:15 PAGE 3
118 1 RING=0;
119 1
120 1 TEND=1;
121 1 REND=0;
122 1
123 1 TCNT=0;
124 1 RCNT=0;
125 1 }
126 /********************************************************************
127 主函数
128 *********************************************************************/
129 void main()
130 {
131 1
132 1 TIMER0_INIT(); //定时器0初始化模拟串口用
133 1 TIMER1_INIT(); //定时器1初始化
134 1 Init_exint();
135 1 times=IapReadByte(0); //读取函数
136 1 EA=1; //开总中断
137 1 UART_INIT(); //串口初始化
138 1
139 1 while(1)
140 1 {
141 2 if(REND)
142 2 {
143 3 REND=0;
144 3 r++;
145 3 //but[r++&0x0f]=RBUF;
146 3 dat=RBUF;
147 3 }
148 2 if(TEND)
149 2 {
150 3 if(t!=r)
151 3 {
152 4 TEND=0;
153 4 //TBUF=dat;
154 4 switch(dat) //接收数据判断
155 4 {
156 5 uchar k;
157 5 k=10;
158 5 case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break; // 开
159 5 case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break; // 关
160 5 case 'C': if(P33==1)
161 5 TBUF = 'A'; // 串口读输出口状态
162 5 if(P33==0)
163 5 TBUF = 'B';
164 5 delay(k);
165 5 dat=0xee;
166 5 break;
167 5 case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break; // 输出口取反
168 5 case 'E': delay(k);TBUF = times;dat=0xee;break; // 串口读取当前设定值
169 5 default:break;
170 5 }
171 4 t++;
172 4 //TBUF=but[t++&0x0f];
173 4 TING=1;
174 4 }
175 3 }
176 2 /********************************************************************
177 2 接收数据判断函数
178 2 *********************************************************************/
179 2
C51 COMPILER V9.00 CHENGXU 03/08/2012 22:00:15 PAGE 4
180 2 }
181 1 }
182
183
184 /********************************************************************
185 定时器T0中断服务函数
186 *********************************************************************/
187 void tm0()interrupt 1 using 1
188 {
189 1 if(RING)
190 1 {
191 2 if(--RCNT==0)
192 2 {
193 3 RCNT=3;
194 3 if(--RBIT==0)
195 3 {
196 4 RBUF=RDAT;
197 4 RING=0;
198 4 REND=1;
199 4 }
200 3 else
201 3 {
202 4 RDAT>>=1;
203 4 if(RXB)
204 4 RDAT|=0X80;
205 4 }
206 3
207 3 }
208 2 }
209 1
210 1 else if(!RXB)
211 1 {
212 2 RING=1;
213 2 RCNT=4;
214 2 RBIT=9;
215 2 }
216 1
217 1 if(--TCNT==0)
218 1 {
219 2 TCNT=3;
220 2 if(TING)
221 2 {
222 3 if(TBIT==0)
223 3 {
224 4 TXB=0;
225 4 TDAT=TBUF;
226 4 TBIT=9;
227 4 }
228 3 else
229 3 {
230 4 TDAT>>=1;
231 4 if(--TBIT==0)
232 4 {
233 5 TXB=1;
234 5 TING=0;
235 5 TEND=1;
236 5 }
237 4 else
238 4 TXB=CY;
239 4
240 4 }
241 3 }
C51 COMPILER V9.00 CHENGXU 03/08/2012 22:00:15 PAGE 5
242 2 }
243 1 }
244
245 /********************************************************************
246 外部中断0服务函数
247 *********************************************************************/
248 void Extern0 (void) interrupt 0 using 0
249 {
250 1 times++;
251 1 if(times==20) //最大设定时间40秒
252 1 times=0;
253 1 IapEraseSector(0); //擦除0地址数据
254 1 IapProgramByte(0,times); //写入0地址数据
255 1
256 1 }
257 /********************************************************************
258 定时1中断服务函数
259 *********************************************************************/
260 void t1(void) interrupt 3 using 2
261 {
262 1
263 1 miao++;
264 1 if(miao==200) //2秒
265 1 {
266 2 miao=0;
267 2 fen++;
268 2 if(fen==times) // times秒
269 2 {
270 3 fen=0;
271 3 P33=!P33; //继电器状态取反
272 3 }
273 2 }
274 1 }
275 /********************************************************************
276 结束
277 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 414 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 38 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 + -