📄 nobreakmod2.lst
字号:
C51 COMPILER V7.08 NOBREAKMOD2 01/19/2007 18:36:44 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE NOBREAKMOD2
OBJECT MODULE PLACED IN nobreakmod2.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE nobreakmod2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 ////发射端模拟程序,9600波特率,每次发送 26byte数据。
2 ////发送的数据以FFFE为起始端
3
4 #include <reg52.h> //预处理文件里面定义了特殊寄存器名称如P1
5 sbit P1_0 = P1^0;
6 sbit P2_1 = P2^1;
7 sbit P2_2 = P2^2;
8 sbit P2_3 = P2^3;
9 sbit P2_4 = P2^4;
10 sbit P2_5 = P2^5;
11 sbit P2_6 = P2^6;
12 sbit P2_7 = P2^7;
13
14 char s=0;
15
16 typedef unsigned char uchar;
17 typedef unsigned int uint;
18
19 uint crc; // CRC16 码
20
21 //数据位从高到低时,CRC16/CC1TT校验
22 uint crc16(unsigned char *ptr, unsigned char len)
23 {
24 1 unsigned char i;
25 1 while(len--!=0)
26 1 {
27 2 for(i=0x01;i!=0;i <<= 1)
28 2 {
29 3 if((crc&0x0001)!=0) {crc >>= 1; crc ^= 0x8408;}
30 3 else crc >>= 1;
31 3 if((*ptr&i)!=0) crc ^= 0x8408;
32 3 }
33 2 ptr++;
34 2 }
35 1 return(crc);
36 1 }
37
38
39 void delay()
40 {
41 1 TCON=0;
42 1 TMOD = 0x01; //模式设定为1
43 1 TH0=0xDC; //定时,2ms
44 1 TL0=0x00;
45 1 TR0=1;
46 1 do{}while(!TF0); //等待计数器计数溢出,TF0 变为1;
47 1 TF0=0;
48 1 }
49
50 void main(void)
51 {
52 1 char temp;
53 1 char crc1,crc2;//crc的高位和低位
54 1 char crcbuff [22] = {'a','b','c','d','e','f','g','h','i','j',0x01,0x01,
55 1 0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x01}; //22byte数据
C51 COMPILER V7.08 NOBREAKMOD2 01/19/2007 18:36:44 PAGE 2
56 1 char design[26];
57 1 unsigned char a,b; //在C51 编程中因内存有限尽可能注意变量类型的使用
58 1 uchar *ptr;
59 1 crc = 0; // CRC 初值
60 1 ptr = crcbuff; // 指向第一个 Byte 数据
61 1 crc = crc16(ptr,22);
62 1 crc1=crc&0xFF;
63 1 crc=(crc>>8);
64 1 crc2=(crc&0xFF);
65 1 design[0]=0xFF;design[1]=0xFE;
66 1 design[24]=crc1;
67 1 design[25]=crc2;
68 1 for(a=0;a<=21;a++)
69 1 design[a+2]=crcbuff[a];//定义数据
70 1
71 1
72 1 P2_1=1;
73 1 P2_2=1;
74 1 P2_3=1;
75 1 P2_4=0;
76 1 P2_5=0;
77 1 P2_6=0;
78 1 P2_7=0;
79 1
80 1
81 1 P1_0=0; //端口的初始值为0
82 1 TMOD = 0x02; //计时模式为2
83 1 IE=0; //禁止中断
84 1 TCON=0; //计数器清零
85 1 TH0 = 0xA0; //计数器置初值 9600波特率
86 1 TL0 = 0xA0;
87 1 TR0 = 1; //启动计数器
88 1 do
89 1 {
90 2 for (b=0; b<26; b++)
91 2 {
92 3 temp=design[b];
93 3 for(a=0;a<8;a++)
94 3 {
95 4 s=((temp&0x80)!=0); // 读已定义的数据并写数据到P1_0口:最高位;
96 4 temp<<=1;
97 4 do{}while(!TF0); //等待计数器计数溢出
98 4 P1_0=s;
99 4 TF0=0;
100 4 if(b==25&&a==7) ////////////////发送最后一位!
101 4 {
102 5 do{}while(!TF0); //等待计数器计数溢出
103 5 P1_0=0;
104 5 TF0=0;
105 5 }
106 4
107 4 }
108 3 }
109 2 delay(); //在发送数据之间有一定延时
110 2 TMOD = 0x02; //计数器模式变回为2
111 2 TH0 = 0xA0; //计数器置初值 9600波特率
112 2 TL0 = 0xA0;
113 2 TR0=1; //开始计数
114 2 }while(1);
115 1 }
116
117
C51 COMPILER V7.08 NOBREAKMOD2 01/19/2007 18:36:44 PAGE 3
118
119
120
121
122
123
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 286 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 48
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 + -