📄 text1.lst
字号:
C51 COMPILER V7.06 TEXT1 04/05/2007 20:30:28 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1 BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define _PPDATAR_H
2
3 #include <reg51.h>
4 #include <string.h>
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 /* 握手信号宏定义 */
10 #define CALL 0x24 // 主机呼叫
11 #define OK 0x00 // 从机准备好
12 #define MAXLEN 64 // 缓冲区最大长度
13 uchar buf[MAXLEN];
14 sbit p00 = P0^0; sbit p01 = P0^1; sbit p02 = P0^2; sbit p03 = P0^3;
15 sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3;
16 sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p17=P1^7;
17 bit err;
18 void delay();
19
20 //********************八段码*************************//
21 code unsigned char LEDMAP[] = {
22 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
23 0x7f, 0x6f, 0x00,0x71//共阳显示码,分别显示0、1、2、3、4、5、6、7、8、9、灭、F。
24 };
25 //***********************显示码选择**********************//
26 int DisplayLED(unsigned char j)
27 {
28 1 unsigned int i=0;
29 1 unsigned int x1;
30 1 x1= LEDMAP[(i+j) & 0x0f];
31 1 return x1;
32 1 }
33
34 //***********************显示**********************//
35 void display()
36 {
37 1 P0=0xf7;
38 1 P1=DisplayLED(buf[0]);
39 1 delay();
40 1 P0=0xfb;
41 1 P1=DisplayLED(buf[1]);
42 1 delay();
43 1 P0=0xfd;
44 1 P1=DisplayLED(buf[2]);
45 1 delay();
46 1 P0=0xfe;
47 1 P1=DisplayLED(buf[3]);
48 1 delay();
49 1 }
50 //////////////////////显示FFFF//////////////////////////////
51 void display_f()
52 {
53 1 P0=0xfe;
54 1 P1=DisplayLED(11);
55 1 delay();
C51 COMPILER V7.06 TEXT1 04/05/2007 20:30:28 PAGE 2
56 1 P0=0xfd;
57 1 P1=DisplayLED(11);
58 1 delay();
59 1 P0=0xfb;
60 1 P1=DisplayLED(11);
61 1 delay();
62 1 P0=0xf7;
63 1 P1=DisplayLED(11);
64 1 delay();
65 1 }
66 //************************CRC计算****************************************//
67 uint getcrc(uchar *s,uchar len)
68 {
69 1 uint acc=0,i,j=0;
70 1 while(len--)
71 1 {
72 2 acc=acc^(*s++<<8);
73 2 for(i=0;i++<8;)
74 2 if(acc&0x8000)
75 2 acc=(acc<<1)^0x1021;
76 2 else
77 2 acc=acc<<1;
78 2 }
79 1 return(acc);
80 1 }
81 //*************************delay*********************//
82 void delay()
83 {
84 1 unsigned int i,n;
85 1 n=100;
86 1 for (i=0; i<n; i++) {}
87 1 }
88 //************************进行数据校验****************************************//
89 int chkcrc(uchar *buf,uchar len)
90 {
91 1 uint strcrc;
92 1 strcrc=getcrc(buf,len); //生成接收数据的CRC码
93 1 if(((0xff&buf[len])==(0xff&(strcrc/256)))&&((0xff&buf[len+1])==(0xff&(strcrc%256))))
94 1 //接收的CRC码和生成的CRC码进行比较
95 1 return(0);
96 1 else
97 1 return(-1);
98 1 }
99
100 /* 接收数据函数 */
101 bit recvdata(uchar *buf)
102 {
103 1 uchar i;
104 1 uchar len; // 保存数据长度
105 1 int ecc; // 保存校验字节
106 1
107 1 /* 接收数据长度字节 */
108 1 RI = 0;
109 1 while(!RI);
110 1 len = SBUF;
111 1 RI = 0;
112 1
113 1 /* 接收数据及校验字节 */
114 1 for (i=0;i<len+2;i++)
115 1 {
116 2 while(!RI);
117 2 *buf = SBUF;
C51 COMPILER V7.06 TEXT1 04/05/2007 20:30:28 PAGE 3
118 2 RI = 0;
119 2 buf++;
120 2 }
121 1 *buf = 0; // 表示接收结束
122 1
123 1 /* 进行数据校验 */
124 1 ecc = chkcrc(buf,len);
125 1 if (ecc!=0) // 如果校验错误
126 1
127 1 return 1; // 返回1表示校验错误
128 1 else
129 1 return 0; // 校验成功,返回0
130 1
131 1 }
132
133 void init_serial()
134 {
135 1 TMOD = 0x20; // 定时器T1使用工作方式2
136 1 TH1 = 250;
137 1 TL1 = 250;
138 1 TR1 = 1; // 开始计时
139 1 PCON = 0x80; // SMOD = 1
140 1 SCON = 0x50; // 工作方式1,波特率9600kbit/s,允许接收
141 1 }
142
143 /*串口通信程序 */
144 void tongxin()
145 {
146 1 uchar tmp=0;
147 1 init_serial();
148 1 EA = 0; // 关闭所有中断
149 1
150 1 /* 如果接收到的数据不是CALL,则继续等待 */
151 1 while (tmp!=CALL)
152 1 {
153 2 RI = 0;
154 2 while(!RI)
155 2 tmp = SBUF;
156 2 RI = 0;
157 2 }
158 1
159 1 /* 发送OK信号,表示从机可以接收数据 */
160 1 TI = 0;
161 1 SBUF = OK;
162 1 while(!TI);
163 1 TI = 0;
164 1
165 1 /* 数据接收 */
166 1 err = recvdata(buf); // 校验失败返回1,接收成功返回0
167 1 if(err==1)
168 1 display_f();
169 1 if(err==0)
170 1 display();
171 1
172 1
173 1 }
174 //*************************主函数***********************//
175 void main()
176 {
177 1
178 1 while(1)
179 1 {
C51 COMPILER V7.06 TEXT1 04/05/2007 20:30:28 PAGE 4
180 2 tongxin();
181 2
182 2 }
183 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 430 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 16
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 + -