📄 simpleio.lis
字号:
.module simpleio.c
.area text(rom, con, rel)
0000 .dbfile D:\WIRELE~1\CC1020~1\SoftWare\SoftWare\simpleio.c
0000 .dbfunc e putchar _putchar fV
0000 ; ch -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 17
0000 ; /****************************************************/
0000 ; /* Application note */
0000 ; /* Reference design : CC1100 RF Test Board */
0000 ; /* File: Simple.c */
0000 ; /* Revision: 1.0 */
0000 ; /* Description: */
0000 ; /* Microcontroller:ATmega48/48V */
0000 ; /* Author: Zcg, Field Applications Engineer, SunRay*/
0000 ; /****************************************************/
0000 ; #include <ctype.h>
0000 ; #include "iom88v.h"
0000 ; #include "macros.h"
0000 ; #include "main.h"
0000 ; #include "simpleio.h"
0000 ;
0000 ; void putchar(INT8U ch)
0000 ; {
0000 L2:
0000 .dbline 19
0000 L3:
0000 .dbline 18
0000 ; while ( !(UCSR0A & (1<<UDRE0)) )
0000 2090C000 lds R2,192
0004 25FE sbrs R2,5
0006 FCCF rjmp L2
0008 .dbline 20
0008 ; ;
0008 ; UDR0=ch;
0008 0093C600 sts 198,R16
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbsym r ch 16 c
000E .dbend
000E .dbfunc e getchar _getchar fc
000E ; temp -> R16
.even
000E _getchar::
000E .dbline -1
000E .dbline 24
000E ; }
000E ;
000E ; INT8U getchar(void)
000E ; {
000E .dbline 27
000E ; INT8U temp;
000E ;
000E ; if ((UCSR0A & (1<<RXC0)))
000E 2090C000 lds R2,192
0012 27FE sbrs R2,7
0014 03C0 rjmp L6
0016 .dbline 28
0016 ; {
0016 .dbline 29
0016 ; temp=UDR0;
0016 0091C600 lds R16,198
001A .dbline 30
001A ; return temp;
001A 01C0 rjmp L5
001C L6:
001C .dbline 33
001C ; }
001C ; else
001C ; {
001C .dbline 34
001C ; return 0;
001C 0027 clr R16
001E .dbline -2
001E L5:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r temp 16 c
0020 .dbend
0020 .dbfunc e putstr _putstr fV
0020 ; str -> R20,R21
.even
0020 _putstr::
0020 00D0 rcall push_gset1
0022 A801 movw R20,R16
0024 .dbline -1
0024 .dbline 43
0024 ; }
0024 ; }
0024 ;
0024 ; /****************************************************************************/
0024 ; /* This routine outputs a string */
0024 ; /****************************************************************************/
0024 ;
0024 ; void putstr(INT8U *str)
0024 ; {
0024 04C0 rjmp L10
0026 L9:
0026 .dbline 45
0026 .dbline 46
0026 FA01 movw R30,R20
0028 0191 ld R16,Z+
002A AF01 movw R20,R30
002C E9DF rcall _putchar
002E .dbline 47
002E L10:
002E .dbline 44
002E ; while (*str!='\0')
002E FA01 movw R30,R20
0030 2080 ldd R2,z+0
0032 2220 tst R2
0034 C1F7 brne L9
0036 .dbline -2
0036 L8:
0036 00D0 rcall pop_gset1
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbsym r str 20 pc
003A .dbend
003A .dbfunc e strlen _strlen fI
003A ; i -> R20,R21
003A ; s -> R16,R17
.even
003A _strlen::
003A 00D0 rcall push_gset1
003C .dbline -1
003C .dbline 50
003C ; {
003C ; putchar(*str++);
003C ; }
003C ; }
003C ; int strlen(const char *s)
003C ; {
003C .dbline 51
003C ; int i = 0;
003C 4427 clr R20
003E 5527 clr R21
0040 .dbline 53
0040 ;
0040 ; for(; *s; s++)
0040 04C0 rjmp L16
0042 L13:
0042 .dbline 54
0042 4F5F subi R20,255 ; offset = 1
0044 5F4F sbci R21,255
0046 L14:
0046 .dbline 53
0046 0F5F subi R16,255 ; offset = 1
0048 1F4F sbci R17,255
004A L16:
004A .dbline 53
004A F801 movw R30,R16
004C E491 lpm R30,Z
004E EE23 tst R30
0050 C1F7 brne L13
0052 .dbline 56
0052 ; i++;
0052 ;
0052 ; return i;
0052 8A01 movw R16,R20
0054 .dbline -2
0054 L12:
0054 00D0 rcall pop_gset1
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r i 20 I
0058 .dbsym r s 16 pkc
0058 .dbend
0058 .dbfunc e PutRepChar _PutRepChar fV
0058 ; count -> R20,R21
0058 ; c -> R22
.even
0058 _PutRepChar::
0058 00D0 rcall push_gset2
005A A901 movw R20,R18
005C 602F mov R22,R16
005E .dbline -1
005E .dbline 61
005E ; }
005E ; /*---------------------printf and support routines ---------------------*/
005E ; /* print c count times */
005E ; void PutRepChar(char c, int count)
005E ; {
005E 02C0 rjmp L19
0060 L18:
0060 .dbline 62
0060 062F mov R16,R22
0062 CEDF rcall _putchar
0064 L19:
0064 .dbline 62
0064 ; while (count--) putchar(c);
0064 1A01 movw R2,R20
0066 4150 subi R20,1
0068 5040 sbci R21,0
006A 2220 tst R2
006C C9F7 brne L18
006E 3320 tst R3
0070 B9F7 brne L18
0072 X0:
0072 .dbline -2
0072 L17:
0072 00D0 rcall pop_gset2
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbsym r count 20 I
0076 .dbsym r c 22 c
0076 .dbend
0076 .dbfunc e PutStringReverse _PutStringReverse fV
0076 ; index -> R20,R21
0076 ; s -> R22,R23
.even
0076 _PutStringReverse::
0076 00D0 rcall push_gset2
0078 A901 movw R20,R18
007A B801 movw R22,R16
007C .dbline -1
007C .dbline 67
007C ; }
007C ;
007C ; /* put string reverse */
007C ; void PutStringReverse(char *s, int index)
007C ; {
007C 05C0 rjmp L23
007E L22:
007E .dbline 68
007E FA01 movw R30,R20
0080 E60F add R30,R22
0082 F71F adc R31,R23
0084 0081 ldd R16,z+0
0086 BCDF rcall _putchar
0088 L23:
0088 .dbline 68
0088 ; while ((index--) > 0) putchar(s[index]);
0088 1A01 movw R2,R20
008A 4150 subi R20,1
008C 5040 sbci R21,0
008E 4424 clr R4
0090 5524 clr R5
0092 4214 cp R4,R2
0094 5304 cpc R5,R3
0096 9CF3 brlt L22
0098 .dbline -2
0098 L21:
0098 00D0 rcall pop_gset2
009A .dbline 0 ; func end
009A 0895 ret
009C .dbsym r index 20 I
009C .dbsym r s 22 pc
009C .dbend
009C .dbfunc s PutNumber _PutNumber fV
009C ; negative -> R14,R15
009C ; left -> y+40
009C ; buffer -> y+0
009C ; digit -> R22,R23
009C ; bi -> R4,R5
009C ; uvalue -> R20,R21
009C ; fill -> y+56
009C ; width -> y+54
009C ; radix -> y+52
009C ; value -> R22,R23
.even
009C _PutNumber:
009C 3A93 st -y,r19
009E 2A93 st -y,r18
00A0 00D0 rcall push_gset5
00A2 B801 movw R22,R16
00A4 AA97 sbiw R28,42
00A6 .dbline -1
00A6 .dbline 82
00A6 ; }
00A6 ;
00A6 ; /*-------------------------------------------------------------------------*/
00A6 ; /*
00A6 ; prints value in radix, in a field width width, with fill
00A6 ; character fill
00A6 ; if radix is negative, print as signed quantity
00A6 ; if width is negative, left justify
00A6 ; if width is 0, use whatever is needed
00A6 ; if fill is 0, use ' '
00A6 ; */
00A6 ;
00A6 ; static void PutNumber(int value, int radix, int width, char fill)
00A6 ; {
00A6 .dbline 84
00A6 ; char buffer[40];
00A6 ; int bi = 0;
00A6 4424 clr R4
00A8 5524 clr R5
00AA .dbline 87
00AA ; int unsigned uvalue;
00AA ; short int digit;
00AA ; short int left = FALSE;
00AA 0024 clr R0
00AC 1124 clr R1
00AE 19A6 std y+41,R1
00B0 08A6 std y+40,R0
00B2 .dbline 88
00B2 ; short int negative = FALSE;
00B2 EE24 clr R14
00B4 FF24 clr R15
00B6 .dbline 90
00B6 ;
00B6 ; if (fill == 0) fill = ' ';
00B6 08AC ldd R0,y+56
00B8 0020 tst R0
00BA 11F4 brne L26
00BC .dbline 90
00BC 80E2 ldi R24,32
00BE 88AF std y+56,R24
00C0 L26:
00C0 .dbline 92
00C0 ;
00C0 ; if (width < 0) {
00C0 8EA9 ldd R24,y+54
00C2 9FA9 ldd R25,y+55
00C4 8030 cpi R24,0
00C6 E0E0 ldi R30,0
00C8 9E07 cpc R25,R30
00CA 54F4 brge L28
00CC .dbline 92
00CC .dbline 93
00CC ; width = -width;
00CC 8095 com R24
00CE 9095 com R25
00D0 8F5F subi R24,0xFF
00D2 9F4F sbci R25,0xFF
00D4 9FAB std y+55,R25
00D6 8EAB std y+54,R24
00D8 .dbline 94
00D8 ; left = TRUE;
00D8 81E0 ldi R24,1
00DA 90E0 ldi R25,0
00DC 99A7 std y+41,R25
00DE 88A7 std y+40,R24
00E0 .dbline 95
00E0 ; }
00E0 L28:
00E0 .dbline 96
00E0 8EA9 ldd R24,y+54
00E2 9FA9 ldd R25,y+55
00E4 8030 cpi R24,0
00E6 E0E0 ldi R30,0
00E8 9E07 cpc R25,R30
00EA 3CF0 brlt L32
00EC 80E5 ldi R24,80
00EE 90E0 ldi R25,0
00F0 0EA8 ldd R0,y+54
00F2 1FA8 ldd R1,y+55
00F4 8015 cp R24,R0
00F6 9105 cpc R25,R1
00F8 24F4 brge L30
00FA L32:
00FA .dbline 96
00FA ; if (width < 0 || width > 80) width = 0;
00FA 0024 clr R0
00FC 1124 clr R1
00FE 1FAA std y+55,R1
0100 0EAA std y+54,R0
0102 L30:
0102 .dbline 98
0102 ;
0102 ; if (radix < 0) {
0102 8CA9 ldd R24,y+52
0104 9DA9 ldd R25,y+53
0106 8030 cpi R24,0
0108 E0E0 ldi R30,0
010A 9E07 cpc R25,R30
010C 8CF4 brge L33
010E .dbline 98
010E .dbline 99
010E ; radix = -radix;
010E 8095 com R24
0110 9095 com R25
0112 8F5F subi R24,0xFF
0114 9F4F sbci R25,0xFF
0116 9DAB std y+53,R25
0118 8CAB std y+52,R24
011A .dbline 100
011A ; if (value < 0) {
011A 6030 cpi R22,0
011C E0E0 ldi R30,0
011E 7E07 cpc R23,R30
0120 3CF4 brge L35
0122 .dbline 100
0122 .dbline 101
0122 ; negative = TRUE;
0122 81E0 ldi R24,1
0124 90E0 ldi R25,0
0126 7C01 movw R14,R24
0128 .dbline 102
0128 ; value = -value;
0128 6095 com R22
012A 7095 com R23
012C 6F5F subi R22,0xFF
012E 7F4F sbci R23,0xFF
0130 .dbline 103
0130 ; }
0130 L35:
0130 .dbline 104
0130 ; }
0130 L33:
0130 .dbline 105
0130 ; uvalue = value;
0130 AB01 movw R20,R22
0132 L37:
0132 .dbline 107
0132 ; do
0132 ; {
0132 .dbline 108
0132 ; if (radix != 16)
0132 8CA9 ldd R24,y+52
0134 9DA9 ldd R25,y+53
0136 8031 cpi R24,16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -