📄 main.s
字号:
.dbline 107
xjmp L29
L32:
.dbline 108
; case 2: n++;UDR = DataT - len; break; //长度
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 108
lds R2,_len
clr R3
ldi R24,175
ldi R25,0
sub R24,R2
sbc R25,R3
out 0xc,R24
.dbline 108
xjmp L29
L33:
.dbline 109
; case 3: n++;UDR = RxBuffer[0]; break;
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 109
lds R2,_RxBuffer
out 0xc,R2
.dbline 109
xjmp L29
L34:
.dbline 110
; case 4: n++; UDR = RxBuffer[1]; break;
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 110
lds R2,_RxBuffer+1
out 0xc,R2
.dbline 110
xjmp L29
L36:
.dbline 111
; case 5: n++;UDR = RxBuffer[2]; break;
lds R24,_n
subi R24,255 ; addi 1
sts _n,R24
.dbline 111
lds R2,_RxBuffer+2
out 0xc,R2
.dbline 111
xjmp L29
L38:
.dbline 112
; case 6: n=0; flag = NG;UDR = RxBuffer[3]; break; //data
clr R2
sts _n,R2
.dbline 112
sts _flag,R2
.dbline 112
lds R2,_RxBuffer+3
out 0xc,R2
.dbline 112
.dbline 114
; // case 6: UDR = RxBuffer[0]%16 + RxBuffer[1]%16 + RxBuffer[2]%16 +RxBuffer[3]%16 + DataT - len; n = 0; break;//校验
; default:break;
L29:
.dbline 116
L26:
.dbline -2
L25:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R25,y+
ld R24,y+
ld R17,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 121
; }
; }
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 123
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 124
; port_init();
xcall _port_init
.dbline 125
; uart0_init();
xcall _uart0_init
.dbline 127
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 128
; GICR = 0x00;
out 0x3b,R2
.dbline 129
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 130
; SEI(); //re-enable interrupts
sei
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e check_buf _check_buf fc
; i -> R20
; num -> R18
; CheckBuffer -> R16,R17
.even
_check_buf::
xcall push_gset1
.dbline -1
.dbline 139
; //all peripherals are now initialized
; }
; /*****************************************************
; unsigned char check_buf( unsigned char *CheckBuffer)
; 检测命令是否符合要求
;
; *****************************************************/
;
; unsigned char check_buf( unsigned char *CheckBuffer,unsigned char num){
.dbline 141
clr R20
xjmp L45
L42:
.dbline 141
; unsigned char i;
; for (i = 0;i < num; i++){
.dbline 142
; if (CheckBuffer[i] != RxBuffer[i])
ldi R24,<_RxBuffer
ldi R25,>_RxBuffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
mov R30,R20
clr R31
add R30,R16
adc R31,R17
ldd R3,z+0
cp R3,R2
breq L46
.dbline 143
; break;
xjmp L44
L46:
.dbline 144
L43:
.dbline 141
inc R20
L45:
.dbline 141
cp R20,R18
brlo L42
L44:
.dbline 145
; }
; if (i == num)
cp R20,R18
brne L48
.dbline 146
; return OK;
ldi R16,1
xjmp L41
L48:
.dbline 148
; else
; return NG;
clr R16
.dbline -2
L41:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r num 18 c
.dbsym r CheckBuffer 16 pc
.dbend
.dbfunc e check_com _check_com fc
; i -> R20
.even
_check_com::
xcall push_gset1
.dbline -1
.dbline 151
; }
;
; unsigned char check_com(){
.dbline 153
lds R20,_len
clr R21
cpi R20,144
ldi R30,0
cpc R21,R30
brne X12
xjmp L69
X12:
cpi R20,145
ldi R30,0
cpc R21,R30
brne X13
xjmp L69
X13:
cpi R20,146
ldi R30,0
cpc R21,R30
brne X14
xjmp L69
X14:
cpi R20,147
ldi R30,0
cpc R21,R30
brne X15
xjmp L69
X15:
cpi R20,148
ldi R30,0
cpc R21,R30
breq L54
xjmp L51
X10:
.dbline 153
; unsigned char i;
; switch (len){
L54:
.dbline 154
; case COMM: switch (RxBuffer[0]){
lds R20,_RxBuffer
clr R21
cpi R20,131
ldi R30,0
cpc R21,R30
breq L61
ldi R24,131
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L68
L67:
cpi R20,125
ldi R30,0
cpc R21,R30
breq L64
xjmp L77
L68:
cpi R20,224
ldi R30,0
cpc R21,R30
breq L58
xjmp L77
X11:
.dbline 154
L58:
.dbline 155
; case En: if (check_buf(Enter,4) == OK)
ldi R18,4
ldi R16,<_Enter
ldi R17,>_Enter
xcall _check_buf
cpi R16,1
breq X16
xjmp L77
X16:
.dbline 156
; comcheck = ENTER;
clr R2
sts _comcheck,R2
.dbline 157
; break;
xjmp L77
L61:
.dbline 158
; case Run: if(check_buf(RunBuffer,2) == OK)
ldi R18,2
ldi R16,<_RunBuffer
ldi R17,>_RunBuffer
xcall _check_buf
cpi R16,1
brne L77
.dbline 159
; {comcheck = RUN;
.dbline 159
ldi R24,1
sts _comcheck,R24
.dbline 162
;
; //runtask(RxBuffer);
; }
.dbline 163
; break;
xjmp L77
L64:
.dbline 164
; case Stop: if(check_buf(StopBuffer,2) == OK)
ldi R18,2
ldi R16,<_StopBuffer
ldi R17,>_StopBuffer
xcall _check_buf
cpi R16,1
brne L77
.dbline 165
; {comcheck = STOP;
.dbline 165
ldi R24,2
sts _comcheck,R24
.dbline 168
; //stoptask(RxBuffer);
;
; }
.dbline 169
; break;
.dbline 170
; default: break;
.dbline 171
; }break;
xjmp L77
L69:
.dbline 175
; case ONE:
; case TWO:
; case THREE:
; case FOUR: if (check_buf(TxBuffer,4) == OK)
ldi R18,4
ldi R16,<_TxBuffer
ldi R17,>_TxBuffer
xcall _check_buf
cpi R16,1
brne L77
.dbline 176
.dbline 176
clr R20
xjmp L75
L72:
.dbline 176
ldi R24,<_Enter
ldi R25,>_Enter
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_RxBuffer
ldi R25,>_RxBuffer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L73:
.dbline 176
inc R20
L75:
.dbline 176
; {for (i = 0;i < 4;i++) RxBuffer[i] = Enter[i];
cpi R20,4
brlo L72
.dbline 177
; }
.dbline 179
; //UDR = TSTA1;
; break;
xjmp L77
L51:
.dbline 180
; default: PORTC = 0xf0;break;
ldi R24,240
out 0x15,R24
.dbline 180
L76:
.dbline 182
L77:
.dbline 182
; }
; while (!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L76
.dbline 183
; n=1;
ldi R24,1
sts _n,R24
.dbline 184
; UDR = TSTA1;
ldi R24,107
out 0xc,R24
.dbline -2
L50:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 188
;
;
; }
; void main(){
.dbline 189
; n = 0;
clr R2
sts _n,R2
.dbline 190
; flag = NG;
sts _flag,R2
.dbline 191
; init_devices();
xcall _init_devices
xjmp L81
L80:
.dbline 192
; while(1){
.dbline 193
; if (flag == OK && n == 0)
lds R24,_flag
cpi R24,1
brne L83
lds R2,_n
tst R2
brne L83
.dbline 194
; check_com();
xcall _check_com
L83:
.dbline 196
L81:
.dbline 192
xjmp L80
X17:
.dbline -2
L79:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile G:\ly\mega\m16rs\main.c
_comcheck::
.blkb 1
.dbsym e comcheck _comcheck c
_TxBuffer::
.blkb 4
.dbsym e TxBuffer _TxBuffer A[4:4]c
_flag:
.blkb 1
.dbsym s flag _flag c
_len:
.blkb 1
.dbsym s len _len c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -