📄 receive.lst
字号:
C51 COMPILER V8.02 RECEIVE 08/21/2008 13:57:08 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE RECEIVE
OBJECT MODULE PLACED IN receive.OBJ
COMPILER INVOKED BY: C:\Keil\uv3\C51\BIN\C51.EXE receive.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg52.h"
2 #define uchar unsigned char
3 uchar a[12];//记录0-F与和校验字节
4 bit t1s=0; //1秒到标志
5 bit rsucc=0; //接收成功标志
6 bit rstart=0; //开始接收0-F与和校验字节标志
7 sbit SCON7=SCON^7; //帧错误
8 uchar rmath=0; //求和
9 uchar t=0;
10
11 /***********初始化T0T1************/
12 init()
13 {
14 1 SCON=0xd0;//方式3
15 1 TL1=0xfa;
16 1 TH1=0xfa;
17 1 TH0=0x3c;
18 1 TL0=0xb0; //50ms
19 1 TMOD=0x21; //T0工作于16位定时,T1于8位自动重装
20 1 PCON|=0x40; //错误侦测功能
21 1 ET1=0;
22 1 ET0=1;
23 1 TR1=1;
24 1 RI=0;
25 1 //TR0=1;
26 1 EA=1;
27 1 }
28
29 /*********错误要求重发*************/
30 void error()
31 {
32 1 rstart=0; //一有错误就清帧开始位
33 1 rmath=0;
34 1 ACC=0xa6;
35 1 TB8=P;
36 1 SBUF=ACC;
37 1 //P1=ACC;
38 1 }
39
40 /*********接收部分***********/
41 void receive()
42 {
43 1 uchar j,sum;
44 1 unsigned int rsum=0;
45 1 //while(TI)
46 1 //TI=0;
47 1 while(rsucc==0)
48 1 {
49 2 while(RI==0);//等待接收一个完整的数据帧
50 2 {
51 3 RI=0;
52 3 if(SCON7)
53 3 error(); //没有收到停止位,要求重发
54 3 ACC=SBUF;
55 3 //P1=SBUF;
C51 COMPILER V8.02 RECEIVE 08/21/2008 13:57:08 PAGE 2
56 3 if(P^RB8!=0) //奇偶校验
57 3 error();
58 3 if(ACC==0xaa)//首帧正确
59 3 rstart=1;
60 3 if(rstart)
61 3 {
62 4 a[rmath]=SBUF;
63 4 rmath++;
64 4 //P1=SBUF;
65 4 if(rmath==16)
66 4 {
67 5 rmath=0;
68 5 for(j=0;j<16;j++)
69 5 rsum+=a[j];
70 5 sum=rsum;
71 5 //j++;
72 5 if(sum==a[17])
73 5 {
74 6 rstart=0; //全接收后复位
75 6 rsucc=1; //成功接收标志置1
76 6 TR0=1; // 允许中断
77 6 }
78 5 else
79 5 error(); //错误重发
80 5 }//P1=0x40;
81 4 }
82 3 }}}
83
84 /**************T0中断入口**************/
85 void timer0() interrupt 1
86 {
87 1 TL0=0xb0;
88 1 TH0=0x3c;
89 1 t++;
90 1 if(t==20)
91 1 {t1s=1;
92 2 t=0;
93 2 }}
94
95 /*************主函数 ****************/
96 void main()
97 {
98 1 uchar i=0;
99 1 init();
100 1 while(1)
101 1 {
102 2 if(rsucc)
103 2 {
104 3 if(t1s)
105 3 t1s=0;
106 3 P1=a[i]; //依次把帧首字节与0-F分别送到P1口
107 3 i++;
108 3 if(i==16)
109 3 {i=0;
110 4 rsucc=0; //等待下一次
111 4 }
112 3 }
113 2 receive();
114 2 }}
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 RECEIVE 08/21/2008 13:57:08 PAGE 3
CODE SIZE = 204 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -