📄 receive1.lst
字号:
C51 COMPILER V8.06 RECEIVE1 05/07/2007 15:04:22 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE RECEIVE1
OBJECT MODULE PLACED IN receive1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE receive1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<stdio.h>
3 #include<absacc.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 sbit COL_RCK=P1^0;
7 sbit COL_DS=P1^1;
8 sbit COL_SCK=P1^2;
9 sbit ROW_RCK=P1^7;
10 sbit ROW_DS=P1^6;
11 sbit ROW_SCK=P1^5;
12 uchar number[56];
13 //从机的波特率设置为4800bit/s,并将串行口设为允许接房事,收,SM2设为1
14 void init_scon()
15 {
16 1 TMOD=0x20;
17 1 TH1=0xf3;
18 1 TL1=0xf3;
19 1 SCON=0xf0;
20 1 PCON=0x80;
21 1 TR1=1;
22 1 }
23 //从机串行接收
24 uchar receive()
25 {
26 1 uchar temp;
27 1 while(RI==0);
28 1 RI=0;
29 1 temp=SBUF;
30 1 return temp;
31 1 }
32 //从机串行发送
33 void send(uchar x)
34 {
35 1 SBUF=x;
36 1 while(TI==0);
37 1 TI=0;
38 1 }
39 void delay()
40 {
41 1 uint i,j;
42 1 for(i=0;i<10;i++)
43 1 for(j=0;j<15;j++);
44 1 }
45 void col_send_data(uchar *p)
46 {
47 1 uint i;
48 1 uchar temp;
49 1 temp=*p;
50 1 COL_SCK=0;
51 1 for(i=0;i<8;i++)
52 1 {
53 2 if(temp&0x80)
54 2 COL_DS=1;
55 2 else
C51 COMPILER V8.06 RECEIVE1 05/07/2007 15:04:22 PAGE 2
56 2 COL_DS=0;
57 2 COL_RCK=0;
58 2 COL_RCK=1;
59 2 temp=temp<<1;
60 2 }
61 1 COL_SCK=1;
62 1 }
63 void row_send_data(uchar value)
64 {
65 1 uint i;
66 1 ROW_SCK=0;
67 1 for(i=0;i<8;i++)
68 1 {
69 2 if(value&0x80)
70 2 ROW_DS=1;
71 2 else
72 2 ROW_DS=0;
73 2 ROW_RCK=0;
74 2 ROW_RCK=1;
75 2 value=value<<1;
76 2 }
77 1 ROW_SCK=1;
78 1 }
79 int main(void)
80 {
81 1
82 1 uchar receive_adr;//从机从主机接收的地址
83 1 uchar receive_data; //从机从主机接收的数据
84 1 uchar *p1,*p2;
85 1 uint i,j,k;
86 1 uchar local_adr;//从机本地地址
87 1 uchar temp;
88 1 init_scon();
89 1 local_adr=0x01; //设问从机的本地地址为0X01
90 1 i=0;
91 1 while(i<56) //不停的接收,直到接收到正确的地址
92 1 {
93 2 if(RB8) //如果SM2=1,且接收到的第9位RB8=1,产生中断请求,将接收到的8位数据送SBUF,
94 2 { //如果RB8为0,则RI不置1,不接收主机发来的数据
95 3 receive_adr=SBUF;
96 3 RI=0;
97 3 }
98 2 if(receive_adr==local_adr)
99 2 { //如果从主机接收到的地址和从机的地址相同
100 3 SM2=0; //则SM2=0,不论RB8是0还是1,都将接收从主机发来的数据
101 3 send(local_adr);
102 3 for(i=0;i<56;i++) //将接收到的数据存储在反冲区数组DATA1中
103 3 {
104 4 receive_data=receive();
105 4 number[i]=receive_data;
106 4 }
107 3 }
108 2 }
109 1 SM2=1;
110 1 while(1)
111 1 {
112 2 p1=number;
113 2 for(i=0;i<48;i++)
114 2 {
115 3 for(j=0;j<30;j++)
116 3 {
117 4 p2=p1;
C51 COMPILER V8.06 RECEIVE1 05/07/2007 15:04:22 PAGE 3
118 4 temp=0xfe;
119 4 for(k=0;k<8;k++)
120 4 {
121 5
122 5 col_send_data(p2);
123 5 delay();
124 5 row_send_data(temp);
125 5 p2++;
126 5 temp=temp<<1|0x01;
127 5 }
128 4 }
129 3 p1++;
130 3 }
131 2 }
132 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 358 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 56 15
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 + -