📄 rs232.lst
字号:
C51 COMPILER V7.07 RS232 09/26/2006 08:56:40 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE RS232
OBJECT MODULE PLACED IN rs232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rs232.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************
2
3 COPYRIGHT (C) Himax Technologies, Inc.
4
5 File name : rs232.c
6
7 Description : Implement rs232 relative function
8
9 Author : Taylor
10
11 Create date : 2004.10.04
12
13 Modifications :
14
15 *********************************************************************/
16
17 #define _RS232_C
18
19
20 /********************** Include Section *****************************/
21
22 #include "rs232.h"
23 #include "main.h"
24
25 /**************** Function Implement Section ************************/
26
27 /* ================================================================
28 Name : Init_UART
29 Purpose : Initial UART
30 Passed : None
31 Notes : None
32 ================================================================ */
33
34 void Init_UART(void)
35 {
36 1 SCON = 0x41; /* set SCON to mode 1 8/N/1 disable REN */
37 1 TMOD |= 0x20; /* set T1 to 8 bits auto reload */
38 1 TL1 = TH1 = TH_RELOAD;
39 1 /* init UART RX buf */
40 1 UART_Rx.Buf = UART_Rx_BUF;
41 1 UART_Rx.Head = 0;
42 1 UART_Rx.Tail = 0;
43 1 UART_Rx.Count = 0;
44 1 /* init UART TX buf */
45 1 UART_Tx.Buf = UART_Tx_BUF;
46 1 UART_Tx.Head = 0;
47 1 UART_Tx.Tail = 0;
48 1 UART_Tx.Count = 0;
49 1 /* run it */
50 1 TR1 = 1;
51 1 /* Enable Receive */
52 1 REN = 1;
53 1 /* Serial port enable Timer 1 */
54 1 ES = 1;
55 1 }
C51 COMPILER V7.07 RS232 09/26/2006 08:56:40 PAGE 2
56
57
58 /* ================================================================
59 Name : Puts_UART
60 Purpose : Output One String
61 Passed : None
62 Notes : None
63 ================================================================ */
64
65 void Puts_UART(char *s)
66 {
67 1 Byte i;
68 1
69 1 for(i=0; s[i] != '\0'; i++)
70 1 while(!Put_UART(s[i]));
71 1 }
72
73
74 /* ================================================================
75 Name : Put_UART
76 Purpose : Output One Char
77 Passed : None
78 Notes : None
79 ================================================================ */
80
81 bit Put_UART(Byte c)
82 {
83 1 if(UART_Tx.Count < SIZE_OF_UART_TX_BUF - 1){ /* TX QUEUE is full? */
84 2 UART_Tx.Buf[UART_Tx.Tail++] = c; /* if no, put data into TX QUEUE */
85 2 if(UART_Tx.Tail >= SIZE_OF_UART_TX_BUF) /* roll over? */
86 2 UART_Tx.Tail = 0;
87 2 ES = 0; /* enter critical section */
88 2 if(UART_Tx.Count++ == 0) /* if UART TX stop, retrigger it */
89 2 SBUF = UART_Tx.Buf[UART_Tx.Head];
90 2 ES = 1; /* leave critical section */
91 2 return TRUE; /* process is OK */
92 2 }
93 1 else
94 1 return FALSE; /* buffer is full */
95 1 }
96
97 /* ================================================================
98 Name : HexTobyStr
99 Purpose : Change HEX Number to String on RS232
100 Passed : None
101 Notes : None
102 ================================================================ */
103
104 void HexTobyStr(Byte c)
105 {
106 1 Byte byData;
107 1
108 1 /* transfer HIGH nibble */
109 1 byData = c >> 4;
110 1 if(byData <= 9)
111 1 byStr[0] = byData + 0x30;
112 1 else
113 1 byStr[0] = byData + 55;
114 1
115 1 /* transfer LOW nibble */
116 1 byData = c & 0x0F;
117 1 if(byData <= 9)
C51 COMPILER V7.07 RS232 09/26/2006 08:56:40 PAGE 3
118 1 byStr[1] = byData + 0x30;
119 1 else
120 1 byStr[1] = byData + 55;
121 1 byStr[2] = '\0';
122 1 }
123
124
125 /* ================================================================
126 Name : UART_ISR
127 Purpose : RS232 ISR
128 Passed : None
129 Notes : None
130 ================================================================ */
131
132 void UART_ISR (void) interrupt 4
133 {
134 1 /* TX */
135 1 if(TI){ /* previous data sended is finished */
136 2 TI = 0; /* clear TX INT flag */
137 2 if(++UART_Tx.Head >= SIZE_OF_UART_TX_BUF) /* advanced header pointer */
138 2 UART_Tx.Head = 0;
139 2 if(--UART_Tx.Count != 0) /* still has data need to send? */
140 2 SBUF = UART_Tx.Buf[UART_Tx.Head]; /* if yes. put data into TX BUF */
141 2 }
142 1 /* RX */
143 1 else{ /* received one data */
144 2 RI = 0;
145 2 UART_Rx.Buf[UART_Rx.Tail] = SBUF; /* insert data into queue */
146 2 if(++UART_Rx.Tail >= SIZE_OF_UART_RX_BUF) /* advanced tailer pointer */
147 2 UART_Rx.Tail = 0;
148 2 bUart_rx_event=TRUE;
149 2 UART_Rx.Count++; /* increment data counter of RX QUEUE */
150 2 }
151 1 }
152
153
154 /* ================================================================
155 Name : Get_UART
156 Purpose : Receive String From PC
157 Passed : None
158 Notes : None
159 ================================================================ */
160
161 Byte Get_UART(void)
162 {
163 1 Byte Temp;
164 1 Temp = UART_Rx.Buf[UART_Rx.Head++]; /* get data into temperate storage */
165 1 if(UART_Rx.Head >= SIZE_OF_UART_RX_BUF) /* roll over ? */
166 1 UART_Rx.Head = 0;
167 1 ES = 0; /* enter CS */
168 1 if(--UART_Rx.Count == 0) /* dec counter of RX QUEUE */
169 1 bUart_rx_event = 0; /* disable rx event */
170 1 ES = 1; /* leave CS */
171 1 return Temp; /* return data */
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 288 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.07 RS232 09/26/2006 08:56:40 PAGE 4
DATA SIZE = 8 4
IDATA SIZE = 4 ----
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 + -