?? uart.lst
字號:
C51 COMPILER V6.23a UART 09/09/2007 15:51:26 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: e:\my_soft\keil\C51\Bin\c51.exe uart.c DB OE SMALL ROM(LARGE)
stmt level source
1 //*************************************************************************
2 #include <reg52.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define OLEN 3 /* size of serial transmission buffer */
6 unsigned char idata outbuf[OLEN]; /* storage for transmission buffer */
7 unsigned char idata *outlast=outbuf; //最后由中斷傳輸出去的字節位置
8 unsigned char idata *putlast=outbuf; //最后放入發送緩沖區的字節位置
9 #define ILEN 40 //* size of serial receiving buffer */
10 unsigned char idata inbuf[ILEN];
11 unsigned char idata *inlast=inbuf; //最后由中斷進入接收緩沖區的字節位置
12 unsigned char idata *getlast=inbuf; //最后取走的字節位置
13 bit outbufsign0; //最后一個數據覵BUF發完標志 發完=0
14 bit outbufsign; //輸出緩沖區非空標志 有=1
15 bit inbufsign; //接收緩沖區非空標志 有=1
16 bit inbufful; //輸入緩沖區滿標志 滿=1
17 sbit SW=P3^2; //串口收發控
18 extern char data InKey;
19 extern bit OKFlag;
20 //*****************************
21 //放入一個字節到發送緩沖區
22 PutByte(char c)
23 { ES=0; //暫停串行中斷,以免數據比較時出錯?
24 1 while ( (((outlast-putlast)==2) && (outlast > putlast )) || ((outlast < putlast) && (OLEN-(putlast-ou
-tlast)==2)))
25 1 { ES=1;
26 2 c++;c--;
27 2 ES=0;
28 2 }
29 1 *putlast=c; //放字節進入緩沖區
30 1 putlast++; //發送緩沖區指針加一
31 1 if (putlast==outbuf+OLEN) putlast=outbuf; //指針到了頂部換到底部
32 1 if (!outbufsign0) {outbufsign=1;outbufsign0=1;TI=1; } //緩沖區開始為空置為有,啟動發送
33 1 ES=1;
34 1 }
35 //*************************************
36 //從接收緩沖區取一個byte,如不想等待則在調用前檢測inbufsign是否為1。
37 uchar GetByte (void)
38 { char idata c ;
39 1 while (!inbufsign); //緩沖區空等待
40 1 ES=0;
41 1 c= *getlast; //取數據
42 1 getlast++; //最后取走的數據位置加一
43 1 inbufful=0; //輸入緩沖區的滿標志清零
44 1 if (getlast==inbuf+ILEN) getlast=inbuf; //地址到頂部回到底部
45 1 if (getlast==inlast) inbufsign=0; //地址相等置接收緩沖區空空標志,再取數前要檢該標志
46 1 ES=1;
47 1 return (c); //取回數據
48 1 }
49 //*****************************************
50 //串口中斷處理
51 Serial () interrupt 4
52 { if (TI )
53 1 { TI = 0;
54 2 if (outbufsign)
C51 COMPILER V6.23a UART 09/09/2007 15:51:26 PAGE 2
55 2 { SBUF=*outlast; //未發送完繼續發送
56 3 outlast++; //最后傳出去的字節位置加一
57 3 if (outlast==outbuf+OLEN) outlast=outbuf;//地址到頂部回到底部
58 3 if (putlast==outlast) outbufsign=0; //數據發送完置發送緩沖區空標志
59 3 }
60 2 else outbufsign0=0;
61 2 }
62 1 if (RI)
63 1 { RI = 0;
64 2 if(!inbufful)
65 2 { *inlast= SBUF; //放入數據
66 3 inlast++; //最后放入的位置加一
67 3 inbufsign=1;
68 3 if (inlast==inbuf+ILEN) inlast=inbuf;//地址到頂部回到底部
69 3 if (inlast==getlast) inbufful=1; //接收緩沖區滿置滿標志
70 3 }
71 2 }
72 1 }
73 //串口初始化 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200,0xff=57600
74 SerialInit () {
75 1 SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
76 1 TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */
77 1 PCON &= 0x7f;
78 1 TH1 = 0xe8;TL1=0xe8; //速率*2 /* reload value 115200 baud */
79 1 TR1 = 1; /* timer 1 run */
80 1 ES = 1; REN=1; EA=1;// SM2=1; //SM2=1時收到的第9位為1才置位RI標志
81 1 //P1_7=0;
82 1 }
83
84
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 238 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = 43 1
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -