📄 pc与51的快速串行通信.lst
字号:
C51 COMPILER V7.50 PC与51的快速串行通信 05/23/2008 17:58:58 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PC与51的快速串行通信
OBJECT MODULE PLACED IN pc与51的快速串行通信.OBJ
COMPILER INVOKED BY: D:\Program Files\KeilC\C51\BIN\C51.EXE pc与51的快速串行通信.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * file name: define.h
3 * writer: 李慧(LH)
4 * created: 2008-04-12
5 * last changed: 2008-05-22
6 * compiler: KeilC51 7.01
7 * descreption: 单片机接收PC机发送的数据帧子程序
8 * resource: T0,T1
9 *********************************************************************/
10
11 /*起始帧0x68
12 m_frameStatus 0x00接收
13 0x01地址m_addrCode
14 0x02控制码m_controlCode
15 0x03数据长度m_dataLen
16 0x04数据m_dataBuffer[]
17 0x05校验码 m_sysCheckData
18 0x06帧结束m_frameEnd
19
20 m_dataFieldCount//串口接收数据信息计数器
21
22 b_validFrame=0;//置数据帧无效标志
23
24 */
25
26 #include <reg51.h>
27
28 /*****************************************************************************************
29 * 函数名: systeminitial
30 * 功能描述:系统初始化,初始化定时器1T1、串口、系统中断
31 * 创建时间:2008-05-12
32 * 修改时间:2008-05-22
33 ******************************************************************************************/
34 void systeminitial(void)
35 {
36 1 TMOD=0x21; //T1工作在方式2,T0工作在方式0
37 1 PCON=0x00; //设置波特率参数:单倍频,数据传输速率选择
38 1 SCON=0x58; //串口工作方式1选择,并打开接收允许
39 1 ES=1; //允许串行中断
40 1 PS=1; //设置串口中断优先级为高
41 1 TH1=0x0E8; //系统选用11.0592Mhz晶振
42 1 TL1=0x0E8;
43 1 TR1=1; //启动定时器T1
44 1 EA=1; //打开总中断
45 1 }
46
47
48 bit b_validFrame;
49 unsigned char m_frameStatus;
50 unsigned char m_sysCheckData;//自己计算的校验数字
51 unsigned char m_controlCode;
52 unsigned char m_addrCode;
53 unsigned char m_dataLen;
54 unsigned char m_dataFieldCount;
55 unsigned char m_checkData;//接收来的校验数字
C51 COMPILER V7.50 PC与51的快速串行通信 05/23/2008 17:58:58 PAGE 2
56 unsigned char m_frameEnd;
57 unsigned char m_dataBuffer[];
58
59 //};
60
61 //68H Address Control DataLen Datal Data2...DataN SumCheck 16??
62 /*****************************************************************************************
63 * 函数名: corn_isp
64 * 功能描述:串口中断服务子程序
65 * 创建时间:2008-05-12
66 * 修改时间:2008-05-22
67 ******************************************************************************************/
68 void corn_isp(void) interrupt 4 using 3
69 {
70 1 if(RI)
71 1 {
72 2 RI=0;
73 2 if(b_validFrame)//上一个数据帧未处理完
74 2 {
75 3 return;//放弃对当前数据帧的接收
76 3 }
77 2 if(m_frameStatus==0x00) //****串口接收中断处于接收帧起始字节阶段
78 2 {
79 3 if(SBUF!=0x68)//不是有效的帧起始字节
80 3 {
81 4 m_frameStatus=0x00;//串口接收中断状态标志不更新
82 4 }
83 3 else
84 3 {
85 4 m_frameStatus=0x01;//串口接收中断状态标志更新为接收
86 4 }
87 3 }
88 2 else if(m_frameStatus==0x01) //****串口接收中断处于接收数据帧地址码阶段
89 2 {
90 3 m_addrCode=SBUF;//保存地址
91 3 m_frameStatus=0x02;//串口接收中断状态标志更新为控制码阶段
92 3 m_sysCheckData=0x00;//准备进行数据和校验
93 3 }
94 2 else if(m_frameStatus==0x02) //****串口接收中断处于接收控制码阶段
95 2 {
96 3 m_controlCode=SBUF;//保存控制码
97 3 m_frameStatus=0x03;//串口接收中断状态标志更新为接收数据长度
98 3 m_sysCheckData+=m_controlCode;//更新校验和
99 3 }
100 2 else if(m_frameStatus==0x03) //****串口接收中断处于接收数据长度信息阶段
101 2 {
102 3 m_dataLen=SBUF;
103 3 m_frameStatus=0x04;//接收数据
104 3 m_sysCheckData+=m_dataLen;
105 3 m_dataFieldCount=0x00;//串口接收数据信息计数器清零
106 3 }
107 2 else if(m_frameStatus==0x04) //****串口处于接收数据信息阶段
108 2 {
109 3 m_dataBuffer[m_dataFieldCount]=SBUF;
110 3 m_sysCheckData+=m_dataBuffer[m_dataFieldCount];
111 3 m_dataFieldCount++;
112 3 if(m_dataFieldCount==m_dataLen)
113 3 {
114 4 m_frameStatus=0x05;//数据信息接收结束,更新状态
115 4 }
116 3 }
117 2 else if(m_frameStatus==0x05) //****串口处于接收校验码阶段
C51 COMPILER V7.50 PC与51的快速串行通信 05/23/2008 17:58:58 PAGE 3
118 2 {
119 3 m_checkData=SBUF;
120 3 if(m_sysCheckData != m_checkData)
121 3 {
122 4 m_frameStatus=0x00;//复位状态标志
123 4 }
124 3 else
125 3 {
126 4 m_frameStatus=0x06;//更新状态标志为接收结束码
127 4 }
128 3 }
129 2 else if(m_frameStatus==0x06) //****串口接收中断处于接收结束码阶段
130 2 {
131 3 m_frameEnd=SBUF;//保存结束码
132 3 if(m_frameEnd!=0x16)//错误的帧结束标志
133 3 {
134 4 b_validFrame=0;//置数据帧无效标志
135 4 }
136 3 else
137 3 {
138 4 b_validFrame=1;//一个数据帧接收完毕
139 4 }
140 3 m_frameStatus=0x00;//复位状标志,准备接收下一帧数据
141 3 }
142 2 }
143 1 }
144
145 void main(void)
146 {
147 1 systeminitial();
148 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 208 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -