📄 send.lst
字号:
C51 COMPILER V8.02 SEND 08/21/2008 17:20:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SEND
OBJECT MODULE PLACED IN send.OBJ
COMPILER INVOKED BY: C:\Keil\uv3\C51\BIN\C51.EXE send.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /**************先发0xaa,再发0-F笔段码(要发奇偶检验位TB8),然后发和检验字节********************/
3 #include"reg52.h"
4 #define uchar unsigned char
5 uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
6 0x83,0xc6,0xa1,0x86,0x8e}; //0-F笔段码
7 uchar sum;
8 bit tsucc=1; //开始时假设发送成功
9 sbit P10=P1^0;
10 uchar timemath=0;
11 uchar rdata;
12 /************初始化T1,波特率4800,不倍增,8位自动重装******************/
13 void init()
14 {
15 1 SCON=0xd0;
16 1 TL1=0xfa;
17 1 TH1=0xfa;
18 1 TMOD=0x2f;
19 1 ET1=0;//T1禁止中断,只用于计数(IE)
20 1 TR1=1;
21 1 //ES=1;
22 1 //EA=1;
23 1 }
24
25 /****************0-F和放seg[17],有返回值*******************/
26 unsigned int add()
27 {
28 1 uchar i;
29 1 int sum=0;
30 1 for(i=0;i<16;i++)
31 1 sum+=seg[i];
32 1 return(sum);
33 1 }
34
35 /*************把0-F字节分别发过去******************/
36
37 send()
38 {
39 1 ACC=seg[timemath];
40 1 TB8=P;
41 1 SBUF=ACC;
42 1 timemath++;
43 1 if (timemath==16)
44 1 {timemath=0;
45 2 //P1=0xf0;
46 2 ACC=sum;
47 2 TB8=P;
48 2 SBUF=ACC; //和部分
49 2 while(TI==0);//最后一帧要清TI,防止重发,等待回发是否正确
50 2 TI=0;
51 2 }
52 1 }
53
54 /**************接收部分*****************/
55 void receive()
C51 COMPILER V8.02 SEND 08/21/2008 17:20:12 PAGE 2
56 {
57 1 ACC=SBUF;
58 1 rdata=ACC;
59 1 //P1=ACC;
60 1 if(P^RB8==0&&rdata==0xa5)
61 1 //if(P^RB8!=0||rdata==0xa6)
62 1 {tsucc=0;//发送成功
63 2 }
64 1 else
65 1 {
66 2 tsucc=1;//重发
67 2 ACC=0xa6;
68 2 TB8=P;
69 2 SBUF=ACC;
70 2 while(TI==0);//最后一帧要清TI,防止重发,等待回发是否正确
71 2 TI=0;
72 2 //P1=ACC;
73 2 }
74 1 }
75
76 /***************主函数******************/
77 void main()
78 {
79 1 P10=1;
80 1 //uchar k;
81 1 init();
82 1 while(1)
83 1 if(tsucc)
84 1 {
85 2 P10=~P10;
86 2 tsucc=0;
87 2 sum=add();
88 2 ACC=0xaa;//发帧首标志
89 2 TB8=P;
90 2 SBUF=ACC;
91 2 while(tsucc==0)//等待发送或接收有效 (重发时有用)
92 2 {if(RI==1||TI==1)
93 3 {
94 4 if(TI)
95 4 {TI=0;
96 5 send();
97 5 }
98 4 if(RI)
99 4 {RI=0;
100 5 receive();
101 5 }}
102 3 }}}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 170 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 ----
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 + -