📄 simpleio.s
字号:
.module simpleio.c
.area text(rom, con, rel)
.dbfile D:\WIRELE~1\CC1020~1\SoftWare\SoftWare\simpleio.c
.dbfunc e putchar _putchar fV
; ch -> R16
.even
_putchar::
.dbline -1
.dbline 17
; /****************************************************/
; /* Application note */
; /* Reference design : CC1100 RF Test Board */
; /* File: Simple.c */
; /* Revision: 1.0 */
; /* Description: */
; /* Microcontroller:ATmega48/48V */
; /* Author: Zcg, Field Applications Engineer, SunRay*/
; /****************************************************/
; #include <ctype.h>
; #include "iom88v.h"
; #include "macros.h"
; #include "main.h"
; #include "simpleio.h"
;
; void putchar(INT8U ch)
; {
L2:
.dbline 19
L3:
.dbline 18
; while ( !(UCSR0A & (1<<UDRE0)) )
lds R2,192
sbrs R2,5
rjmp L2
.dbline 20
; ;
; UDR0=ch;
sts 198,R16
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r ch 16 c
.dbend
.dbfunc e getchar _getchar fc
; temp -> R16
.even
_getchar::
.dbline -1
.dbline 24
; }
;
; INT8U getchar(void)
; {
.dbline 27
; INT8U temp;
;
; if ((UCSR0A & (1<<RXC0)))
lds R2,192
sbrs R2,7
rjmp L6
.dbline 28
; {
.dbline 29
; temp=UDR0;
lds R16,198
.dbline 30
; return temp;
rjmp L5
L6:
.dbline 33
; }
; else
; {
.dbline 34
; return 0;
clr R16
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r temp 16 c
.dbend
.dbfunc e putstr _putstr fV
; str -> R20,R21
.even
_putstr::
rcall push_gset1
movw R20,R16
.dbline -1
.dbline 43
; }
; }
;
; /****************************************************************************/
; /* This routine outputs a string */
; /****************************************************************************/
;
; void putstr(INT8U *str)
; {
rjmp L10
L9:
.dbline 45
.dbline 46
movw R30,R20
ld R16,Z+
movw R20,R30
rcall _putchar
.dbline 47
L10:
.dbline 44
; while (*str!='\0')
movw R30,R20
ldd R2,z+0
tst R2
brne L9
.dbline -2
L8:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r str 20 pc
.dbend
.dbfunc e strlen _strlen fI
; i -> R20,R21
; s -> R16,R17
.even
_strlen::
rcall push_gset1
.dbline -1
.dbline 50
; {
; putchar(*str++);
; }
; }
; int strlen(const char *s)
; {
.dbline 51
; int i = 0;
clr R20
clr R21
.dbline 53
;
; for(; *s; s++)
rjmp L16
L13:
.dbline 54
subi R20,255 ; offset = 1
sbci R21,255
L14:
.dbline 53
subi R16,255 ; offset = 1
sbci R17,255
L16:
.dbline 53
movw R30,R16
lpm R30,Z
tst R30
brne L13
.dbline 56
; i++;
;
; return i;
movw R16,R20
.dbline -2
L12:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r s 16 pkc
.dbend
.dbfunc e PutRepChar _PutRepChar fV
; count -> R20,R21
; c -> R22
.even
_PutRepChar::
rcall push_gset2
movw R20,R18
mov R22,R16
.dbline -1
.dbline 61
; }
; /*---------------------printf and support routines ---------------------*/
; /* print c count times */
; void PutRepChar(char c, int count)
; {
rjmp L19
L18:
.dbline 62
mov R16,R22
rcall _putchar
L19:
.dbline 62
; while (count--) putchar(c);
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L18
tst R3
brne L18
X0:
.dbline -2
L17:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r count 20 I
.dbsym r c 22 c
.dbend
.dbfunc e PutStringReverse _PutStringReverse fV
; index -> R20,R21
; s -> R22,R23
.even
_PutStringReverse::
rcall push_gset2
movw R20,R18
movw R22,R16
.dbline -1
.dbline 67
; }
;
; /* put string reverse */
; void PutStringReverse(char *s, int index)
; {
rjmp L23
L22:
.dbline 68
movw R30,R20
add R30,R22
adc R31,R23
ldd R16,z+0
rcall _putchar
L23:
.dbline 68
; while ((index--) > 0) putchar(s[index]);
movw R2,R20
subi R20,1
sbci R21,0
clr R4
clr R5
cp R4,R2
cpc R5,R3
brlt L22
.dbline -2
L21:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r index 20 I
.dbsym r s 22 pc
.dbend
.dbfunc s PutNumber _PutNumber fV
; negative -> R14,R15
; left -> y+40
; buffer -> y+0
; digit -> R22,R23
; bi -> R4,R5
; uvalue -> R20,R21
; fill -> y+56
; width -> y+54
; radix -> y+52
; value -> R22,R23
.even
_PutNumber:
st -y,r19
st -y,r18
rcall push_gset5
movw R22,R16
sbiw R28,42
.dbline -1
.dbline 82
; }
;
; /*-------------------------------------------------------------------------*/
; /*
; prints value in radix, in a field width width, with fill
; character fill
; if radix is negative, print as signed quantity
; if width is negative, left justify
; if width is 0, use whatever is needed
; if fill is 0, use ' '
; */
;
; static void PutNumber(int value, int radix, int width, char fill)
; {
.dbline 84
; char buffer[40];
; int bi = 0;
clr R4
clr R5
.dbline 87
; int unsigned uvalue;
; short int digit;
; short int left = FALSE;
clr R0
clr R1
std y+41,R1
std y+40,R0
.dbline 88
; short int negative = FALSE;
clr R14
clr R15
.dbline 90
;
; if (fill == 0) fill = ' ';
ldd R0,y+56
tst R0
brne L26
.dbline 90
ldi R24,32
std y+56,R24
L26:
.dbline 92
;
; if (width < 0) {
ldd R24,y+54
ldd R25,y+55
cpi R24,0
ldi R30,0
cpc R25,R30
brge L28
.dbline 92
.dbline 93
; width = -width;
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
std y+55,R25
std y+54,R24
.dbline 94
; left = TRUE;
ldi R24,1
ldi R25,0
std y+41,R25
std y+40,R24
.dbline 95
; }
L28:
.dbline 96
ldd R24,y+54
ldd R25,y+55
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L32
ldi R24,80
ldi R25,0
ldd R0,y+54
ldd R1,y+55
cp R24,R0
cpc R25,R1
brge L30
L32:
.dbline 96
; if (width < 0 || width > 80) width = 0;
clr R0
clr R1
std y+55,R1
std y+54,R0
L30:
.dbline 98
;
; if (radix < 0) {
ldd R24,y+52
ldd R25,y+53
cpi R24,0
ldi R30,0
cpc R25,R30
brge L33
.dbline 98
.dbline 99
; radix = -radix;
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
std y+53,R25
std y+52,R24
.dbline 100
; if (value < 0) {
cpi R22,0
ldi R30,0
cpc R23,R30
brge L35
.dbline 100
.dbline 101
; negative = TRUE;
ldi R24,1
ldi R25,0
movw R14,R24
.dbline 102
; value = -value;
com R22
com R23
subi R22,0xFF
sbci R23,0xFF
.dbline 103
; }
L35:
.dbline 104
; }
L33:
.dbline 105
; uvalue = value;
movw R20,R22
L37:
.dbline 107
; do
; {
.dbline 108
; if (radix != 16)
ldd R24,y+52
ldd R25,y+53
cpi R24,16
ldi R30,0
cpc R25,R30
breq L40
.dbline 109
; {
.dbline 110
; digit = uvalue % radix ;
movw R18,R24
movw R16,R20
rcall mod16u
movw R22,R16
.dbline 111
; uvalue = uvalue / radix ;
ldd R18,y+52
ldd R19,y+53
movw R16,R20
rcall div16u
movw R20,R16
.dbline 112
; }
rjmp L41
L40:
.dbline 114
; else
; {
.dbline 115
; digit = uvalue & 0xf;
movw R22,R20
andi R22,15
andi R23,0
.dbline 116
; uvalue = uvalue >> 4;
movw R2,R20
lsr R3
ror R2
lsr R3
ror R2
lsr R3
ror R2
lsr R3
ror R2
movw R20,R2
.dbline 117
; }
L41:
.dbline 118
; buffer[bi] = digit + ((digit <= 9) ? '0' : ('A' - 10));
ldi R24,9
ldi R25,0
cp R24,R22
cpc R25,R23
brlt L42
ldi R24,48
movw R10,R24
rjmp L43
L42:
ldi R24,55
ldi R25,0
movw R10,R24
L43:
movw R2,R22
add R2,R10
adc R3,R11
movw R24,R28
movw R30,R4
add R30,R24
adc R31,R25
std z+0,R2
.dbline 119
; bi++;
movw R24,R4
adiw R24,1
movw R4,R24
.dbline 121
;
; if (uvalue != 0)
cpi R20,0
cpc R20,R21
brne X7
rjmp L44
X7:
X1:
.dbline 122
; {
.dbline 123
; if ((radix==10)&&((bi==3)||(bi==7)||(bi==11)|(bi==15)))
ldd R24,y+52
ldd R25,y+53
cpi R24,10
ldi R30,0
cpc R25,R30
breq X8
rjmp L46
X8:
movw R24,R4
cpi R24,3
ldi R30,0
cpc R25,R30
breq L49
cpi R24,7
ldi R30,0
cpc R25,R30
breq L49
cpi R24,11
ldi R30,0
cpc R25,R30
brne L50
ldi R24,1
ldi R25,0
movw R10,R24
rjmp L51
L50:
clr R10
clr R11
L51:
movw R24,R4
cpi R24,15
ldi R30,0
cpc R25,R30
brne L52
ldi R24,1
ldi R25,0
movw R12,R24
rjmp L53
L52:
clr R12
clr R13
L53:
movw R2,R10
or R2,R12
or R3,R13
tst R2
brne X2
tst R3
breq L46
X2:
L49:
.dbline 124
; {
.dbline 125
; buffer[bi++]=',';
movw R2,R4
movw R24,R2
adiw R24,1
movw R4,R24
movw R24,R28
movw R30,R2
add R30,R24
adc R31,R25
ldi R24,44
std z+0,R24
.dbline 126
; }
L46:
.dbline 127
; }
L44:
.dbline 128
L38:
.dbline 128
; } while (uvalue != 0);
cpi R20,0
cpc R20,R21
breq X9
rjmp L37
X9:
X3:
.dbline 130
;
; if (negative) {
tst R14
brne X4
tst R15
breq L54
X4:
.dbline 130
.dbline 131
; buffer[bi] = '-';
movw R24,R28
movw R30,R4
add R30,R24
adc R31,R25
ldi R24,45
std z+0,R24
.dbline 132
; bi += 1;
movw R24,R4
adiw R24,1
movw R4,R24
.dbline 133
; }
L54:
.dbline 134
; if (width <= bi)
ldd R0,y+54
ldd R1,y+55
cp R4,R0
cpc R5,R1
brlt L56
.dbline 135
; {
.dbline 136
; PutStringReverse(buffer, bi);
movw R18,R4
movw R16,R28
push R18
push R19
rcall _PutStringReverse
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -