📄 scon.lst
字号:
C51 COMPILER V7.06 SCON 06/10/2005 23:25:34 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SCON
OBJECT MODULE PLACED IN scon.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE scon.c DEBUG OBJECTEXTEND
stmt level source
1 /*串口程序*/
2 /*通道控制*/
3 //工作方式用T2CON的C/T2来选择 [zglike] [7次] 02-11-8 18:32:14
4 //T2有三种操作方式:捕获方式,自动重装方式,波特率发生器。操作方式由T2CON控制位选
5 //择 (1):BCLK+TCLK、CP/RL2两个位为0时TR2为1则操作方式是16位自动装方式
6 // (2):BCLK+TCLK为0、CP/RL2和TR2为1时是16位捕获
7 // (3):BCLK+TCLK为1、TR2为1时是波特率发生器
8
9 #include "Head.h"
10 #include <reg52.h>
11 #define BYTE unsigned char
12 bit data P0_bit;
13
14 //BYTE idata Ctr_rlt[16];
15 void delay11ms(uchar tim);
16 void IniSerial(void)
17 { /* T2定时器初始化 */
18 1 T2CON = 0x30; /*0011000,选择timer2作为波特率发生器*/
19 1 /* T2 in mode 2 autoload */
20 1 TH2 = 0xFF;
21 1 TL2 = 0xDC; /* Baut rate 9600 */
22 1 RCAP2H = 0xFF; /* 11059200 / (9600*32) = 36 */
23 1 RCAP2L = 0xDC;
24 1
25 1 SCON = 0x50; /* SM0 SM1 SM2 REN TB8 RB8 TI RI:9 bit */
26 1
27 1 ES = 1; /* 串口中断允许 1-enable */
28 1 PS = 0; /* 串口中断优先级 1-高,0-低 */
29 1 TR2 = 1; /* Start T2 as baut rate generator */
30 1 EA=1;
31 1 }
32
33
34
35
36 void serial (void) interrupt 4 using 1
37 {
38 1 unsigned char re_pc,zc11;//Tx_se;
39 1 if(RI==1)
40 1 {
41 2 // unsigned char re_pc,Ts; //
42 2 RI=0;
43 2 re_pc=SBUF;
44 2 if((re_pc&0xe0)==0xe0) //是否能正确操作串口
45 2 {
46 3 switch(re_pc&0x0c) //功能选择
47 3 {
48 4 case 0: //家电通道
49 4 if((re_pc&0x10)!=0x10) //是否读(所有)家电通道状态
50 4 {
51 5 SBUF=(P0 & 0xe0) | zc11;
52 5 while(TI==0);
53 5 TI=0;
54 5 }
55 4 else //进行通道控制
C51 COMPILER V7.06 SCON 06/10/2005 23:25:34 PAGE 2
56 4 switch(re_pc&0x03)
57 4 {
58 5 case 0: //CH1
59 5 // P0_bit=CH1;
60 5 // CH1=!P0_bit;
61 5 // if(CH1)
62 5 // SBUF=0x01;
63 5 // else
64 5 // SBUF=0x02;
65 5 // break;
66 5 P0_bit=zc1;
67 5 if(zc1!=1) //通道为闭,进入,开,zc1=0
68 5 {
69 6 CH1=0;delay11ms(200);CH1=1;
70 6 zc1=1;
71 6 }
72 5 else
73 5 {
74 6 CH1=0;delay11ms(200);CH1=1;
75 6 zc1=0;
76 6 }
77 5 //CH1=!P0_bit;
78 5 //P0_bit=zc1;
79 5 //if(P0_bit)
80 5 if(!zc1)
81 5 {SBUF=0x01;
82 6 zc11=0x10;}
83 5 else
84 5 {SBUF=0x02;
85 6 zc11=0x00;}
86 5 break;
87 5
88 5
89 5
90 5 case 1: //CH2
91 5 P0_bit=CH2;
92 5 CH2=!P0_bit;
93 5 if(CH2)
94 5 SBUF=0x01;
95 5 else
96 5 SBUF=0x02;
97 5 break;
98 5 case 2: //CH3
99 5 P0_bit=CH3;
100 5 CH3=!P0_bit;
101 5 if(CH3)
102 5 SBUF=0x01;
103 5 else
104 5 SBUF=0x02;
105 5 break;
106 5 case 3: //CH4
107 5 P0_bit=CH4;
108 5 CH4=!P0_bit;
109 5 if(CH4)
110 5 SBUF=0x01;
111 5 else
112 5 SBUF=0x02;
113 5 break;
114 5 default:
115 5 break;
116 5 }
117 4 break;
C51 COMPILER V7.06 SCON 06/10/2005 23:25:34 PAGE 3
118 4 // case 0xe8:
119 4
120 4 default:
121 4 break;
122 4 }
123 3 //////////////////
124 3 // Ctr_rlt[0]='D';
125 3 // Ctr_rlt[1]='o';
126 3 // Ctr_rlt[2]='n';
127 3 // Ctr_rlt[3]='e';
128 3 // Ctr_rlt[4]='\0';
129 3
130 3
131 3 // Send_tx(Ctr_rlt);
132 3
133 3 }
134 2 else //send "Fail"
135 2 {
136 3 // Ctr_rlt[0]='F';
137 3 // Ctr_rlt[1]='a';
138 3 // Ctr_rlt[2]='i';
139 3 // Ctr_rlt[3]='l';
140 3 // Ctr_rlt[4]='\0';
141 3
142 3
143 3 // Send_tx(Ctr_rlt);
144 3
145 3 }
146 2
147 2 }
148 1
149 1
150 1 }
151 void delay11ms(uchar tim)
152 {
153 1 unsigned int i,j,k;
154 1 for(i=0;i<tim;i++);
155 1 for(j=0;j<30000;j++);
156 1 for(k=0;k<40000;k++);
157 1 }
158
159 ////////////////////////////////
160
161
162 //void Send_tx(unsigned char tx_data[16])
163 //{
164 // unsigned char Tx_se=0;
165 // while(tx_data[Tx_se]!=0)
166 // {
167 // SBUF=tx_data[Tx_se];
168 // while(TI==0);
169 // TI=0;
170 // Tx_se++;
171 // }
172 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 274 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.06 SCON 06/10/2005 23:25:34 PAGE 4
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -