📄 main.s
字号:
.module main.c
.area data(ram, con, rel)
_Enter::
.blkb 2
.area idata
.byte 224,62
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 227,238
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbsym e Enter _Enter A[4:4]c
_RunBuffer::
.blkb 2
.area idata
.byte 131,'D
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.blkb 2
.area idata
.byte 53,126
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbsym e RunBuffer _RunBuffer A[4:4]c
_StopBuffer::
.blkb 2
.area idata
.byte 125,94
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.blkb 2
.area idata
.byte 229,158
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbsym e StopBuffer _StopBuffer A[4:4]c
_n:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbsym s n _n c
_RxBuffer::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbsym e RxBuffer _RxBuffer A[4:4]c
.area text(rom, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 42
; //ICC-AVR application builder : 2008-4-9 17:20:49
; // Target : M16
; // Crystal: 16.000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
;
; #define DataR 0x90
; #define RSTA1 0x4a
; #define RSTA2 0x30
;
; #define TSTA1 0x6b
; #define TSTA2 0x4c
; #define DataT 0xaf
;
; #define En 0xe0
; #define Run 0x83
; #define Stop 0x7d
;
; #define OK 1
; #define NG 0
; #define ONE 0x90
; #define TWO 0x91
; #define THREE 0x92
; #define FOUR 0x93
; #define COMM 0x94
;
; unsigned char Enter[4] = {En,0x3e,0xe3,0xee};
; unsigned char RunBuffer[4] = {Run,0x44,0x35,0x7e};
; unsigned char StopBuffer[4] = {Stop,0x5e,0xe5,0x9e};
;
; static unsigned char n = 0;
; static unsigned char len;
; static unsigned char flag;
;
; unsigned char RxBuffer[4] = {0,0,0,0};
; unsigned char TxBuffer[4];
;
; enum COMCHE{ENTER,RUN,STOP}comcheck;
;
; void port_init(void)
; {
.dbline 43
; PORTA = 0x00;
clr R2
out 0x1b,R2
.dbline 44
; DDRA = 0xff;
ldi R24,255
out 0x1a,R24
.dbline 45
; PORTB = 0x00;
out 0x18,R2
.dbline 46
; DDRB = 0x00;
out 0x17,R2
.dbline 47
; PORTC = 0x00; //m103 output only
out 0x15,R2
.dbline 48
; DDRC = 0xff;
out 0x14,R24
.dbline 49
; PORTD = 0x00;
out 0x12,R2
.dbline 50
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 59
; }
;
; //UART0 initialize
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
.dbline 60
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 61
; UCSRA = 0x00;
out 0xb,R2
.dbline 62
; UCSRC = BIT(URSEL) | 0x06;
ldi R24,134
out 0x20,R24
.dbline 63
; UBRRL = 0x67; //set baud rate lo
ldi R24,103
out 0x9,R24
.dbline 64
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 65
; UCSRB = 0xD8;
ldi R24,216
out 0xa,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 44
jmp _uart0_rx_isr
.area text(rom, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
; temp -> <dead>
.even
_uart0_rx_isr::
st -y,R2
st -y,R16
st -y,R17
st -y,R24
st -y,R25
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 70
; }
;
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; {unsigned char temp;
.dbline 71
; if (flag == NG){
lds R2,_flag
tst R2
breq X2
xjmp L4
X2:
.dbline 71
.dbline 72
lds R16,_n
clr R17
cpi R16,0
cpc R16,R17
breq L9
X0:
cpi R16,1
ldi R30,0
cpc R17,R30
breq L12
cpi R16,2
ldi R30,0
cpc R17,R30
breq L15
cpi R16,3
ldi R30,0
cpc R17,R30
brne X3
xjmp L18
X3:
cpi R16,4
ldi R30,0
cpc R17,R30
brne X4
xjmp L19
X4:
cpi R16,5
ldi R30,0
cpc R17,R30
brne X5
xjmp L21
X5:
cpi R16,6
ldi R30,0
cpc R17,R30
brne X6
xjmp L23
X6:
xjmp L7
X1:
.dbline 72
; switch (n){
L9:
.dbline 73
; case 0: if (UDR == RSTA1) n++;break; //头1
in R24,0xc
cpi R24,74
breq X7
xjmp L7
X7:
.dbline 73
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 73
xjmp L7
L12:
.dbline 74
; case 1: if (UDR == RSTA2) n++; //头2
in R24,0xc
cpi R24,48
brne L13
.dbline 74
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
xjmp L7
L13:
.dbline 75
; else n = 0; break;
clr R2
sts _n,R2
.dbline 75
xjmp L7
L15:
.dbline 76
; case 2: if (UDR >= ONE && UDR <= COMM)//长度
in R24,0xc
cpi R24,144
brlo L16
ldi R24,148
in R2,0xc
cp R24,R2
brlo L16
.dbline 77
; {len = UDR; n++;}
.dbline 77
in R2,0xc
sts _len,R2
.dbline 77
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 77
xjmp L7
L16:
.dbline 78
; else n = 0;
clr R2
sts _n,R2
.dbline 79
; break;
xjmp L7
L18:
.dbline 80
; case 3: RxBuffer[0] = UDR; n++; break;
in R2,0xc
sts _RxBuffer,R2
.dbline 80
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 80
xjmp L7
L19:
.dbline 81
; case 4: RxBuffer[1] = UDR; n++; break;
in R2,0xc
sts _RxBuffer+1,R2
.dbline 81
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 81
xjmp L7
L21:
.dbline 82
; case 5: RxBuffer[2] = UDR; n++; break;
in R2,0xc
sts _RxBuffer+2,R2
.dbline 82
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 82
xjmp L7
L23:
.dbline 83
; case 6: RxBuffer[3] = UDR; n++; //data
in R2,0xc
sts _RxBuffer+3,R2
.dbline 83
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 87
; // break;
; /* case 7: temp = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 +len;
; if (UDR == temp) { //校验*/
; flag = OK;
ldi R24,1
sts _flag,R24
.dbline 88
; PORTA = 0xff;
ldi R24,255
out 0x1b,R24
.dbline 93
; //CLI();
; // UCSRB = 0xC8; //关接受中断
; // SEI();
; // }
; n = 0;
clr R2
sts _n,R2
.dbline 94
; break;
.dbline 95
; default: break;
L7:
.dbline 97
L4:
.dbline -2
L3:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R25,y+
ld R24,y+
ld R17,y+
ld R16,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym l temp 1 c
.dbend
.area vector(rom, abs)
.org 52
jmp _uart0_tx_isr
.area text(rom, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
.dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
_uart0_tx_isr::
st -y,R2
st -y,R3
st -y,R16
st -y,R17
st -y,R24
st -y,R25
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 103
; }
; }
;
; }
;
; #pragma interrupt_handler uart0_tx_isr:14
; void uart0_tx_isr(void)
; {
.dbline 104
; if (flag == OK){
lds R24,_flag
cpi R24,1
breq X9
xjmp L26
X9:
.dbline 104
.dbline 105
; PORTC = 0xff;
ldi R24,255
out 0x15,R24
.dbline 106
lds R16,_n
clr R17
cpi R16,1
ldi R30,0
cpc R17,R30
breq L31
cpi R16,2
ldi R30,0
cpc R17,R30
breq L32
cpi R16,3
ldi R30,0
cpc R17,R30
breq L33
cpi R16,4
ldi R30,0
cpc R17,R30
breq L34
cpi R16,5
ldi R30,0
cpc R17,R30
breq L36
cpi R16,6
ldi R30,0
cpc R17,R30
breq L38
xjmp L29
X8:
.dbline 106
; switch (n){
L31:
.dbline 107
; case 1: n++;UDR = TSTA2; break; //头2
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 107
ldi R24,76
out 0xc,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -