📄 main.s
字号:
lds R9,_latitude+2+1
lds R6,_latitude
lds R7,_latitude+1
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
ldi R20,111
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R20
movw R18,R22
xcall empy32u
sts _y2_post+1,R17
sts _y2_post,R16
sts _y2_post+2+1,R19
sts _y2_post+2,R18
.dbline 80
; area += Get_Area(x1_post,y1_post,x2_post,y2_post);
movw R2,R16
movw R4,R18
std y+8,R2
std y+9,R3
std y+10,R4
std y+11,R5
lds R4,_x2_post+2
lds R5,_x2_post+2+1
lds R2,_x2_post
lds R3,_x2_post+1
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
lds R4,_y1_post+2
lds R5,_y1_post+2+1
lds R2,_y1_post
lds R3,_y1_post+1
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
lds R18,_x1_post+2
lds R19,_x1_post+2+1
lds R16,_x1_post
lds R17,_x1_post+1
xcall _Get_Area
lds R4,_area+2
lds R5,_area+2+1
lds R2,_area
lds R3,_area+1
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _area+1,R3
sts _area,R2
sts _area+2+1,R5
sts _area+2,R4
.dbline 82
; //计算完成本次坐标次数前移
; x1_post = x2_post;
lds R4,_x2_post+2
lds R5,_x2_post+2+1
lds R2,_x2_post
lds R3,_x2_post+1
sts _x1_post+1,R3
sts _x1_post,R2
sts _x1_post+2+1,R5
sts _x1_post+2,R4
.dbline 83
; y1_post = y2_post;
lds R4,_y2_post+2
lds R5,_y2_post+2+1
lds R2,_y2_post
lds R3,_y2_post+1
sts _y1_post+1,R3
sts _y1_post,R2
sts _y1_post+2+1,R5
sts _y1_post+2,R4
.dbline 85
;
; x_dis = x1_post;//显示偏移坐标
lds R4,_x1_post+2
lds R5,_x1_post+2+1
lds R2,_x1_post
lds R3,_x1_post+1
sts _x_dis+1,R3
sts _x_dis,R2
sts _x_dis+2+1,R5
sts _x_dis+2,R4
.dbline 86
; y_dis = y1_post;
lds R4,_y1_post+2
lds R5,_y1_post+2+1
lds R2,_y1_post
lds R3,_y1_post+1
sts _y_dis+1,R3
sts _y_dis,R2
sts _y_dis+2+1,R5
sts _y_dis+2,R4
.dbline 87
; if(x_dis < 0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_x_dis+2
lds R5,_x_dis+2+1
lds R2,_x_dis
lds R3,_x_dis+1
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L109
X32:
.dbline 88
; {
.dbline 89
; x_dis = ~(x_dis-1);
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
com R2
com R3
com R4
com R5
sts _x_dis+1,R3
sts _x_dis,R2
sts _x_dis+2+1,R5
sts _x_dis+2,R4
.dbline 90
; }
L109:
.dbline 91
; if(y_dis < 0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_y_dis+2
lds R5,_y_dis+2+1
lds R2,_y_dis
lds R3,_y_dis+1
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L111
X33:
.dbline 92
; {
.dbline 93
; y_dis = ~(y_dis-1);
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
com R2
com R3
com R4
com R5
sts _y_dis+1,R3
sts _y_dis,R2
sts _y_dis+2+1,R5
sts _y_dis+2,R4
.dbline 94
; }
L111:
.dbline 96
; //Hzk_Dis_Clr();
; Hzk_Dis_Data(1,1,x_dis/10,9);//显示相对坐标*0.01米
ldi R24,9
std y+4,R24
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
lds R18,_x_dis+2
lds R19,_x_dis+2+1
lds R16,_x_dis
lds R17,_x_dis+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32s
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
ldi R18,1
ldi R16,1
xcall _Hzk_Dis_Data
.dbline 97
; Hzk_Dis_Data(2,1,y_dis/10,9);
ldi R24,9
std y+4,R24
ldi R20,10
ldi R21,0
ldi R22,0
ldi R23,0
lds R18,_y_dis+2
lds R19,_y_dis+2+1
lds R16,_y_dis
lds R17,_y_dis+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32s
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
ldi R18,1
ldi R16,2
xcall _Hzk_Dis_Data
.dbline 98
; }
L107:
.dbline 99
; if(flag_area == 2)
lds R24,_flag_area
cpi R24,2
breq X43
xjmp L113
X43:
X34:
.dbline 100
; {
.dbline 101
; x2_post = (longitude - x0_longitude)*11;
lds R4,_x0_longitude+2
lds R5,_x0_longitude+2+1
lds R2,_x0_longitude
lds R3,_x0_longitude+1
lds R8,_longitude+2
lds R9,_longitude+2+1
lds R6,_longitude
lds R7,_longitude+1
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
ldi R20,11
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R20
movw R18,R22
xcall empy32u
sts _x2_post+1,R17
sts _x2_post,R16
sts _x2_post+2+1,R19
sts _x2_post+2,R18
.dbline 102
; y2_post = (latitude - y0_latitude)*11;
lds R4,_y0_latitude+2
lds R5,_y0_latitude+2+1
lds R2,_y0_latitude
lds R3,_y0_latitude+1
lds R8,_latitude+2
lds R9,_latitude+2+1
lds R6,_latitude
lds R7,_latitude+1
sub R6,R2
sbc R7,R3
sbc R8,R4
sbc R9,R5
ldi R20,11
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R20
movw R18,R22
xcall empy32u
sts _y2_post+1,R17
sts _y2_post,R16
sts _y2_post+2+1,R19
sts _y2_post+2,R18
.dbline 103
; area += Get_Area(x2_post,y2_post,x0_post,y0_post);
lds R4,_y0_post+2
lds R5,_y0_post+2+1
lds R2,_y0_post
lds R3,_y0_post+1
std y+8,R2
std y+9,R3
std y+10,R4
std y+11,R5
lds R4,_x0_post+2
lds R5,_x0_post+2+1
lds R2,_x0_post
lds R3,_x0_post+1
std y+4,R2
std y+5,R3
std y+6,R4
std y+7,R5
movw R2,R16
movw R4,R18
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
lds R18,_x2_post+2
lds R19,_x2_post+2+1
lds R16,_x2_post
lds R17,_x2_post+1
xcall _Get_Area
lds R4,_area+2
lds R5,_area+2+1
lds R2,_area
lds R3,_area+1
add R2,R16
adc R3,R17
adc R4,R18
adc R5,R19
sts _area+1,R3
sts _area,R2
sts _area+2+1,R5
sts _area+2,R4
.dbline 104
; if(area < 0)
ldi R20,0
ldi R21,0
ldi R22,0
ldi R23,0
cp R2,R20
cpc R3,R21
cpc R4,R22
cpc R5,R23
brge L115
X35:
.dbline 105
; {
.dbline 106
; area = ~(area - 1);
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
com R2
com R3
com R4
com R5
sts _area+1,R3
sts _area,R2
sts _area+2+1,R5
sts _area+2,R4
.dbline 107
; }
L115:
.dbline 108
; Hzk_Dis_Clr();
xcall _Hzk_Dis_Clr
.dbline 109
; Hzk_Dis_Data(2,1,area/100,9);
ldi R24,9
std y+4,R24
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
lds R18,_area+2
lds R19,_area+2+1
lds R16,_area
lds R17,_area+1
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32s
std y+0,R16
std y+1,R17
std y+2,R18
std y+3,R19
ldi R18,1
ldi R16,2
xcall _Hzk_Dis_Data
L117:
.dbline 110
; while(1);
L118:
.dbline 110
xjmp L117
L113:
.dbline 113
; //flag_area = 0;
; }
; if((flag_area == 0)||(flag_area == 1)||(flag_area == 2)||(flag_area == 3))
lds R2,_flag_area
tst R2
breq L124
X36:
mov R24,R2
cpi R24,1
breq L124
X37:
cpi R24,2
breq L124
X38:
cpi R24,3
brne L120
X39:
L124:
.dbline 114
; {
.dbline 115
; Hzk_Dis_Data(1,7,key_dis,2);
ldi R24,2
std y+4,R24
lds R2,_key_dis
clr R3
clr R4
clr R5
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
ldi R18,7
ldi R16,1
xcall _Hzk_Dis_Data
.dbline 116
; Hzk_Dis_Data(2,7,flag_area,2);
ldi R24,2
std y+4,R24
lds R2,_flag_area
clr R3
clr R4
clr R5
std y+0,R2
std y+1,R3
std y+2,R4
std y+3,R5
ldi R18,7
ldi R16,2
xcall _Hzk_Dis_Data
.dbline 117
; }
L120:
.dbline 125
; /*
; if(usart_flag & BIT(SINK0_FINISH))
; {
; Get_GPRMC_data();
; usart_flag &=~ BIT(SINK0_FINISH);
; }
; */
; }
L94:
.dbline 46
xjmp L93
X40:
.dbline -2
L92:
.dbline 0 ; func end
adiw R28,12
ret
.dbsym l i 13 i
.dbend
.dbfunc e Get_Key _Get_Key fV
.even
_Get_Key::
.dbline -1
.dbline 131
; }
;
;
;
; void Get_Key(void)
; {
.dbline 132
; if( (KEY_PIN & BIT(KEY_START)) == 0)
sbic 0x19,1
rjmp L126
X44:
.dbline 133
; {
.dbline 134
; Delay_Ms(20);
ldi R16,20
ldi R17,0
xcall _Delay_Ms
L128:
.dbline 136
; while((KEY_PIN & BIT(KEY_START)) == 0)
; ;
L129:
.dbline 135
sbis 0x19,1
rjmp L128
X45:
.dbline 137
; key = 1;
ldi R24,1
sts _key,R24
.dbline 138
; }
L126:
.dbline 139
; if( (KEY_PIN & BIT(KEY_FINISH)) == 0)
sbic 0x19,3
rjmp L131
X46:
.dbline 140
; {
.dbline 141
; Delay_Ms(20);
ldi R16,20
ldi R17,0
xcall _Delay_Ms
L133:
.dbline 143
; while((KEY_PIN & BIT(KEY_FINISH)) == 0)
; ;
L134:
.dbline 142
sbis 0x19,3
rjmp L133
X47:
.dbline 144
; key = 2;
ldi R24,2
sts _key,R24
.dbline 145
; }
L131:
.dbline -2
L125:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Get_GPRMC_data _Get_GPRMC_data fV
; f -> R14
; m -> R12
; n -> R10
.even
_Get_GPRMC_data::
xcall push_xgsetF0FC
.dbline -1
.dbline 149
; }
;
; void Get_GPRMC_data(void)//提取GPRMC数据
; {
.dbline 150
; unsigned char n=0,m=0,f=0;
clr R10
.dbline 150
clr R12
.dbline 150
clr R14
.dbline 151
; if((sink0_buf[1] == 'G')
lds R24,_sink0_buf+1
cpi R24,71
breq X64
xjmp L137
X64:
X48:
lds R24,_sink0_buf+2
cpi R24,80
breq X65
xjmp L137
X65:
X49:
lds R24,_sink0_buf+3
cpi R24,82
breq X66
xjmp L137
X66:
X50:
lds R24,_sink0_buf+4
cpi R24,77
breq X67
xjmp L137
X67:
X51:
lds R24,_sink0_buf+5
cpi R24,67
breq X68
xjmp L137
X68:
X52:
.dbline 156
; &&(sink0_buf[2] == 'P')
; &&(sink0_buf[3] == 'R')
; &&(sink0_buf[4] == 'M')
; &&(sink0_buf[5] == 'C'))//GPRMC
; {
.dbline 157
; LED_PORT ^= BIT(LED);
ldi R24,32
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 158
; for(n=0;n<100;n++)
xjmp L147
L144:
.dbline 159
; {
.dbline 160
; if(sink0_buf[n] == ',')
ldi R24,<_sink0_buf
ldi R25,>_sink0_buf
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,44
breq X69
xjmp L148
X69:
X53:
.dbline 161
; {
.dbline 162
; m ++;//m表示低级个","
inc R12
.dbline 163
; if(m == 1)//第一个","后面为时间数据
mov R24,R12
cpi R24,1
brne L150
X54:
.dbline 164
; {
.dbline 166
; //Hzk_Dis_Char(1,1,&sink0_buf[n+1],9);
; }
L150:
.dbline 167
; if(m == 2)//第二个","后面为定位信息状态
mov R24,R12
cpi R24,2
brne L152
X55:
.dbline 168
; {
.dbline 169
; gps_status = sink0_buf[n+1];
ldi R24,<_sink0_buf+1
ldi R25,>_sink0_buf+1
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
sts _gps_status,R2
.dbline 171
; //Hzk_Dis_Char(1,6,&gps_status,1);
; }
L152:
.dbline 172
; if(m == 3)//第三个","后面为纬度数据
mov R24,R12
cpi R24,3
breq X70
xjmp L155
X70:
X56:
.dbline 173
; {
.dbline 174
; if(gps_status == 'A')
lds R24,_gps_status
cpi R24,65
breq X71
xjmp L157
X71:
X57:
.dbline 175
; {
.dbline 177
; //Hzk_Dis_Char(1,1,&sink0_buf[n+1],11);
; latitude = (unsigned long)(sink0_buf[n+1]-0x30)*10000000
ldi R24,<_sink0_buf+4
ldi R25,>_sink0_buf+4
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
clr R25
sbiw R24,48
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldi R20,160
ldi R21,134
ldi R22,1
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
movw R2,R16
movw R4,R18
ldi R24,<_sink0_buf+3
ldi R25,>_sink0_buf+3
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
clr R25
sbiw R24,48
movw R6,R24
clr R8
sbrc R7,7
com R8
clr R9
sbrc R8,7
com R9
ldi R20,64
ldi R21,66
ldi R22,15
ldi R23,0
st -y,R9
st -y,R8
st -y,R7
st -y,R6
movw R16,R20
movw R18,R22
xcall empy32u
movw R6,R16
movw R8,R18
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
ldi R24,<_sink0_buf+6
ldi R25,>_sink0_buf+6
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
clr R25
sbiw R24,48
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldi R20,16
ldi R21,39
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
add R6,R16
adc R7,R17
adc R8,R18
adc R9,R19
ldi R24,<_sink0_buf+7
ldi R25,>_sink0_buf+7
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
clr R25
sbiw R24,48
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldi R20,232
ldi R21,3
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
add R6,R16
adc R7,R17
adc R8,R18
adc R9,R19
ldi R24,<_sink0_buf+8
ldi R25,>_sink0_buf+8
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
clr R25
sbiw R24,48
movw R2,R24
clr R4
sbrc R3,7
com R4
clr R5
sbrc R4,7
com R5
ldi R20,100
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall empy32u
add R6,R16
adc R7,R17
adc R8,R18
adc R9,R19
ldi R24,<_sink0_buf+9
ldi R25,>_sink0_buf+9
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -