📄 slave.lst
字号:
C51 COMPILER V7.06 SLAVE 03/28/2005 18:51:49 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SLAVE
OBJECT MODULE PLACED IN slave.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE slave.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------函数声明,变量定义--------------------------------------------------------
2 #include <reg51.h>
3 sbit RE_DE=P1^0;
4
5 #define COUNT 10 // 定义接收缓冲区大小
6 #define ADD 5 //定义设备地址
7 unsigned char buffer[COUNT]; //定义接收缓冲区
8 unsigned char point; //定义接收数据个数指示变量
9
10 void UART_init(); //串口初始化函数
11 void COM_send(void); //串口接收函数
12 unsigned char CLU_checkdata(void);//计算校验位函数
13 //--------------------------------------------------------------------------------------------------
14 // 函数名称: UART_init()串口初始化函数
15 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
16 // 串口接收中断允许,发送中断禁止
17 //--------------------------------------------------------------------------------------------------
18 void UART_init()
19 {
20 1 //初始化串行口和波特率发生器
21 1 SCON =0x0F0; //选择串口工作方式为3,打开接收允许
22 1 TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
23 1 TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
24 1 TL1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
25 1 TR1 =1; //启动定时器T1
26 1 ET1 =0;
27 1 ES=1; //允许串行口中断
28 1 PS=1; //设计串行口中断优先级
29 1 EA =1; //单片机中断允许
30 1 SM2=1; //设备处于地址监听状态
31 1 }
32 //--------------------------------------------------------------------------------------------------
33 // 函数名称: com_interrup()串口接收中断处理函数
34 // 函数功能: 接收包括起始位0xFE,地址位和终止位0xEF在内的十位数据到数据缓冲区,
35 // 地址不匹配,则接收到的是无效数字,不写到接收缓冲区
36 //--------------------------------------------------------------------------------------------------
37 com_interrupt(void) interrupt 4 using 3
38 {
39 1 unsigned char RECEIVR_buffer;
40 1 if(RI)
41 1 { //处理接收中断
42 2 RI=0; //清除中断标志位
43 2 RECEIVR_buffer=SBUF; //接收串口数据
44 2 if(point==0) //如果还没有接收到起始位
45 2 {
46 3 if(RECEIVR_buffer==0xFE) //判断是否起始标志位
47 3 buffer[point++]=RECEIVR_buffer;//起始正确,接收起始位
48 3 else
49 3 point=0; //不是,继续等待起始位
50 3 }
51 2 else if(point==1) //是否地址位
52 2 {
53 3 if(RECEIVR_buffer==ADD) //判断地址是否匹配
54 3 buffer[point++]=RECEIVR_buffer;//地址匹配,接收开始接收
55 3 else
C51 COMPILER V7.06 SLAVE 03/28/2005 18:51:49 PAGE 2
56 3 point=0; //不匹配,继续下一个起始位
57 3 }
58 2 else if(point>0&&point<10) //判断是否接收够十位数据
59 2 buffer[point++]=RECEIVR_buffer; //不够,把接收到的数据放入接收缓存区
60 2 else point=0; //缓冲区已满,清除缓存区内数据重新接收
61 2 }
62 1 if(TI) //串口发送中断
63 1 {
64 2 TI=0; //清除发送中断
65 2 }
66 1 }
67 //--------------------------------------------------------------------------------------------------
68 // 函数名称: COM_send()串口发送函数
69 // 函数功能: 把数据缓冲区的十位数据发送出去
70 //--------------------------------------------------------------------------------------------------
71 void COM_send(void)
72 {
73 1 RE_DE=1; //设置MAX483进入发送状态
74 1 for(point=0;point<=10,TI=1;point++) //连续发送十位数据
75 1 //把缓存区的数据都发送到串口
76 1 {
77 2 SBUF=buffer[point];
78 2 TI=0;
79 2 }
80 1 RE_DE=0; //设置MAX483进入接收状态
81 1 }
82
83 //--------------------------------------------------------------------------------------------------
84 // 函数名称: 主函数
85 // 函数功能: 调度个子函数,完成通信过程
86 //--------------------------------------------------------------------------------------------------
87 void main(void)
88 {
89 1 UART_init(); //初始化串口
90 1
91 1 do
92 1 {
93 2 }
94 1 while(point!=10); //判断数据是否接收完成
95 1 COM_send(); //地址匹配,数据完整接收,调用发送程序通知主机
96 1 SM2=0; //设置为点对点通信状态
97 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 142 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
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 + -