📄 serial1.lst
字号:
C51 COMPILER V7.50 SERIAL1 11/15/2005 22:36:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL1
OBJECT MODULE PLACED IN Serial1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Serial1.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <string.h>
2 #include "C8051f.h"
3 #include "intrins.h"
4 #include "serial1.h"
5 #include "Timer.h"
6
7 extern unsigned char RecCh;
8 extern unsigned char RecFlag;
9
10 bit CommRecDataOverflowFlag1,FlagRecComm1,SendItComm1;
11
12 unsigned char CommSendBufferHead1, CommSendBufferTail1;
13 unsigned char CommRecBufferHead1, CommRecBufferTail1;
14
15 unsigned char xdata CommSendBuffer1[DB_SENDMAXSIZE1];
16 unsigned char xdata CommRecBuffer1[DB_RECMAXSIZE1];
17
18 void ClearCommRecBuffer1(void)
19 {
20 1 unsigned char i;
21 1 CommRecBufferHead1=CommRecBufferTail1=0;
22 1 CommSendBufferHead1=CommSendBufferTail1=0;
23 1 FlagRecComm1=0;
24 1 for (i=0;i<DB_SENDMAXSIZE1;i++)
25 1 {
26 2 CommSendBuffer1[i]=0;
27 2 }
28 1 for (i=0;i<DB_RECMAXSIZE1;i++)
29 1 {
30 2 CommRecBuffer1[i]=0;
31 2 }
32 1 }
33
34 void init_serial1(unsigned int baudr)
35 {
36 1 ClearCommRecBuffer1();
37 1 OpenComm1(baudr);
38 1 }
39
40 void OpenComm1(unsigned int baudr)
41 {
42 1 PCON |= 0x10; // SMOD=1 (HW_UART uses Timer 1 overflow with no divide down).
43 1 TMOD |= 0x20; // Configure Timer 1 for use by UART0
44 1 CKCON |= 0x10; // Timer 1 derived from SYSCLK
45 1
46 1 // RCAP2H=(65536-(SYSCLK/BAUDRATE0/32))/256;
47 1 // RCAP2L=(65536-(SYSCLK/BAUDRATE0/32))%256;
48 1
49 1 RCAP4H=(65536-(SYSCLK/baudr/32))/256;
50 1 RCAP4L=(65536-(SYSCLK/baudr/32))%256;
51 1 TH4=RCAP4H;
52 1 TL4=RCAP4L;
53 1
54 1 // CT2=0; //T2:timer mode
55 1 T4CON |=0x34;
C51 COMPILER V7.50 SERIAL1 11/15/2005 22:36:24 PAGE 2
56 1 // TR2=1;
57 1
58 1 // TCLK = 1;
59 1 // RCLK = 1; //说明:52,对于SIO0,可选择T1(TCLK=0,RCLK=0)或T2(TCLK=1,RCLK=1)作为波特率发生器
60 1 // SIO1只能用T1作为波特率发生器
61 1 //baud=OSC/(32*(65536-[RCAP2H,RCAP2L])
62 1 CommSendBufferHead1 = CommSendBufferTail1=0; // set the head and tail to the base of the ring buffer
63 1 CommRecBufferHead1 = CommRecBufferTail1=0;
64 1 FlagRecComm1=0;
65 1 // RI0=0; // Clear HW_UART receive and transmit
66 1 // TI0=0; // complete indicators.
67 1 // SCON1 &=0xfc;
68 1 SCON1 = 0x50; // Configure UART0 for mode 1, receiver enabled.
69 1 // ES0=1; // allow the serial interrupt
70 1 EIE2 |=0x40;
71 1 SendItComm1=1;
72 1 }
73
74 void PutChar1(unsigned char Ch)
75 {
76 1 SBUF1 = Ch;
77 1 while((SCON1 & 0x02) == 0x0)
78 1 ;
79 1 SCON1 = SCON1 & 0xfd;
80 1 }
81
82 void SendCommString1(unsigned char *base)
83 {
84 1 unsigned int len;
85 1 unsigned char i;
86 1
87 1 len = strlen(base);
88 1 for(i = 0; i<len; i++)
89 1 {
90 2 PutChar1(base[i]);
91 2 Delay1ms(1);
92 2 }
93 1 }
94
95 void serial_send(unsigned char *base)
96 {
97 1 SendCommString1(base);
98 1 }
99
100 void CommISR1(void) interrupt 20
101 {
102 1 if ((SCON1&0x01)==0x01)
103 1 {
104 2 SCON1 &=0xfe;
105 2 RecCh = SBUF1;
106 2 RecFlag = 0x01;
107 2 }
108 1
109 1 }
110
111 //从接收缓冲区读数据 ,无数据返回0,有数据返回1
112 bit GetCommChar1(unsigned char *ch)
113 {
114 1 if (CommRecBufferTail1 == CommRecBufferHead1)
115 1 {
116 2 return 0;
117 2 }
C51 COMPILER V7.50 SERIAL1 11/15/2005 22:36:24 PAGE 3
118 1 *ch = CommRecBuffer1[CommRecBufferHead1];
119 1
120 1 CommRecBufferHead1++;
121 1 if (CommRecBufferHead1 == DB_RECMAXSIZE1)
122 1 {
123 2 CommRecBufferHead1 = 0;
124 2 }
125 1 if (CommRecBufferTail1 == CommRecBufferHead1)
126 1 {
127 2 FlagRecComm1 = 0;
128 2 }
129 1 return 1;
130 1 }
131
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 616 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 278 ----
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 + -