📄 decode.lst
字号:
C51 COMPILER V7.06 DECODE 07/07/2008 21:47:22 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DECODE
OBJECT MODULE PLACED IN decode.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE decode.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<AT89X51.H>
2
3 void sound(unsigned char n);
4 void port_init(void);
5
6 extern unsigned char data beacon_lat[8];//11 ="(244)6.5211N";
7 extern unsigned char data beacon_lon[8];//12 ="(1210)0.1536E";
8 extern unsigned char data recieve[15];//21 ="(244)6.5211N(1210)0.1536E";
9
10 void decode(void)
11 {
12 1 unsigned char data DATB;
13 1 unsigned char data k = 0,i;
14 1 unsigned char column1 = 0xE8; // 1110 1000
15 1 unsigned char column2 = 0xD4; // 1101 0100
16 1 unsigned char column3 = 0xB2; // 1011 0010 监督矩阵
17 1 unsigned char bg,s,s1,s2,s3;
18 1 bit ss1,ss2,ss3,chs;
19 1 port_init();
20 1 // shake hand signal : 8 bits 5A signal for 3 times
21 1 while(1)
22 1 {
23 2 RI = 0;
24 2 while(!RI)
25 2 {}
26 2 if(SBUF == 0x5A)
27 2 k ++;
28 2 else
29 2 k = 0;
30 2 if(k == 3)
31 2 break;
32 2 }
33 1
34 1
35 1 // start
36 1
37 1 for(k = 0;k < 15;k ++)
38 1 {
39 2 RI = 0;
40 2 while(!RI)
41 2 {}
42 2 recieve[k] = SBUF;
43 2 }
44 1
45 1 for(k = 0;k < 15;k ++)
46 1 {
47 2 DATB = recieve[k];
48 2 ss1 = 0;
49 2 ss2 = 0;
50 2 ss3 = 0;
51 2 s1 = DATB & column1;
52 2 s2 = DATB & column2;
53 2 s3 = DATB & column3; // DATB与监督矩阵相乘
54 2 for(i = 0;i < 8;i ++)
55 2 {
C51 COMPILER V7.06 DECODE 07/07/2008 21:47:22 PAGE 2
56 3 ss1 = ss1 ^ (s1 >> i) % 2;
57 3 ss2 = ss2 ^ (s2 >> i) % 2;
58 3 ss3 = ss3 ^ (s3 >> i) % 2; // 从低到高提取上述结果各位异或,完成逻辑矩阵乘法求和的部分
59 3 }
60 2 s1 = ss1;s2 = ss2;s3 = ss3;
61 2 s = s1 * 100 + s2 * 10 + s3; // S为校正子
62 2 switch(s)
63 2 {
64 3 case 0: break; // correct
65 3 case 1: bg = DATB & 2; bg = ~( bg >> 1 | 254 ); DATB = (DATB & (255 - 2)) + bg * 2; break;
66 3 // 第二位错,bg提取出第二位, 右移一位,其它位置1,然后取反, DATB去除第二位影响后与bg相加,最低位为奇
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -