|
你贏了,這是前幾天給用戶做的一個商業(yè)項目的一個文件,100多行代碼編譯生成了300個字節(jié)的二進制文件,不爭論,對不起你,誤導(dǎo)了你。
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 1
C51 COMPILER V9.60.7.0, COMPILATION OF MODULE UART1
OBJECT MODULE PLACED IN .\OBJ\UART1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\UART1.C LARGE OMF2 OPTIMIZE(7,SPEED) BROWSE DEBUG CODE PRINT(.\LST\UART
-1.lst) TABS(2) OBJECT(.\OBJ\UART1.obj)
line level source
1 #define __UART1_C_
2 /*
3 串口1 的波特率是可變的,其波特率可由定時器1 或者定時器2 產(chǎn)生。
4 當(dāng)定時器采用1T 模式時(12倍速),相應(yīng)的波特率的速度也會相應(yīng)提高12 倍。
5 */
6
7 #include "CONFIG.H"
8
9 #define DEBUG_PRT
10
11 //串口1用于程序調(diào)試信息輸出
12 void SetUart1(void) {
13 1
14 1 #ifdef DEBUG_PRT
15 1 //串口1工作在8位數(shù)據(jù)模式1,允許接收數(shù)據(jù)
16 1 SCON |= B0101_0000;
17 1 //使用定時器2作為波特率發(fā)生器
18 1 AUXR |= B0000_0001;
19 1 //中斷為次低優(yōu)先級
20 1 IP |= B0001_0000;
21 1 IPH &= B1110_1111;
22 1 //允許中斷
23 1 IE |= B0001_0000;
24 1 #else
#endif
26 1 }
27
28 #ifdef DEBUG_PRT
29 //串口1用于輸出調(diào)試信息
30 #define cbhUart1_BufSize 250
31 char vrgbhUart1_Buf[cbhUart1_BufSize];
32 U8 data vbhEmptyUart1 =0;
33 U8 data vbhGetUart1 = 0;
34 BOOL vfUart1_BufSize_Empty = TRUE;
35
36 char vrgbhUart1R_Buf[cbhUart1_BufSize];
37 U8 data vbhEmptyUart1R =0;
38 U8 data vbhGetUart1R = 0;
39 BOOL vfUart1R_BufSize_Full = FAIL;
40
41 //將串口接收數(shù)據(jù)保存到緩存區(qū)
42 void ReceUart1R_Buf(U8 bhRece) {
43 1 U8 data bhTemp;
44 1
45 1 bhTemp=vbhEmptyUart1R+1;
46 1 if(bhTemp>=cbhUart1_BufSize)
47 1 bhTemp=0;
48 1 if(bhTemp!=vbhGetUart1R) {
49 2 vrgbhUart1R_Buf[vbhEmptyUart1R]=bhRece;
50 2 vbhEmptyUart1R=bhTemp;
51 2 }
52 1 else
53 1 vfUart1R_BufSize_Full = TRUE;
54 1 }
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 2
55
56 //從接收緩沖區(qū)取一個字節(jié)數(shù)據(jù)
57 BOOL GetUart1R_Buf(U8 *pbh) {
58 1 U8 data bhTemp;
59 1 BOOL fGetOk = FAIL;
60 1
61 1 if(vbhEmptyUart1R!=vbhGetUart1R) {
62 2 (*pbh)=vrgbhUart1R_Buf[vbhGetUart1R];
63 2 bhTemp=vbhGetUart1R+1U;
64 2 if(bhTemp>=cbhUart1_BufSize)
65 2 bhTemp=0;
66 2 vbhGetUart1R=bhTemp;
67 2 vfUart1R_BufSize_Full = FAIL;
68 2 fGetOk = TRUE;
69 2 }
70 1 return(fGetOk);
71 1 }
72
73 //從緩沖區(qū)取數(shù)據(jù)發(fā)送到串口
74 void SendUart1Buf(void) {
75 1 U8 data bhTemp;
76 1
77 1 if(vbhEmptyUart1!=vbhGetUart1) {
78 2 SBUF=vrgbhUart1_Buf[vbhGetUart1];
79 2 bhTemp=vbhGetUart1+1U;
80 2 if(bhTemp>=cbhUart1_BufSize)
81 2 bhTemp=0;
82 2 vbhGetUart1=bhTemp;
83 2 }
84 1 else
85 1 vfUart1_BufSize_Empty = TRUE;
86 1 }
87
88 //保存數(shù)據(jù)到發(fā)送緩沖區(qū)
89 char putchar(char bhchar) {
90 1 U8 data bhTemp;
91 1 char data bhRet = '\0';
92 1
93 1 bhTemp=vbhEmptyUart1+1;
94 1 if(bhTemp>=cbhUart1_BufSize)
95 1 bhTemp=0;
96 1 if(bhTemp!=vbhGetUart1) {
97 2 vrgbhUart1_Buf[vbhEmptyUart1]=bhchar;
98 2 bhRet=bhchar;
99 2 vbhEmptyUart1=bhTemp;
100 2 if(vfUart1_BufSize_Empty) {
101 3 vfUart1_BufSize_Empty = FAIL;
102 3 TI = 1;
103 3 }
104 2 }
105 1 return(bhRet);
106 1 }
107 #endif
108
109
110 void DebugPrt(char *fmt, ...) {
111 1
112 1 va_list arg_ptr;
113 1 va_start (arg_ptr, fmt);
114 1 #ifdef DEBUG_PRT
115 1 vprintf (fmt, arg_ptr);
116 1 #endif
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 3
117 1 va_end (arg_ptr);
118 1 }
119
120 #ifdef DEBUG_PRT
121 //串口1用于調(diào)試信息輸出
122 void Uart1(void) interrupt 4 {
123 1
124 1 if(RI) {
125 2 RI=0;
126 2 ReceUart1R_Buf(SBUF);
127 2 }
128 1 if(TI) {
129 2 TI=0;
130 2 SendUart1Buf();
131 2 }
132 1 }
133 #endif
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION SetUart1 (BEGIN)
; SOURCE LINE # 12
; SOURCE LINE # 16
0000 439850 ORL SCON,#050H
; SOURCE LINE # 18
0003 438E01 ORL AUXR,#01H
; SOURCE LINE # 20
0006 43B810 ORL IP,#010H
; SOURCE LINE # 21
0009 53B7EF ANL IPH,#0EFH
; SOURCE LINE # 23
000C 43A810 ORL IE,#010H
; SOURCE LINE # 26
000F 22 RET
; FUNCTION SetUart1 (END)
; FUNCTION _ReceUart1R_Buf (BEGIN)
; SOURCE LINE # 42
;---- Variable 'bhRece' assigned to Register 'R7' ----
; SOURCE LINE # 45
0000 E500 R MOV A,vbhEmptyUart1R
0002 04 INC A
0003 F500 R MOV bhTemp,A
; SOURCE LINE # 46
0005 C3 CLR C
0006 94FA SUBB A,#0FAH
0008 4003 JC ?C0002
; SOURCE LINE # 47
000A E4 CLR A
000B F500 R MOV bhTemp,A
000D ?C0002:
; SOURCE LINE # 48
000D E500 R MOV A,bhTemp
000F 6500 R XRL A,vbhGetUart1R
0011 6011 JZ ?C0003
; SOURCE LINE # 49
0013 7400 R MOV A,#LOW vrgbhUart1R_Buf
0015 2500 R ADD A,vbhEmptyUart1R
0017 F582 MOV DPL,A
0019 E4 CLR A
001A 3400 R ADDC A,#HIGH vrgbhUart1R_Buf
001C F583 MOV DPH,A
001E EF MOV A,R7
001F F0 MOVX @DPTR,A
; SOURCE LINE # 50
0020 850000 R MOV vbhEmptyUart1R,bhTemp
; SOURCE LINE # 51
0023 22 RET
0024 ?C0003:
; SOURCE LINE # 53
0024 D200 R SETB vfUart1R_BufSize_Full
; SOURCE LINE # 54
0026 ?C0005:
0026 22 RET
; FUNCTION _ReceUart1R_Buf (END)
; FUNCTION _GetUart1R_Buf (BEGIN)
; SOURCE LINE # 57
;---- Variable 'pbh' assigned to Register 'R1/R2/R3' ----
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 5
; SOURCE LINE # 59
0000 C200 R CLR fGetOk
; SOURCE LINE # 61
0002 E500 R MOV A,vbhEmptyUart1R
0004 6500 R XRL A,vbhGetUart1R
0006 6023 JZ ?C0006
; SOURCE LINE # 62
0008 7400 R MOV A,#LOW vrgbhUart1R_Buf
000A 2500 R ADD A,vbhGetUart1R
000C F582 MOV DPL,A
000E E4 CLR A
000F 3400 R ADDC A,#HIGH vrgbhUart1R_Buf
0011 F583 MOV DPH,A
0013 E0 MOVX A,@DPTR
0014 120000 E LCALL ?C?CSTPTR
; SOURCE LINE # 63
0017 E500 R MOV A,vbhGetUart1R
0019 04 INC A
001A F500 R MOV bhTemp,A
; SOURCE LINE # 64
001C C3 CLR C
001D 94FA SUBB A,#0FAH
001F 4003 JC ?C0007
; SOURCE LINE # 65
0021 E4 CLR A
0022 F500 R MOV bhTemp,A
0024 ?C0007:
; SOURCE LINE # 66
0024 850000 R MOV vbhGetUart1R,bhTemp
; SOURCE LINE # 67
0027 C200 R CLR vfUart1R_BufSize_Full
; SOURCE LINE # 68
0029 D200 R SETB fGetOk
; SOURCE LINE # 69
002B ?C0006:
; SOURCE LINE # 70
002B A200 R MOV C,fGetOk
; SOURCE LINE # 71
002D 22 RET
; FUNCTION _GetUart1R_Buf (END)
; FUNCTION SendUart1Buf (BEGIN)
; SOURCE LINE # 74
; SOURCE LINE # 77
0000 E500 R MOV A,vbhEmptyUart1
0002 6500 R XRL A,vbhGetUart1
0004 601F JZ ?C0009
; SOURCE LINE # 78
0006 7400 R MOV A,#LOW vrgbhUart1_Buf
0008 2500 R ADD A,vbhGetUart1
000A F582 MOV DPL,A
000C E4 CLR A
000D 3400 R ADDC A,#HIGH vrgbhUart1_Buf
000F F583 MOV DPH,A
0011 E0 MOVX A,@DPTR
0012 F599 MOV SBUF,A
; SOURCE LINE # 79
0014 E500 R MOV A,vbhGetUart1
0016 04 INC A
0017 F500 R MOV bhTemp,A
; SOURCE LINE # 80
0019 C3 CLR C
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 6
001A 94FA SUBB A,#0FAH
001C 4003 JC ?C0010
; SOURCE LINE # 81
001E E4 CLR A
001F F500 R MOV bhTemp,A
0021 ?C0010:
; SOURCE LINE # 82
0021 850000 R MOV vbhGetUart1,bhTemp
; SOURCE LINE # 83
0024 22 RET
0025 ?C0009:
; SOURCE LINE # 85
0025 D200 R SETB vfUart1_BufSize_Empty
; SOURCE LINE # 86
0027 ?C0012:
0027 22 RET
; FUNCTION SendUart1Buf (END)
; FUNCTION _putchar (BEGIN)
; SOURCE LINE # 89
;---- Variable 'bhchar' assigned to Register 'R7' ----
; SOURCE LINE # 91
0000 E4 CLR A
0001 F500 R MOV bhRet,A
; SOURCE LINE # 93
0003 E500 R MOV A,vbhEmptyUart1
0005 04 INC A
0006 F500 R MOV bhTemp,A
; SOURCE LINE # 94
0008 C3 CLR C
0009 94FA SUBB A,#0FAH
000B 4003 JC ?C0013
; SOURCE LINE # 95
000D E4 CLR A
000E F500 R MOV bhTemp,A
0010 ?C0013:
; SOURCE LINE # 96
0010 E500 R MOV A,bhTemp
0012 6500 R XRL A,vbhGetUart1
0014 6019 JZ ?C0014
; SOURCE LINE # 97
0016 7400 R MOV A,#LOW vrgbhUart1_Buf
0018 2500 R ADD A,vbhEmptyUart1
001A F582 MOV DPL,A
001C E4 CLR A
001D 3400 R ADDC A,#HIGH vrgbhUart1_Buf
001F F583 MOV DPH,A
0021 EF MOV A,R7
0022 F0 MOVX @DPTR,A
; SOURCE LINE # 98
0023 F500 R MOV bhRet,A
; SOURCE LINE # 99
0025 850000 R MOV vbhEmptyUart1,bhTemp
; SOURCE LINE # 100
0028 300004 JNB vfUart1_BufSize_Empty,?C0014
; SOURCE LINE # 101
002B C200 R CLR vfUart1_BufSize_Empty
; SOURCE LINE # 102
002D D299 SETB TI
; SOURCE LINE # 103
; SOURCE LINE # 104
002F ?C0014:
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 7
; SOURCE LINE # 105
002F AF00 R MOV R7,bhRet
; SOURCE LINE # 106
0031 22 RET
; FUNCTION _putchar (END)
; FUNCTION _DebugPrt (BEGIN)
; SOURCE LINE # 110
0000 900000 R MOV DPTR,#fmt
0003 EB MOV A,R3
0004 F0 MOVX @DPTR,A
0005 A3 INC DPTR
0006 EA MOV A,R2
0007 F0 MOVX @DPTR,A
0008 A3 INC DPTR
0009 E9 MOV A,R1
000A F0 MOVX @DPTR,A
; SOURCE LINE # 113
000B 900000 R MOV DPTR,#arg_ptr
000E 7401 MOV A,#01H
0010 F0 MOVX @DPTR,A
0011 A3 INC DPTR
0012 7400 R MOV A,#HIGH fmt+03H
0014 F0 MOVX @DPTR,A
0015 A3 INC DPTR
0016 7400 R MOV A,#LOW fmt+03H
0018 F0 MOVX @DPTR,A
; SOURCE LINE # 115
0019 900000 R MOV DPTR,#arg_ptr
001C E0 MOVX A,@DPTR
001D F9 MOV R1,A
001E A3 INC DPTR
001F E0 MOVX A,@DPTR
0020 FA MOV R2,A
0021 A3 INC DPTR
0022 E0 MOVX A,@DPTR
0023 900000 E MOV DPTR,#?_vprintf?BYTE+03H
0026 C9 XCH A,R1
0027 F0 MOVX @DPTR,A
0028 A3 INC DPTR
0029 EA MOV A,R2
002A F0 MOVX @DPTR,A
002B A3 INC DPTR
002C E9 MOV A,R1
002D F0 MOVX @DPTR,A
002E 900000 R MOV DPTR,#fmt
0031 E0 MOVX A,@DPTR
0032 FB MOV R3,A
0033 A3 INC DPTR
0034 E0 MOVX A,@DPTR
0035 FA MOV R2,A
0036 A3 INC DPTR
0037 E0 MOVX A,@DPTR
0038 F9 MOV R1,A
0039 120000 E LCALL _vprintf
; SOURCE LINE # 117
003C 900000 R MOV DPTR,#arg_ptr
003F E4 CLR A
0040 F0 MOVX @DPTR,A
0041 A3 INC DPTR
0042 F0 MOVX @DPTR,A
0043 A3 INC DPTR
C51 COMPILER V9.60.7.0 UART1 11/22/2023 13:28:21 PAGE 8
0044 F0 MOVX @DPTR,A
; SOURCE LINE # 118
0045 22 RET
; FUNCTION _DebugPrt (END)
; FUNCTION Uart1 (BEGIN)
0000 C0E0 PUSH ACC
0002 C083 PUSH DPH
0004 C082 PUSH DPL
0006 C0D0 PUSH PSW
0008 75D000 MOV PSW,#00H
000B C007 PUSH AR7
; SOURCE LINE # 122
; SOURCE LINE # 124
000D 309807 JNB RI,?C0018
; SOURCE LINE # 125
0010 C298 CLR RI
; SOURCE LINE # 126
0012 AF99 MOV R7,SBUF
0014 120000 R LCALL _ReceUart1R_Buf
; SOURCE LINE # 127
0017 ?C0018:
; SOURCE LINE # 128
0017 309905 JNB TI,?C0020
; SOURCE LINE # 129
001A C299 CLR TI
; SOURCE LINE # 130
001C 120000 R LCALL SendUart1Buf
; SOURCE LINE # 131
; SOURCE LINE # 132
001F ?C0020:
001F D007 POP AR7
0021 D0D0 POP PSW
0023 D082 POP DPL
0025 D083 POP DPH
0027 D0E0 POP ACC
0029 32 RETI
; FUNCTION Uart1 (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 306 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 500 46
PDATA SIZE = ---- ----
DATA SIZE = 4 5
IDATA SIZE = ---- ----
BIT SIZE = 2 1
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|
|