📄 seriele.lst
字号:
C51 COMPILER V7.01 SERIELE 11/22/2002 10:29:10 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE SERIELE
OBJECT MODULE PLACED IN Seriele.OBJ
COMPILER INVOKED BY: D:\KEIL\C51\BIN\C51.EXE Seriele.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #ifndef _SERIAL_H
2 #define _SERIAL_H
3
4 #include "reg66x.H"
5 #include <intrins.h>
6 #include <string.h>
7 //数据类型定义
8 #define uchar unsigned char
9 #define ulong unsigned long
10 #define uint unsigned int
11 //串口状态定义
12 #define RCV_IDH 0 //接收描述符的高8位
13 #define RCV_IDL 1 //接收id的低3位+rtr位+dlc(4位)
14 #define RCV_DATA 2 //接收数据
15
16
17 uchar data Rcv_Status=0; //接收状态字节
18 uchar data Rcv_Point =0; //接收计数
19
20 uchar data Send_Point=0; //发送计数
21
22 uchar idata RcvBuf[0x10]; //接收数据缓冲区
23 uchar idata SendBuf[0x10]; //发送数据缓冲区
24 extern uchar data DispBuf[5];
25
26 bit UartRcvGood;
27
28 void InitUart(void); //初始化串口
29
30 void Exe_Scon(uchar cmd,uchar dlc,uchar *databuf);//串口发送函数
31
32 /*-------------------------------------------------------------------------------------------
33 串口中断函数
34 -------------------------------------------------------------------------------------------*/
35 void Uart_Val(void) interrupt 4 using 3
36 {
37 1 uchar TempData; //临时变量
38 1 if(_testbit_(RI))
39 1 {
40 2 TempData=S0BUF;
41 2 switch(Rcv_Status)
42 2 {
43 3 case RCV_IDH:
44 3 RcvBuf[0]=TempData;
45 3 Rcv_Status++;
46 3 break;
47 3 case RCV_IDL:
48 3 RcvBuf[1]=TempData;
49 3 if((RcvBuf[1]&0x10)!=0) //远程帧
50 3 {
51 4 Rcv_Status=0;
52 4 UartRcvGood=1;
53 4 }
54 3 else //数据帧
55 3 {
C51 COMPILER V7.01 SERIELE 11/22/2002 10:29:10 PAGE 2
56 4 Rcv_Point=2;//TempData&0x0f; //取数据长度
57 4 Rcv_Status++;
58 4 }
59 3 break;
60 3 case RCV_DATA:
61 3 RcvBuf[Rcv_Point]=TempData;
62 3 Rcv_Point++;
63 3 if((Rcv_Point-2)==(RcvBuf[1]&0x0f))
64 3 {
65 4 Rcv_Point=0;
66 4 Rcv_Status=0;
67 4 UartRcvGood=1;
68 4 }
69 3 break;
70 3 default:
71 3 break;
72 3 }
73 2 } //结束if(_testbit(RI))
74 1 if(_testbit_(TI))
75 1 {
76 2 Send_Point++;
77 2 if(Send_Point<(SendBuf[2]+4)) //未发送完毕,继续发送
78 2 S0BUF=SendBuf[Send_Point];
79 2 else
80 2 {
81 3 Send_Point=0;
82 3 }
83 2 }//结束if(_testbit(TI))
84 1 }
85
86
87 /*-------------------------------------------------------------------------------------------
88 函数原型: void InitUart(void)
89 参数说明: 无
90 返回值: 无
91 说明: 用于初始化串口
92 -------------------------------------------------------------------------------------------*/
93 void InitUart(void)
94 {
95 1 S0CON = 0x50; //串口工作方式1
96 1 TMOD |= 0x20; //T1,初值自动重装
97 1 TH1 = 0xfd; //波特率9600bps @ 11,0592M
98 1 TL1 = 0xfd;
99 1 TR1 = 1; //开始计数
100 1 IEN0 |= 0x90; //开放串口中断
101 1
102 1 }
103
104 //
105 void Exe_Scon(uchar cmd,uchar dlc,uchar *databuf)
106 {
107 1 uchar i,bcc=0;
108 1 SendBuf[0] = 0x00;
109 1 SendBuf[1] = cmd;
110 1 SendBuf[2] = dlc;
111 1 memcpy(&(SendBuf+3),databuf,dlc);
112 1 for(i=0; i<dlc+3;i++)
113 1 bcc^=SendBuf[i];
114 1 SendBuf[dlc+3] = bcc;
115 1 Send_Point=0;
116 1 S0BUF = SendBuf[0];
117 1 }
C51 COMPILER V7.01 SERIELE 11/22/2002 10:29:10 PAGE 3
118
119 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 221 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 2
IDATA SIZE = 32 ----
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 + -