📄 m16_xmodem.s
字号:
; for(attempt = 1; attempt <= MAX_TX_TRY; attempt++)
ldi R20,1
xjmp L128
L125:
.dbline 407
; {
.dbline 408
; send_a_byte(EOT);
ldi R16,4
xcall _send_a_byte
.dbline 410
; // send file end
; Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 411
; temp=temp_char0;
lds R22,_temp_char0
.dbline 412
; if(temp == ACK)
cpi R22,6
brne L129
X45:
.dbline 413
; return 1; // file end acknowledged 接收方返因ACK信号
ldi R16,1
xjmp L124
L129:
.dbline 414
; }
L126:
.dbline 406
inc R20
L128:
.dbline 406
ldi R24,3
cp R24,R20
brsh L125
X46:
.dbline 415
; return 0; // file tx failed
clr R16
.dbline -2
L124:
.dbline 0 ; func end
ld R22,y+
ld R20,y+
ret
.dbsym r temp 22 c
.dbsym r attempt 20 c
.dbend
.dbfunc e update_CRC _update_CRC fi
; checksum -> R18,R19
; inData -> R16
.even
_update_CRC::
.dbline -1
.dbline 419
; }
;
; uint update_CRC(uchar inData, uint checksum)
; {
.dbline 420
; return ((checksum << 8) ^ crc16_table[ (checksum >> 8) ^ inData ]);
mov R2,R16
clr R3
movw R30,R18
mov R30,R31
clr R31
eor R30,R2
eor R31,R3
lsl R30
rol R31
ldi R24,<_crc16_table
ldi R25,>_crc16_table
add R30,R24
adc R31,R25
lpm R2,Z+
lpm R3,Z
movw R16,R18
mov R17,R16
clr R16
eor R16,R2
eor R17,R3
.dbline -2
L131:
.dbline 0 ; func end
ret
.dbsym r checksum 18 i
.dbsym r inData 16 c
.dbend
.dbfunc e intDelay _intDelay fV
; i -> R16,R17
.even
_intDelay::
.dbline -1
.dbline 429
; }
;
; /*
; *************************************
; *延时子程序,延时约10×i机器周期 *
; *************************************/
;
; void intDelay(uint i)
; {
L133:
.dbline 430
; while(i--);
L134:
.dbline 430
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L133
tst R3
brne L133
X47:
.dbline -2
L132:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e memcmp_self _memcmp_self fc
; i -> R10
; lenth -> y+1
; string2 -> R18,R19
; string1 -> R16,R17
.even
_memcmp_self::
st -y,R10
.dbline -1
.dbline 435
; }
;
;
; char memcmp_self(char const *string1, char const *string2 ,unsigned int lenth)
; {
.dbline 437
; uchar i;
; for(i = 0; i<lenth; i++)
clr R10
xjmp L140
L137:
.dbline 438
; {
.dbline 439
; if(*string1 != *string2)
movw R30,R18
lpm R2,Z
movw R30,R16
lpm R3,Z
cp R3,R2
breq L141
X48:
.dbline 440
; return 0;
clr R16
xjmp L136
L141:
.dbline 441
; string1++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 442
; string2++;
subi R18,255 ; offset = 1
sbci R19,255
.dbline 443
; }
L138:
.dbline 437
inc R10
L140:
.dbline 437
mov R2,R10
clr R3
ldd R0,y+1
ldd R1,y+2
cp R2,R0
cpc R3,R1
brlo L137
X49:
.dbline 444
; return 1;
ldi R16,1
.dbline -2
L136:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r i 10 c
.dbsym l lenth 1 i
.dbsym r string2 18 pkc
.dbsym r string1 16 pkc
.dbend
.dbfunc e do_serial_data _do_serial_data fV
; i -> R16
.even
_do_serial_data::
.dbline -1
.dbline 448
; }
; //char do_serial_data(uchar lenth)
; void do_serial_data(void)
; {
.dbline 450
; uchar i;
; if(receive_data[0]=='+')
lds R24,_receive_data
cpi R24,43
brne L144
X50:
.dbline 451
; { receive_CLIP = 1;
.dbline 451
ldi R24,1
sts _receive_CLIP,R24
.dbline 452
; if('1' == receive_data[8] && ((receive_data[18] >= '0') && (receive_data[18] <= '9')))
lds R24,_receive_data+8
cpi R24,49
brne L146
X51:
lds R24,_receive_data+18
cpi R24,48
brlo L146
X52:
ldi R24,57
lds R2,_receive_data+18
cp R24,R2
brlo L146
X53:
.dbline 453
; {
.dbline 454
; for(i=8;i<19;i++)
ldi R16,8
xjmp L154
L151:
.dbline 455
; dial_number[i-8]=receive_data[i];
ldi R24,<_receive_data
ldi R25,>_receive_data
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
ldi R24,<_dial_number-8
ldi R25,>_dial_number-8
mov R30,R16
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L152:
.dbline 454
inc R16
L154:
.dbline 454
cpi R16,19
brlo L151
X54:
.dbline 456
; flag_mobile = 1;
ldi R24,1
sts _flag_mobile,R24
.dbline 457
; }
L146:
.dbline 459
;
; }
L144:
.dbline -2
L143:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e Delay _Delay fV
; i -> R20
; Delay_MS -> R16,R17
.even
_Delay::
st -y,R20
.dbline -1
.dbline 510
; /*switch (lenth)
; {
; case 0:
; break;
; case 1:
; break;
; case 2:
;
; break;
; case 3:
; if(memcmp_self(receive_data, DATA_OK,2)==0 ) //检测是否收到 OK
; receive_OK = 1;
; break;
; case 4:
; if(memcmp_self(receive_data, DATA_RING,4)==0 ) //检测是否收到 OK
; receive_RING = 1;
; break;
; case 5:
; if(memcmp_self(receive_data, DATA_ERROR, 5)==0) //检测是否收到 ERROR
; receive_ERROR = 1;
; break;
; case 6:
; break;
; case 7:
; break;
; case 8:
; break;
; case 17:
; if(memcmp_self(receive_data,DATA_DOWNFINEOK,17)) //检测是否收到 Ok_Info_FileClose
; receive_DOWNFINEOK = 1;
; break;
; case 25:
; if(memcmp_self(receive_data,DATA_DOWNFINE,25)) //检测是否收到 Ok_Info_FileUploadStarted
; receive_DOWNFINE = 1;
; break;
; case 29:
; if(memcmp_self(receive_data,DATA_CLIP,5)) //检测是否收到 Ok_Info_FileClose
; { receive_CLIP = 1;
; for(i=8;i<19;i++)
; dial_number[i-8]=receive_data[i];
; }
; default:
; break;
; }*/
; }
;
;
;
; //1MS的延时
; void Delay(unsigned int Delay_MS)
; {
xjmp L158
L157:
.dbline 513
; unsigned char i;
; while(Delay_MS--)
; {
.dbline 514
; for(i=0;i<111;i++);
clr R20
xjmp L163
L160:
.dbline 514
L161:
.dbline 514
inc R20
L163:
.dbline 514
cpi R20,111
brlo L160
X55:
.dbline 515
; }
L158:
.dbline 512
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L157
tst R3
brne L157
X56:
.dbline -2
L156:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r i 20 c
.dbsym r Delay_MS 16 i
.dbend
.dbfunc e sendcmd _sendcmd fV
; by_Array -> R16,R17
.even
_sendcmd::
.dbline -1
.dbline 519
; }
;
; void sendcmd(unsigned char *by_Array)
; {
xjmp L166
L168:
.dbline 522
; while(*by_Array)
; {
; while (!( UCSRA & (1<<UDRE)));
L169:
.dbline 522
sbis 0xb,5
rjmp L168
X57:
.dbline 523
; UDR=*by_Array;
movw R30,R16
ldd R2,z+0
out 0xc,R2
.dbline 524
; by_Array++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 525
; }
L166:
.dbline 520
movw R30,R16
ldd R2,z+0
tst R2
brne L169
X58:
.dbline -2
L164:
.dbline 0 ; func end
ret
.dbsym r by_Array 16 pc
.dbend
.dbfunc e mms_atsent _mms_atsent fV
.even
_mms_atsent::
.dbline -1
.dbline 528
; }
; void mms_atsent(void)
; {
.dbline 529
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 530
; sendcmd("AT$MMSW=0\r\n") ;
ldi R16,<L172
ldi R17,>L172
xcall _sendcmd
L173:
.dbline 531
; while(receive_OK==0) ;
L174:
.dbline 531
lds R2,_receive_OK
tst R2
breq L173
X59:
.dbline 532
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 534
;
; receive_DAYUHAO=0;
clr R2
sts _receive_DAYUHAO,R2
.dbline 535
; sendcmd("AT$MMSW=1,1\r\n") ;
ldi R16,<L176
ldi R17,>L176
xcall _sendcmd
L177:
.dbline 536
; while(receive_DAYUHAO==0) ;
L178:
.dbline 536
lds R2,_receive_DAYUHAO
tst R2
breq L177
X60:
.dbline 537
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 538
; send_m_byte(dial_number,11);
ldi R18,11
ldi R19,0
ldi R16,<_dial_number
ldi R17,>_dial_number
xcall _send_m_byte
.dbline 539
; send_a_byte(ctrl_z);
ldi R16,26
xcall _send_a_byte
L180:
.dbline 540
; while(receive_OK==0) ;
L181:
.dbline 540
lds R2,_receive_OK
tst R2
breq L180
X61:
.dbline 541
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 543
;
; receive_DAYUHAO=0;
clr R2
sts _receive_DAYUHAO,R2
.dbline 544
; sendcmd("AT$MMSW=4,1\r\n");
ldi R16,<L183
ldi R17,>L183
xcall _sendcmd
L184:
.dbline 545
; while(receive_DAYUHAO==0) ;
L185:
.dbline 545
lds R2,_receive_DAYUHAO
tst R2
breq L184
X62:
.dbline 546
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 547
; sendcmd(subject);
ldi R16,<_subject
ldi R17,>_subject
xcall _sendcmd
.dbline 548
; send_a_byte(ctrl_z);
ldi R16,26
xcall _send_a_byte
L187:
.dbline 549
; while(receive_OK==0) ;
L188:
.dbline 549
lds R2,_receive_OK
tst R2
breq L187
X63:
.dbline 550
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 552
;
; receive_DAYUHAO=0;
clr R2
sts _receive_DAYUHAO,R2
.dbline 553
; sendcmd("AT$MMSW=5,1,1\r\n");
ldi R16,<L190
ldi R17,>L190
xcall _sendcmd
L191:
.dbline 554
; while(receive_DAYUHAO==0) ;
L192:
.dbline 554
lds R2,_receive_DAYUHAO
tst R2
breq L191
X64:
.dbline 555
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 556
; sendcmd("mypicture");
ldi R16,<L194
ldi R17,>L194
xcall _sendcmd
.dbline 557
; send_a_byte(ctrl_z);
ldi R16,26
xcall _send_a_byte
L195:
.dbline 558
; while(receive_OK==0) ;
L196:
.dbline 558
lds R2,_receive_OK
tst R2
breq L195
X65:
.dbline 559
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 561
;
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 562
; sendcmd("AT$MMSW=6,1,\"test.jpg\"\r\n");
ldi R16,<L198
ldi R17,>L198
xcall _sendcmd
L199:
.dbline 563
; while(receive_OK==0) ;
L200:
.dbline 563
lds R2,_receive_OK
tst R2
breq L199
X66:
.dbline 564
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 566
;
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 567
; sendcmd("AT$MMSSEND\r\n");
ldi R16,<L202
ldi R17,>L202
xcall _sendcmd
L203:
.dbline 568
; while(receive_OK==0) ;
L204:
.dbline 568
lds R2,_receive_OK
tst R2
breq L203
X67:
.dbline 569
; Delay(10);
ldi R16,10
ldi R17,0
xcall _Delay
.dbline 571
;
; receive_MMSTRACE=0;
clr R2
sts _receive_MMSTRACE,R2
L206:
.dbline 572
; while(receive_MMSTRACE==0) ;
L207:
.dbline 572
lds R2,_receive_MMSTRACE
tst R2
breq L206
X68:
.dbline 574
;
; receive_OK=0;
clr R2
sts _receive_OK,R2
.dbline 575
; sendcmd(deletmms);
ldi R16,<_deletmms
ldi R17,>_deletmms
xcall _sendcmd
L209:
.dbline 576
; while(receive_OK==0) ;
L210:
.dbline 576
lds R2,_receive_OK
tst R2
breq L209
X69:
.dbline -2
L171:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Xmodem _Xmodem fV
; i -> R20,R21
.even
_Xmodem::
st -y,R20
st -y,R21
.dbline -1
.dbline 581
;
; }
;
; void Xmodem(void)
; { int i;
.dbline 582
; pic = test_pic1;
ldi R24,<_test_pic1
ldi R25,>_test_pic1
sts _pic+1,R25
sts _pic,R24
.dbline 584
;
; receive_sp = 0;
clr R2
clr R3
sts _receive_sp+1,R3
sts _receive_sp,R2
.dbline 585
; for (i = 1; i < 65530; i++)
ldi R20,1
ldi R21,0
xjmp L216
L213:
.dbline 586
; {
.dbline 587
; if((*(pic-1) == 0xff) &&((*pic) == 0xd9))
lds R2,_pic
lds R3,_pic+1
movw R30,R2
sbiw R30,1
lpm R24,Z
cpi R24,255
brne L217
X70:
movw R30,R2
lpm R24,Z
cpi R24,217
brne L217
X71:
.dbline 588
; {
.dbline 589
; break;
xjmp L215
L217:
.dbline 591
; }
; pic++;
lds R24,_pic
lds R25,_pic+1
adiw R24,1
sts _pic+1,R25
sts _pic,R24
.dbline 592
; }
L214:
.dbline 585
subi R20,255 ; offset = 1
sbci R21,255
L216:
.dbline 585
ldi R24,250
ldi R25,255
ldi R26,0
ldi R27,0
movw R2,R20
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
cp R2,R24
cpc R3,R25
cpc R4,R26
cpc R5,R27
brlt L213
X72:
L215:
.dbline 593
; picLenth = i;
sts _picLenth+1,R21
sts _picLenth,R20
.dbline 595
;
; receive_OK = 0;
clr R2
sts _receive_OK,R2
.dbline 596
; receive_ERROR = 0; //删除旧图片
sts _receive_ERROR,R2
.dbline 597
; send_m_byte("at$fdel=\"*\"\r\n",13);
ldi R18,13
ldi R19,0
ldi R16,<L219
ldi R17,>L219
xcall _send_m_byte
L220:
.dbline 598
; while((receive_OK == 0) && (receive_ERRO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -