📄 wireless0.lst
字号:
C51 COMPILER V7.00 WIRELESS0 03/14/2005 16:53:05 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE WIRELESS0
OBJECT MODULE PLACED IN wireless0.OBJ
COMPILER INVOKED BY: C:\PROGRA~1\Keil\C51\BIN\c51.exe wireless0.c DB OE SMALL ROM(LARGE)
stmt level source
1 //修改:串行通信变量定义,receive_cmd()函数修改
2
3 #include<reg51.h>
4 #include<intrins.h>
5
6 #define identity 0x01 //仓库号
7 #define columne 0x01 //列号
8
9 #define collect 67 //C ASCII 码为67
10 #define transmit 84
11
12 unsigned char data receive_data[15]; //串行通信变量,设为全局变量确保快速响应
13 unsigned char data command;
14 unsigned char data *cmd_p=&receive_data[0];
15
16 unsigned char k =0;
17 /////////////////////////////////////////
18 //名称:串行口初始化
19 //功能:设置串行通信波特率,开放串行中断
20 void serial_init(void)
21 {
22 1 SCON =0x50; //设置串行通信方式为1
23 1 TMOD =0x20;
24 1 TH1 =0xE8; //串行通信波特率为1200bps
25 1 TL1 =0xE8;
26 1 TR1 =1;
27 1
28 1 ES =1;
29 1 EA =1;
30 1 }
31 ///////////////////////////////////////////
32 //名称:无线字节接收子程序
33 //功能:从串口以查询的方式接收一字节数据,数据返回
34 //////////////////////////////////////////
35 unsigned char receive_byte(void)
36 {
37 1 unsigned char pc_data;
38 1 unsigned char i,j;
39 1
40 1 while(RI==0&&j<255)
41 1 {
42 2 i++; //等待接收一字节数据,设定超限时间值
43 2 if(i>254)
44 2 {
45 3 i =0;
46 3 j++;
47 3 }
48 2 };
49 1
50 1 while(RI==1)
51 1 {
52 2 RI=0;
53 2 pc_data =SBUF;
54 2 break;
55 2 }
C51 COMPILER V7.00 WIRELESS0 03/14/2005 16:53:05 PAGE 2
56 1 return pc_data;
57 1 }
58
59 ////////////////////////////////////////////
60 //名称:串口查询方式接收程序
61 //功能:中断后,关中断使能,以查询方式接收PC命令字节,
62 // 并对命令进行解析,返回命令值
63 /////////////////////////////////////////////
64 unsigned char receive_cmd(us)
65 unsigned char *us;
66 {
67 1 unsigned char i;
68 1 unsigned char data_tmp[3];
69 1 //data_tmp[0] =*(us+1);
70 1 //unsigned char data_chk[15]={0xff,0x55,0x55,0xFF,0xAA,0x01,0x01,84}; //为观察指针变量引入测试变量
71 1 //unsigned char data *us=&data_chk[0];
72 1
73 1 for(i=0;i<15;)
74 1 {
75 2 if( (*(us+i)==0xFF)&( *(us+i+1)==0xAA ) ) //识别帧同步字节
76 2 {
77 3 data_tmp[0] =*(us+i+2); // 此处采用for语句得不到正确值?
78 3 data_tmp[1] =*(us+i+3);
79 3 data_tmp[2] =*(us+i+4);
80 3
81 3 goto next;
82 3 }
83 2 i++;
84 2 }
85 1
86 1 next: if( (data_tmp[0]==identity)&(data_tmp[1]==columne) ) //判断是否为对本2051系统
-
87 1 return (data_tmp[2]); //返回控制指令
88 1 else
89 1 return (0x00);
90 1 }
91
92 ////////////////////////////////////////
93 //名称:出错处理
94 //功能:接收到PC非法命令,作显示提示
95 ////////////////////////////////////////
96 void error_set(void)
97 {
98 1 //printf("Command Error!\n");
99 1 _nop_();
100 1 _nop_();
101 1 }
102
103 /////////////////////////////*
104 /*
105 名称:串口 ISR
106 功能:接收PC主机命令,作相应处理:温度采集,数据传送,初始参数设置
107 ////////////////////////////*/
108 void init1_isr(void) interrupt 4 using 3
109 {
110 1 unsigned char i;
111 1 ES =0;
112 1
113 1 for(i=0;i<15;i++) //接收PC命令帧
114 1 {
115 2 receive_data[i] =receive_byte(); //考虑可能丢失几个字节,使进入死循环
116 2 }
C51 COMPILER V7.00 WIRELESS0 03/14/2005 16:53:05 PAGE 3
117 1
118 1 command=receive_cmd(cmd_p); //接收PC主机命令字节
119 1 //命令处理
120 1 if(command==collect) //温度采集命令
121 1 {
122 2 //send_ds_cmd(); //发温度采集命令给所有DS18B20
123 2 _nop_();
124 2 }
125 1 else if(command==transmit) //数据传送命令
126 1 {
127 2 //send_data_pc(); //EEPROM 数据包发送给PC
128 2 _nop_();
129 2 }
130 1 //else if(command==init) //设置定时器中断间隔
131 1 // {
132 1 // t0_count =t0_data;
133 1 // t1_count0 =t1_data0;
134 1 // t1_count1 =t1_data1;
135 1 // }
136 1 else //非法命令
137 1 error_set(); //非法命令转出错处理
138 1
139 1 //开中断,继续等待PC呼叫
140 1 k++;
141 1 if(k==2)
142 1 while(1);
143 1 serial_init(); //串行口重新初始化
144 1 }
145
146 main()
147 {
148 1 serial_init(); //串行口初始化
149 1
150 1 //使能定时器中断,串行口中断,外部中断0
151 1 IP =0x01; //外部中断0中断优先级最高
152 1 //IT1 =1; //外部中断1为边缘触发
153 1 //ET0 =1;
154 1 //EX0 =1;
155 1 //ET1 =0; //定时器1用于串行通信波特率发生器,禁止中断
156 1 EX1 =0; //外部中断1使能,接收PC命令
157 1
158 1 //无限循环,等待
159 1 while(1);
160 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 280 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 8
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 + -