📄 isp.s
字号:
.module isp.c
.area text(rom, con, rel)
.dbfile E:\icc\iccavr\mega8\mega8\music\isp.c
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 15
; #include <iom8v.h>
; #include <macros.h>
; #include <eeprom.h>
; /* 位操作宏 */
; #define set_bit(x,y) (x|=(1<<y))
; #define clr_bit(x,y) (x&=~(1<<y))
; #define get_bit(x,y) (x&(1<<y))
; #define fosc 8000000
; #define baud 19200
; #define device 0x76
; #define osc_address 0x1ff0
; extern unsigned char read_flash(unsigned int add);
; /* UART初始化 */
; void uart_init(void)
; {
.dbline 16
; OSCCAL=read_flash(osc_address);
ldi R16,8176
ldi R17,31
rcall _read_flash
out 0x31,R16
.dbline 17
; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
ldi R24,152
out 0xa,R24
.dbline 18
; UBRRL=(fosc/16/(baud+1))%256;
ldi R24,26
out 0x9,R24
.dbline 19
; UBRRH=(fosc/16/(baud+1))/256;
clr R2
out 0x20,R2
.dbline 20
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
ldi R24,134
out 0x20,R24
.dbline -2
.dbline 21
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e putchar _putchar fV
; c -> R16
.even
_putchar::
.dbline -1
.dbline 24
; /* 字符输出函数 */
; void putchar(unsigned char c)
; {
L3:
.dbline 25
L4:
.dbline 25
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L3
.dbline 26
; UDR=c;
out 0xc,R16
.dbline -2
.dbline 27
; }
L2:
.dbline 0 ; func end
ret
.dbsym r c 16 c
.dbend
.dbfunc e getchar _getchar fc
.even
_getchar::
.dbline -1
.dbline 30
; /* 字符输入函数 */
; unsigned char getchar(void)
; {
L7:
.dbline 31
L8:
.dbline 31
; while(!(UCSRA& (1<<RXC)));
sbis 0xb,7
rjmp L7
.dbline 32
; return UDR;
in R16,0xc
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 22
rjmp _isp
.area text(rom, con, rel)
.dbfile E:\icc\iccavr\mega8\mega8\music\isp.c
.area bss(ram, con, rel)
.dbfile E:\icc\iccavr\mega8\mega8\music\isp.c
L11:
.blkb 2
.area text(rom, con, rel)
.dbfile E:\icc\iccavr\mega8\mega8\music\isp.c
.dbfunc e isp _isp fV
.dbsym s adder L11 i
; val -> R20
.even
_isp::
rcall push_lset
rcall push_gset1
.dbline -1
.dbline 36
; }
; #pragma interrupt_handler isp:iv_USART_RXC
; void isp(void)
; {
.dbline 39
; static unsigned int adder;
; unsigned char val;
; val=UDR;
in R20,0xc
.dbline 40
; switch (val)
clr R21
cpi R20,76
ldi R30,0
cpc R21,R30
brne X1
rjmp L22
X1:
ldi R24,76
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L36
L35:
cpi R20,27
ldi R30,0
cpc R21,R30
brne X2
rjmp L13
X2:
cpi R20,27
ldi R30,0
cpc R21,R30
brge X3
rjmp L12
X3:
L37:
cpi R20,65
ldi R30,0
cpc R21,R30
brne X4
rjmp L19
X4:
cpi R20,68
ldi R30,0
cpc R21,R30
brne X5
rjmp L20
X5:
cpi R20,70
ldi R30,0
cpc R21,R30
brne X6
rjmp L26
X6:
rjmp L12
L36:
cpi R20,97
ldi R30,0
cpc R21,R30
brne X7
rjmp L18
X7:
cpi R20,100
ldi R30,0
cpc R21,R30
brne X8
rjmp L21
X8:
ldi R24,100
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L39
L38:
cpi R20,80
ldi R30,0
cpc R21,R30
brne X9
rjmp L17
X9:
cpi R20,83
ldi R30,0
cpc R21,R30
brne X10
rjmp L28
X10:
cpi R20,84
ldi R30,0
cpc R21,R30
brne X11
rjmp L23
X11:
cpi R20,86
ldi R30,0
cpc R21,R30
brne X12
rjmp L30
X12:
rjmp L12
L39:
cpi R20,109
ldi R30,0
cpc R21,R30
brne X13
rjmp L34
X13:
cpi R20,112
ldi R30,0
cpc R21,R30
brne X14
rjmp L29
X14:
cpi R20,115
ldi R30,0
cpc R21,R30
brne X15
rjmp L27
X15:
cpi R20,116
ldi R30,0
cpc R21,R30
breq L16
cpi R20,118
ldi R30,0
cpc R21,R30
brne X16
rjmp L31
X16:
cpi R20,120
ldi R30,0
cpc R21,R30
brne X17
rjmp L32
X17:
cpi R20,121
ldi R30,0
cpc R21,R30
brne X18
rjmp L33
X18:
rjmp L12
X0:
.dbline 41
; {
.dbline 42
; case 0x1b:{
.dbline 43
; break;
L16:
.dbline 45
; }
; case 't':{
.dbline 46
; putchar(device);
ldi R16,118
rcall _putchar
.dbline 47
; putchar(0x00);
clr R16
rcall _putchar
.dbline 48
; break;
rjmp L13
L17:
.dbline 50
; }
; case 'P':{
.dbline 51
; clr_bit(DDRC,0);
cbi 0x14,0
.dbline 52
; CLI();
cli
.dbline 53
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 54
; break;
rjmp L13
L18:
.dbline 56
; }
; case 'a':{
.dbline 57
; putchar('Y');
ldi R16,89
rcall _putchar
.dbline 58
; break;
rjmp L13
L19:
.dbline 60
; }
; case 'A':{
.dbline 61
; adder=(getchar()<<8);
rcall _getchar
mov R2,R16
clr R3
mov R3,R2
clr R2
sts L11+1,R3
sts L11,R2
.dbline 62
; adder|=getchar();
rcall _getchar
mov R2,R16
clr R3
lds R4,L11
lds R5,L11+1
or R4,R2
or R5,R3
sts L11+1,R5
sts L11,R4
.dbline 63
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 64
; break;
rjmp L13
L20:
.dbline 66
; }
; case 'D':{
.dbline 67
; EEPROMwrite(adder,getchar());
rcall _getchar
mov R18,R16
lds R16,L11
lds R17,L11+1
rcall _EEPROMwrite
.dbline 68
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 69
; adder++;
lds R24,L11
lds R25,L11+1
adiw R24,1
sts L11+1,R25
sts L11,R24
.dbline 70
; break;
rjmp L13
L21:
.dbline 72
; }
; case 'd':{
.dbline 73
; putchar(EEPROMread(adder));
lds R16,L11
lds R17,L11+1
rcall _EEPROMread
rcall _putchar
.dbline 74
; adder++;
lds R24,L11
lds R25,L11+1
adiw R24,1
sts L11+1,R25
sts L11,R24
.dbline 75
; break;
rjmp L13
L22:
.dbline 77
; }
; case 'L':{
.dbline 78
; set_bit(DDRC,0);
sbi 0x14,0
.dbline 79
; SEI();
sei
.dbline 80
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 81
; break;
rjmp L13
L23:
.dbline 83
; }
; case 'T':{
.dbline 84
; if(getchar()==0x38)
rcall _getchar
cpi R16,56
brne L24
.dbline 85
; putchar(13);
ldi R16,13
rcall _putchar
rjmp L13
L24:
.dbline 87
; else
; putchar('?');
ldi R16,63
rcall _putchar
.dbline 88
; break;
rjmp L13
L26:
.dbline 90
; }
; case 'F':{
.dbline 91
; putchar(00);
clr R16
rcall _putchar
.dbline 92
; break;
rjmp L13
L27:
.dbline 94
; }
; case 's':{
.dbline 95
; putchar(2);
ldi R16,2
rcall _putchar
.dbline 96
; putchar(1);
ldi R16,1
rcall _putchar
.dbline 97
; putchar(0);
clr R16
rcall _putchar
.dbline 98
; break;
rjmp L13
L28:
.dbline 100
; }
; case 'S':{
.dbline 101
; putchar('A');
ldi R16,65
rcall _putchar
.dbline 102
; putchar('V');
ldi R16,86
rcall _putchar
.dbline 103
; putchar('R');
ldi R16,82
rcall _putchar
.dbline 104
; putchar('B');
ldi R16,66
rcall _putchar
.dbline 105
; putchar('O');
ldi R16,79
rcall _putchar
.dbline 106
; putchar('O');
ldi R16,79
rcall _putchar
.dbline 107
; putchar('T');
ldi R16,84
rcall _putchar
.dbline 108
; break;
rjmp L13
L29:
.dbline 110
; }
; case 'p':{
.dbline 111
; putchar('S');
ldi R16,83
rcall _putchar
.dbline 112
; break;
rjmp L13
L30:
.dbline 114
; }
; case 'V':{
.dbline 115
; putchar('1');
ldi R16,49
rcall _putchar
.dbline 116
; putchar('0');
ldi R16,48
rcall _putchar
.dbline 117
; break;
rjmp L13
L31:
.dbline 119
; }
; case 'v':{
.dbline 120
; putchar('1');
ldi R16,49
rcall _putchar
.dbline 121
; putchar('0');
ldi R16,48
rcall _putchar
.dbline 122
; break;
rjmp L13
L32:
.dbline 124
; }
; case 'x':{
.dbline 125
; getchar();
rcall _getchar
.dbline 126
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 127
; break;
rjmp L13
L33:
.dbline 129
; }
; case 'y':{
.dbline 130
; getchar();
rcall _getchar
.dbline 131
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 132
; break;
rjmp L13
L34:
.dbline 134
; }
; case 'm':{
.dbline 135
; putchar(13);
ldi R16,13
rcall _putchar
.dbline 136
; break;
rjmp L13
L12:
.dbline 138
.dbline 139
ldi R16,63
rcall _putchar
.dbline 140
.dbline 141
L13:
.dbline -2
.dbline 142
; }
; default:{
; putchar('?');
; }
; }
; }
L10:
rcall pop_gset1
rcall pop_lset
.dbline 0 ; func end
reti
.dbsym r val 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -