📄 chengxu.lst
字号:
C51 COMPILER V8.05a CHENGXU 03/08/2012 13:59:51 PAGE 1
C51 COMPILER V8.05a, 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 波特率设定
29 *********************************************************************/
30 //#define BAUD 0XF400 //1200bps@ 11.0592MHZ
31 //#define BAUD 0XFA00 //2400bps@ 11.0592MHZ
32 //#define BAUD 0XFD00 //4800bps@ 11.0592MHZ
33 #define BAUD 0XFE80 //9600bps@ 11.0592MHZ
34 //#define BAUD 0XFF40 //19200bps@ 11.0592MHZ
35 //#define BAUD 0XFFA0 //38400bps@ 11.0592MHZ
36
37 uchar dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
38 sbit P33=P3^3; //定义继电器控制输出脚
39
40 /********************************************************************
41 定义特殊寄存器
42 *********************************************************************/
43 sfr AUXR = 0x8E; //辅助寄存器
44 sbit RXB=P3^0;
45 sbit TXB=P3^1;
46 /********************************************************************
47 定义数据类型
48 *********************************************************************/
49 uchar TBUF,RBUF;
50 uchar TDAT,RDAT;
51 uchar TCNT,RCNT;
52 uchar TBIT,RBIT;
53 uint TING,RING;
54 uint TEND,REND;
55
C51 COMPILER V8.05a CHENGXU 03/08/2012 13:59:51 PAGE 2
56 void UART_INIT(); //声明函数
57
58 uchar t,r; //定义数据类型
59 uchar but[16]; //数据存储数组
60 /********************************************************************
61 延时函数
62 *********************************************************************/
63 void delay(uchar t)
64 {
65 1 uchar i,j;
66 1 for(i=0;i<t;i++)
67 1 {
68 2 for(j=13;j>0;j--);
69 2 { ;
70 3 }
71 2 }
72 1 }
73 /********************************************************************
74 主函数
75 *********************************************************************/
76 void main()
77 {
78 1
79 1 TMOD=0X00; //定时器T0设定
80 1 AUXR=0X80; //辅助寄存器
81 1 TL0=BAUD; //十六位寄存器
82 1 TH0=BAUD>>8; //十六位寄存器
83 1 TR0=1; //开定时器
84 1 ET0=1;
85 1 PT0=1;
86 1 EA=1; //开总中断
87 1 UART_INIT(); //串口初始化
88 1 while(1) //无线循环
89 1 {
90 2 if(REND)
91 2 {
92 3 REND=0;
93 3 r++;
94 3 //but[r++&0x0f]=RBUF;
95 3 dat=RBUF;
96 3 }
97 2 if(TEND)
98 2 {
99 3 if(t!=r)
100 3 {
101 4 TEND=0;
102 4 // TBUF=dat;
103 4 switch(dat) //接收数据判断
104 4 {
105 5 uchar k;
106 5 k=10;
107 5 case 'A': P33=1;delay(k);TBUF = dat;dat=0xee;break; // 开
108 5 case 'B': P33=0;delay(k);TBUF = dat;dat=0xee;break; // 关
109 5 case 'C': if(P33==1){TBUF = 'A';}if(P33==0){TBUF = 'B';}delay(k);dat=0xee;break; // 读输出口状态
110 5 case 'D': P33=!P33;delay(k);TBUF = dat;dat=0xee;break; // 输出口取反
111 5 default:break; // 跳出
112 5 }
113 4 t++;
114 4 //TBUF=but[t++&0x0f];
115 4 TING=1;
116 4 }
117 3 }
C51 COMPILER V8.05a CHENGXU 03/08/2012 13:59:51 PAGE 3
118 2 /********************************************************************
119 2 接收数据判断函数
120 2 *********************************************************************/
121 2
122 2 }
123 1
124 1 }
125
126
127
128 /********************************************************************
129 定时器T0
130 *********************************************************************/
131 void tm0()interrupt 1 using 1
132 {
133 1 if(RING)
134 1 {
135 2 if(--RCNT==0)
136 2 {
137 3 RCNT=3;
138 3 if(--RBIT==0)
139 3 {
140 4 RBUF=RDAT;
141 4 RING=0;
142 4 REND=1;
143 4 }
144 3 else
145 3 {
146 4 RDAT>>=1;
147 4 if(RXB)RDAT|=0X80;
148 4 }
149 3
150 3 }
151 2 }
152 1 else if(!RXB)
153 1 {
154 2 RING=1;
155 2 RCNT=4;
156 2 RBIT=9;
157 2 }
158 1 if(--TCNT==0)
159 1 {
160 2 TCNT=3;
161 2 if(TING)
162 2 {
163 3 if(TBIT==0)
164 3 {
165 4 TXB=0;
166 4 TDAT=TBUF;
167 4 TBIT=9;
168 4 }
169 3 else
170 3 {
171 4 TDAT>>=1;
172 4 if(--TBIT==0)
173 4 {
174 5 TXB=1;
175 5 TING=0;
176 5 TEND=1;
177 5 }
178 4 else
179 4 {
C51 COMPILER V8.05a CHENGXU 03/08/2012 13:59:51 PAGE 4
180 5 TXB=CY;
181 5 }
182 4 }
183 3 }
184 2 }
185 1 }
186 /********************************************************************
187 功能:串口初始化,波特率9600,方式1
188 *********************************************************************/
189 void UART_INIT()
190 {
191 1 TING=0;
192 1 RING=0;
193 1
194 1 TEND=1;
195 1 REND=0;
196 1
197 1 TCNT=0;
198 1 RCNT=0;
199 1 }
200
201 /********************************************************************
202 结束
203 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 286 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 35 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 + -