?? uart.lst
字號:
C51 COMPILER V8.16 UART 10/10/2009 14:43:32 PAGE 1
C51 COMPILER V8.16, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c LARGE WARNINGLEVEL(1) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "system.h"
2
3 volatile unsigned char UartSendBuffer[OutLEN]; //發送緩沖
4 volatile unsigned char UartReceiveBuffer[InLEN]; //接收數據緩沖
5 volatile unsigned char *outlast=UartSendBuffer; //最后由中斷傳輸出去的字節位置
6 volatile unsigned char *putlast=UartSendBuffer; //最后放入發送緩沖區的字節位置
7 volatile unsigned char UartSendBufferemptyFlag=1; //緩沖區數據發完標志 發完=1
8 volatile unsigned char UartSendBufferHaveDataFlag=0; //發送緩沖區非空標志 有=1
9
10 volatile unsigned char UartReceiveCounter=0; //接收計數器
11 volatile unsigned char UartRxTimerStartFlag=0; //接收超時計數器啟動標志
12 volatile unsigned char UartWaitForCounter=0; //接收超時計數器
13 volatile unsigned char UartDataReadyFlag=0; //接收完成標志
14
15 //=======================================================================================================
16 // 函數名稱: UartInit
17 //
18 // 功能描述:串口初始化
19 //
20 // 輸 入: void
21 //
22 // 輸 出: void
23 //
24 // 全局變量: UartReceiveCounter ; UartRxTimerStartFlag
25 // 調用模塊: 無
26 //
27 // 作 者: 盧明君
28 // 日 期: 2009年9月15日
29 // 備 注:
30 //-------------------------------------------------------------------------------------------------------
31 // 修改人:
32 // 日 期:
33 // 備 注:
34 //-------------------------------------------------------------------------------------------------------
35 //=======================================================================================================
36 /*
37 void UartInit(void)
38 {
39 SCON = 0x50;
40 //PCON |= 0x80;
41 //AUXR2|= 0x40;
42 //Timer1Init();
43 TR1=0; //停止定時器
44 // TCON=0x00; //定時器控制寄存器 注意:TCON只需操作一次
45 TMOD |= 0x20; //定時器1
46 TL1 = -(SYSCLK/12/32/baud);//0xfa; // -(SYSCLK/12/32/baud); //注意波特率加倍位
47 TH1 = TL1;
48 TR1=1; //啟動定時器1
49 // ET1=1; //打開定時器1中斷
50 UartReceiveCounter=0;
51 UartRxTimerStartFlag=0;
52 }
53 */
54 //=======================================================================================================
55 // 函數名稱: UartSendchar
C51 COMPILER V8.16 UART 10/10/2009 14:43:32 PAGE 2
56 //
57 // 功能描述:放入一個字節到發送緩沖區
58 //
59 // 輸 入: unsigned char ucdata
60 //
61 // 輸 出: void
62 //
63 // 全局變量: outlast ; putlast ; UartSendBuffer[] ; UartSendBufferHaveDataFlag ; UartSendBufferemptyFlag
64 // 調用模塊: 無
65 //
66 // 作 者: 盧明君
67 // 日 期: 2009年9月15日
68 // 備 注:
69 //-------------------------------------------------------------------------------------------------------
70 // 修改人:
71 // 日 期:
72 // 備 注:
73 //-------------------------------------------------------------------------------------------------------
74 //=======================================================================================================
75 void UartSendchar(unsigned char ucdata)
76 {
77 1 ES=0; // 暫停串行中斷,以免數據比較時出錯
78 1 while((((outlast-putlast)==2)&&(outlast > putlast ))||((outlast < putlast)&&(OutLEN-(putlast-outlast)==2)
-))
79 1 {
80 2 ES=1;
81 2 ucdata++;
82 2 ucdata--;
83 2 ES=0;
84 2 }
85 1 *putlast=ucdata; // 放字節進入緩沖區
86 1 putlast++; // 發送緩沖區指針加1
87 1 if (putlast==UartSendBuffer+OutLEN) putlast=UartSendBuffer; // 指針到了頂部換到底部
88 1 UartSendBufferHaveDataFlag=1;
89 1 if (UartSendBufferemptyFlag) // 緩沖區無數據
90 1 {
91 2 UartSendBufferemptyFlag =0;
92 2 SBUF=*outlast; // 未發送完繼續發送
93 2 outlast++; // 最后傳出去的字節位置加1
94 2 if (outlast==UartSendBuffer+OutLEN)outlast=UartSendBuffer; // 地址到頂部回到底部
95 2 if (putlast==outlast)UartSendBufferHaveDataFlag=0; // 數據發送完置發送緩沖區空標志
96 2 } // 緩沖區開始為空,置為有,啟動發送
97 1 ES=1;
98 1 }
99 //=======================================================================================================
100 // 函數名稱: UartSendString
101 //
102 // 功能描述:發送字符串
103 //
104 // 輸 入: unsigned char *str
105 //
106 // 輸 出: void
107 //
108 // 全局變量:
109 // 調用模塊: UartSendchar
110 //
111 // 作 者: 盧明君
112 // 日 期: 2009年9月15日
113 // 備 注:
114 //-------------------------------------------------------------------------------------------------------
115 // 修改人:
116 // 日 期:
C51 COMPILER V8.16 UART 10/10/2009 14:43:32 PAGE 3
117 // 備 注:
118 //-------------------------------------------------------------------------------------------------------
119 //=======================================================================================================
120 void UartSendString(unsigned char *str)
121 {
122 1 while(*str) // 遇到停止符0結束
123 1 {
124 2 UartSendchar(*str++);
125 2 //while(UartSendBufferHaveDataFlag);
126 2 }
127 1 }
128 //=======================================================================================================
129 // 函數名稱: UartSendByte
130 //
131 // 功能描述:發送一串數據
132 //
133 // 輸 入: unsigned char *Startaddr,unsigned char SendByte
134 //
135 // 輸 出: void
136 //
137 // 全局變量:
138 // 調用模塊: UartSendchar
139 //
140 // 作 者: 盧明君
141 // 日 期: 2009年9月15日
142 // 備 注:
143 //-------------------------------------------------------------------------------------------------------
144 // 修改人:
145 // 日 期:
146 // 備 注:
147 //-------------------------------------------------------------------------------------------------------
148 //=======================================================================================================
149 void UartSendByte(unsigned char *Startaddr,unsigned char SendByte)
150 {
151 1 while(SendByte--)
152 1 {
153 2 UartSendchar(*Startaddr++);
154 2 }
155 1 }
156
157 void Uart(void) interrupt 4 using 2
158 {
159 1 if(TI)
160 1 {
161 2 TI=0;
162 2 if (UartSendBufferHaveDataFlag)
163 2 {
164 3 SBUF=*outlast; // 未發送完繼續發送
165 3 outlast++; // 最后傳出去的字節位置加1
166 3 if (outlast==UartSendBuffer+OutLEN)outlast=UartSendBuffer; // 地址到頂部回到底部
167 3 if (putlast==outlast)UartSendBufferHaveDataFlag=0; // 數據發送完置發送緩沖區空標志
168 3 }
169 2 else UartSendBufferemptyFlag =1;
170 2 }
171 1 if(RI)
172 1 {
173 2 RI = 0;
174 2 //==========================================================
175 2 // 若有必要 有待于加入 偶校驗算法 .數據位的bit7位為校驗位
176 2 //==========================================================
177 2 UartReceiveBuffer[UartReceiveCounter++]=SBUF&0x7f;
178 2 UartRxTimerStartFlag=1; // 啟動超時計數器
C51 COMPILER V8.16 UART 10/10/2009 14:43:32 PAGE 4
179 2 UartWaitForCounter=0; // 清超時計數器 // 10ms
180 2 if (UartReceiveCounter>=InLEN)
181 2 {
182 3 UartDataReadyFlag=1;
183 3 //UartReceiveCounter=0;
184 3 REN=0;
185 3 }
186 2 }
187 1 }
188
189
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 674 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 184 7
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
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 + -