📄 serial0.lst
字号:
C51 COMPILER V7.50 SERIAL0 11/15/2005 22:36:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL0
OBJECT MODULE PLACED IN Serial0.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Serial0.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //-----------------------------------------------------------------------------
2 // Net SERIAL.C
3 //
4 // This module handles RS-232 messages and associated tasks
5 //-----------------------------------------------------------------------------
6 #include <string.h>
7 #include "C8051f.h"
8 #include "intrins.h"
9 #include "serial0.h"
10 #include "Func.h"
11
12
13 bit CommRecDataOverflowFlag,FlagRecComm,SendItComm;
14
15 unsigned char CommSendBufferHead, CommSendBufferTail;
16 unsigned char CommRecBufferHead, CommRecBufferTail;
17
18 unsigned char xdata CommSendBuffer[DB_SENDMAXSIZE] _at_ 0 ; //串行口缓冲区定位在内部4K XRAM中
19 unsigned char xdata CommRecBuffer[DB_RECMAXSIZE] _at_ DB_SENDMAXSIZE;
20
21 void Delay1ms(unsigned char T);
22
23 void ClearCommRecBuffer0(void)
24 {
25 1 unsigned char i;
26 1 CommRecBufferHead=CommRecBufferTail=0;
27 1 CommSendBufferHead=CommSendBufferTail=0;
28 1 FlagRecComm=0;
29 1 for (i=0;i<DB_SENDMAXSIZE;i++)
30 1 {
31 2 CommSendBuffer[i]=0;
32 2 }
33 1 for (i=0;i<DB_RECMAXSIZE;i++)
34 1 {
35 2 CommRecBuffer[i]=0;
36 2 }
37 1 }
38
39 void init_serial0(unsigned int BaudRate)
40 {
41 1 ClearCommRecBuffer0();
42 1 OpenComm0(BaudRate);
43 1 }
44
45 void OpenComm0(unsigned int BaudRate)
46 {
47 1 PCON |= 0x80; // SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
48 1 TMOD |= 0x20; // Configure Timer 1 for use by UART0
49 1 CKCON |= 0x10; // Timer 1 derived from SYSCLK
50 1
51 1 // RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
52 1 // RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
53 1 RCAP2H=(65536-(SYSCLK/BaudRate/32))/256;
54 1 RCAP2L=(65536-(SYSCLK/BaudRate/32))%256;
55 1 TH2=RCAP2H;
C51 COMPILER V7.50 SERIAL0 11/15/2005 22:36:24 PAGE 2
56 1 TL2=RCAP2L;
57 1
58 1 CT2 = 0; //T2:timer mode
59 1 TR2 = 1;
60 1
61 1 TCLK = 1;
62 1 RCLK = 1; //说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
63 1 // SIO1只能用T1作为波特率发生器
64 1 //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
65 1 CommSendBufferHead=CommSendBufferTail=0; // set the head and tail to the base of the ring buffer
66 1 CommRecBufferHead=CommRecBufferTail=0;
67 1
68 1 FlagRecComm=0;
69 1 RI0 = 0; // Clear HW_UART receive and transmit
70 1 TI0 = 0; // complete indicators.
71 1 SCON0 = 0x50; // Configure UART0 for mode 1, receiver enabled.
72 1 ES0 = 1; // allow the serial interrupt
73 1 SendItComm = 1;
74 1 }
75
76
77
78 void PutChar0(unsigned char Ch)
79 {
80 1 SBUF0 = Ch;
81 1 while(!TI0)
82 1 ;
83 1 TI0 = 0;
84 1 }
85
86 void SendCommString0(unsigned char *base)
87 {
88 1 unsigned int len;
89 1 unsigned char i;
90 1
91 1 len = strlen(base);
92 1 for(i = 0; i<len; i++)
93 1 {
94 2 PutChar0(base[i]);
95 2 Delay1ms(1);
96 2 }
97 1 }
98
99 void serial_send_(unsigned char *base)
100 {
101 1 SendCommString0(base);
102 1 }
103
104 void CommISR0(void) interrupt 4
105 {
106 1 if (_testbit_(RI0))
107 1 {
108 2 RI0=0;
109 2 if (CommRecBufferTail==CommRecBufferHead)
110 2 {
111 3 CommRecDataOverflowFlag=1; //接收缓冲区溢出
112 3 }
113 2 CommRecBuffer[CommRecBufferTail]=SBUF0; //receive data
114 2 CommRecBufferTail++;
115 2 if (CommRecBufferTail==DB_RECMAXSIZE)
116 2 {
117 3 CommRecBufferTail=0;
C51 COMPILER V7.50 SERIAL0 11/15/2005 22:36:24 PAGE 3
118 3 }
119 2 FlagRecComm=1;
120 2 }
121 1 }
122
123 //从接收缓冲区读数据 ,无数据返回0,有数据返回1
124 bit GetCommChar0(unsigned char *ch)
125 {
126 1 if (CommRecBufferTail==CommRecBufferHead) return 0;
127 1 *ch=CommRecBuffer[CommRecBufferHead];
128 1 CommRecBufferHead++;
129 1 if (CommRecBufferHead==DB_RECMAXSIZE)
130 1 {
131 2 CommRecBufferHead=0;
132 2 }
133 1 if (CommRecBufferTail==CommRecBufferHead) FlagRecComm=0;
134 1 return 1;
135 1 }
136
137
138
139
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 679 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 22 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -