📄 iouart.lst
字号:
C51 COMPILER V6.20c IOUART 06/21/2007 21:37:53 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE IOUART
OBJECT MODULE PLACED IN IOuart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IOuart.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"w77e58.h"
2 /**************************************************
3 //串口2队列
4 **************************************************/
5 extern unsigned char xdata xBuf_2[];//384
6 unsigned char xdata *Seri2_ReadPoint;
7 unsigned char xdata *Seri2_WritePoint;
8 unsigned int data Seri2_SendNum;
9 unsigned int data Seri2_ReciNum;
10 sbit BT_SND =P2^6;
11 sbit BT_REC =P2^7;
12 /**********************************************
13
14 IO 口模拟232通讯程序
15
16 占用定时器0
17
18 **********************************************/
19
20 #define F_TM F0
21 #define TIMER0_ENABLE TL0=TH0; TR0=1;
22 #define TIMER0_DISABLE TR0=0;
23
24 sbit ACC0= ACC^0;
25 sbit ACC1= ACC^1;
26 sbit ACC2= ACC^2;
27 sbit ACC3= ACC^3;
28 sbit ACC4= ACC^4;
29 sbit ACC5= ACC^5;
30 sbit ACC6= ACC^6;
31 sbit ACC7= ACC^7;
32
33 void IntTimer0() interrupt 1
34 {
35 1 F_TM=1;
36 1 }
37 //发送一个字符
38 void PSendChar(unsigned char inch)
39 {
40 1 ACC=inch;
41 1
42 1 F_TM=0;
43 1 BT_SND=0; //start bit
44 1 TIMER0_ENABLE; //启动
45 1 while(!F_TM);
46 1
47 1 BT_SND=ACC0; //先送出低位
48 1 F_TM=0;
49 1 while(!F_TM);
50 1
51 1 BT_SND=ACC1;
52 1 F_TM=0;
53 1 while(!F_TM);
54 1
55 1 BT_SND=ACC2;
C51 COMPILER V6.20c IOUART 06/21/2007 21:37:53 PAGE 2
56 1 F_TM=0;
57 1 while(!F_TM);
58 1
59 1 BT_SND=ACC3;
60 1 F_TM=0;
61 1 while(!F_TM);
62 1
63 1 BT_SND=ACC4;
64 1 F_TM=0;
65 1 while(!F_TM);
66 1
67 1 BT_SND=ACC5;
68 1 F_TM=0;
69 1 while(!F_TM);
70 1
71 1 BT_SND=ACC6;
72 1 F_TM=0;
73 1 while(!F_TM);
74 1
75 1 BT_SND=ACC7;
76 1 F_TM=0;
77 1 while(!F_TM);
78 1
79 1 BT_SND=1;
80 1 F_TM=0;
81 1 while(!F_TM);
82 1
83 1 TIMER0_DISABLE; //停止timer
84 1 }
85 //接收一个字符
86 unsigned char PGetChar()
87 {
88 1 TIMER0_ENABLE;
89 1 F_TM=0;
90 1 while(!F_TM); //等过起始位
91 1 ACC0=BT_REC;
92 1
93 1 TL0=TH0;
94 1
95 1 F_TM=0;
96 1 while(!F_TM);
97 1 ACC1=BT_REC;
98 1
99 1 F_TM=0;
100 1 while(!F_TM);
101 1 ACC2=BT_REC;
102 1
103 1 F_TM=0;
104 1 while(!F_TM);
105 1 ACC3=BT_REC;
106 1
107 1 F_TM=0;
108 1 while(!F_TM);
109 1 ACC4=BT_REC;
110 1
111 1 F_TM=0;
112 1 while(!F_TM);
113 1 ACC5=BT_REC;
114 1
115 1 F_TM=0;
116 1 while(!F_TM);
117 1 ACC6=BT_REC;
C51 COMPILER V6.20c IOUART 06/21/2007 21:37:53 PAGE 3
118 1
119 1 F_TM=0;
120 1 while(!F_TM);
121 1 ACC7=BT_REC;
122 1
123 1 F_TM=0;
124 1
125 1 while(!F_TM)
126 1 {
127 2 if(BT_REC){break;}
128 2 }
129 1 TIMER0_DISABLE; //停止timer
130 1 return ACC;
131 1 }
132 /*
133 //检查是不是有起始位
134 bit StartBitOn()
135 {
136 return (BT_REC==0);
137 }
138 */
139 void puart_init(void) {
140 1 TMOD|=0x22; //定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装)
141 1 PCON=00;
142 1
143 1 TR0=0; //在发送或接收才开始使用
144 1 TF0=0;
145 1 TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的
146 1 //timer是 104.167*11.0592/12= 96
147 1 TL0=TH0;
148 1 ET0=1;
149 1 EA=1;
150 1 }
151 extern unsigned char tmp;
152 extern unsigned char Sla;
153 S2send() //串口2发送
154 {
155 1 unsigned char m,n;
156 1 unsigned char front[17]={0x01,0xd1,0x04,0x00,0x00,0x00,0x00,0x00,0x4f,0x00,0x0f,0x00,0x01,0x01,0x00,0x01,
-0x01};
157 1 PSendChar(0x01);
158 1 PSendChar(0x01);
159 1 BT_REC=1;
160 1 for(m=0;m<200;m++)//等接受开始
161 1 for(n=0;n<200;n++){
162 2 if(BT_REC==0) goto send;
163 2 }
164 1 return;
165 1
166 1 send:
167 1 tmp=PGetChar(); //接受
168 1 /*
169 1 for(Seri2_SendNum=336;Seri2_SendNum>=17;Seri2_SendNum--)
170 1 xBuf_2[Seri2_SendNum]=xBuf_2[Seri2_SendNum-17];
171 1 for(Seri2_SendNum=0;Seri2_SendNum<17; Seri2_SendNum++)
172 1 xBuf_2[Seri2_SendNum]=front[Seri2_SendNum];
173 1 xBuf_2[337]=0xaa;
174 1 for(Seri2_SendNum=0;Seri2_SendNum<338; Seri2_SendNum++)
175 1 PSendChar(xBuf_2[Seri2_SendNum]);
176 1 */
177 1 for(m=0; m<17; m++)
178 1 PSendChar(front[m]);
C51 COMPILER V6.20c IOUART 06/21/2007 21:37:53 PAGE 4
179 1 for(m=0;m<16;m++)
180 1 for(n=m;n<16*10;n+=16)
181 1 PSendChar(xBuf_2[n]);
182 1 PSendChar(0xaa);
183 1 }
184 /*
185 for(Seri2_SendNum=0; Seri2_SendNum<17; Seri2_SendNum++)
186 PSendChar(front[Seri2_SendNum]);
187 for(Seri2_ReciNum=0;Seri2_ReciNum<16;Seri2_ReciNum++)
188 for(Seri2_SendNum=Seri2_ReciNum;Seri2_SendNum<16*10;Seri2_SendNum+16)
189 {
190 PSendChar(xBuf_2[Seri2_SendNum]);
191 PSendChar(0xff);
192 }
193 PSendChar(0xaa);
194 */
195
196
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 325 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 18
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 + -