📄 test_pc10_main.lis
字号:
01BC ;
01BC ; send_buffer[0] = s;
01BC 40930900 sts _send_buffer,R20
01C0 .dbline 216
01C0 ; char_len = 1;
01C0 81E0 ldi R24,1
01C2 80930000 sts _char_len,R24
01C6 .dbline 217
01C6 ; serial_send(0);
01C6 0027 clr R16
01C8 6ADF xcall _serial_send
01CA .dbline 218
01CA ; return ;
01CA .dbline -2
01CA L51:
01CA 0E940000 xcall pop_gset1
01CE .dbline 0 ; func end
01CE 0895 ret
01D0 .dbsym r s 20 c
01D0 .dbend
01D0 .dbfunc e printf_hex _printf_hex fV
01D0 ; temp -> R20,R21
01D0 ; s -> R22
.even
01D0 _printf_hex::
01D0 0E940000 xcall push_gset2
01D4 602F mov R22,R16
01D6 .dbline -1
01D6 .dbline 223
01D6 ;
01D6 ; }
01D6 ;
01D6 ;
01D6 ; void printf_hex(unsigned char s){
01D6 .dbline 224
01D6 ; unsigned int temp = 0;
01D6 4427 clr R20
01D8 5527 clr R21
01DA .dbline 226
01DA ;
01DA ; temp = hextochar(s);
01DA 062F mov R16,R22
01DC 1127 clr R17
01DE 0E940000 xcall _hextochar
01E2 A801 movw R20,R16
01E4 .dbline 227
01E4 ; send_buffer[1] = temp;
01E4 40930A00 sts _send_buffer+1,R20
01E8 .dbline 228
01E8 ; temp = temp >> 8;
01E8 452F mov R20,R21
01EA 5527 clr R21
01EC .dbline 229
01EC ; send_buffer[0] = temp;
01EC 40930900 sts _send_buffer,R20
01F0 .dbline 230
01F0 ; char_len = 2;
01F0 82E0 ldi R24,2
01F2 80930000 sts _char_len,R24
01F6 .dbline 231
01F6 ; serial_send(0);
01F6 0027 clr R16
01F8 52DF xcall _serial_send
01FA .dbline 232
01FA ; return;
01FA .dbline -2
01FA L52:
01FA 0E940000 xcall pop_gset2
01FE .dbline 0 ; func end
01FE 0895 ret
0200 .dbsym r temp 20 i
0200 .dbsym r s 22 c
0200 .dbend
0200 .dbfunc e printf_int _printf_int fV
0200 ; c -> R20,R21
.even
0200 _printf_int::
0200 0E940000 xcall push_gset1
0204 A801 movw R20,R16
0206 .dbline -1
0206 .dbline 237
0206 ; }
0206 ;
0206 ;
0206 ; void printf_int(int c )
0206 ; {
0206 .dbline 238
0206 ; char_len = bcd_char( c, send_buffer);
0206 20E0 ldi R18,<_send_buffer
0208 30E0 ldi R19,>_send_buffer
020A 8A01 movw R16,R20
020C 0E940000 xcall _bcd_char
0210 00930000 sts _char_len,R16
0214 .dbline 239
0214 ; serial_send(0);
0214 0027 clr R16
0216 43DF xcall _serial_send
0218 .dbline 240
0218 ; return;
0218 .dbline -2
0218 L54:
0218 0E940000 xcall pop_gset1
021C .dbline 0 ; func end
021C 0895 ret
021E .dbsym r c 20 I
021E .dbend
021E .dbfunc e printf_str _printf_str fV
021E ; i -> R20
021E ; s -> R22,R23
.even
021E _printf_str::
021E 0E940000 xcall push_gset2
0222 B801 movw R22,R16
0224 .dbline -1
0224 .dbline 244
0224 ; }
0224 ;
0224 ;
0224 ; void printf_str(char *s ){
0224 .dbline 245
0224 ; unsigned char i=0;
0224 4427 clr R20
0226 0CC0 xjmp L57
0228 L56:
0228 .dbline 247
0228 .dbline 249
0228 80E0 ldi R24,<_send_buffer
022A 90E0 ldi R25,>_send_buffer
022C E42F mov R30,R20
022E FF27 clr R31
0230 E80F add R30,R24
0232 F91F adc R31,R25
0234 DB01 movw R26,R22
0236 2C90 ld R2,x
0238 2082 std z+0,R2
023A .dbline 250
023A 4395 inc R20
023C .dbline 251
023C 6F5F subi R22,255 ; offset = 1
023E 7F4F sbci R23,255
0240 .dbline 252
0240 L57:
0240 .dbline 247
0240 ;
0240 ; while( *s ){
0240 FB01 movw R30,R22
0242 2080 ldd R2,z+0
0244 2220 tst R2
0246 81F7 brne L56
0248 .dbline 253
0248 ;
0248 ; send_buffer[i] = *s ;
0248 ; i ++;
0248 ; s++;
0248 ; }
0248 ; char_len = i;
0248 40930000 sts _char_len,R20
024C .dbline 254
024C ; serial_send( 0 );
024C 0027 clr R16
024E 27DF xcall _serial_send
0250 .dbline 256
0250 ;
0250 ; return;
0250 .dbline -2
0250 L55:
0250 0E940000 xcall pop_gset2
0254 .dbline 0 ; func end
0254 0895 ret
0256 .dbsym r i 20 c
0256 .dbsym r s 22 pc
0256 .dbend
0256 .dbfunc e outp _outp fV
0256 ; p -> R20,R21
0256 ; data -> R18
0256 ; add -> R16,R17
.even
0256 _outp::
0256 0E940000 xcall push_gset1
025A .dbline -1
025A .dbline 264
025A ; }
025A ; /////////////////////////////////////////////////////////////////////////////////
025A ;
025A ; /////////////////////////////////////////////////////////////////////////////
025A ; ////// 104bus io 操作
025A ; //////////////////////////////////////////////////////////////////////////////
025A ; void outp(unsigned int add,unsigned char data)
025A ; {
025A .dbline 266
025A ; unsigned char *p;
025A ; p = (unsigned char *) (add+0x2000);
025A A801 movw R20,R16
025C 4050 subi R20,0 ; offset = 8192
025E 504E sbci R21,224
0260 .dbline 268
0260 ;
0260 ; *p=data;
0260 FA01 movw R30,R20
0262 2083 std z+0,R18
0264 .dbline -2
0264 .dbline 270
0264 ;
0264 ; }
0264 L59:
0264 0E940000 xcall pop_gset1
0268 .dbline 0 ; func end
0268 0895 ret
026A .dbsym r p 20 pc
026A .dbsym r data 18 c
026A .dbsym r add 16 i
026A .dbend
026A .dbfunc e inp _inp fc
026A ; p -> R20,R21
026A ; add -> R16,R17
.even
026A _inp::
026A 0E940000 xcall push_gset1
026E .dbline -1
026E .dbline 274
026E ;
026E ;
026E ; unsigned char inp(unsigned int add)
026E ; {
026E .dbline 277
026E ;
026E ; unsigned char *p;
026E ; p = (unsigned char *) (add+0x2000);
026E A801 movw R20,R16
0270 4050 subi R20,0 ; offset = 8192
0272 504E sbci R21,224
0274 .dbline 278
0274 ; return *p;
0274 FA01 movw R30,R20
0276 0081 ldd R16,z+0
0278 .dbline -2
0278 L60:
0278 0E940000 xcall pop_gset1
027C .dbline 0 ; func end
027C 0895 ret
027E .dbsym r p 20 pc
027E .dbsym r add 16 i
027E .dbend
027E .dbfunc e init_gyro _init_gyro fV
.even
027E _init_gyro::
027E .dbline -1
027E .dbline 298
027E ;
027E ; }
027E ;
027E ; ////////////////////////////////////////////////////////////////////////////////
027E ; //////////////////////////////////////////////////////////////////////
027E ; //
027E ; // gyro_sample
027E ; //
027E ; // 参数 无
027E ; //
027E ; // 说明 陀螺仪采样函数,首先运行500次,求得零漂平均值,然后处理
027E ; // 陀螺仪数据,最终用算出的角度更新全局变量rob_angle
027E ; //
027E ; // 返回值 无
027E ; //
027E ; // 创建人 张辉
027E ; //
027E ; //////////////////////////////////////////////////////////////////////
027E ;
027E ; void init_gyro(){
027E .dbline 299
027E ; outp(GYRO_BASE+4,0x00); /*陀螺仪标志位置0*/
027E 2227 clr R18
0280 04E9 ldi R16,660
0282 12E0 ldi R17,2
0284 .dbline -2
0284 .dbline 301
0284 ;
0284 ; }
0284 L61:
0284 .dbline 0 ; func end
0284 E8CF xjmp _outp
0286 .dbend
0286 .dbfunc e gyro_sample _gyro_sample fI
0286 ; angle -> y+6
0286 ; cmplt -> R10,R11
0286 ; low_byte -> R10,R11
0286 ; mid_byte -> R12,R13
0286 ; high_byte -> y+2
.even
0286 _gyro_sample::
0286 0E940000 xcall push_gset4
028A 2A97 sbiw R28,10
028C .dbline -1
028C .dbline 303
028C ; int gyro_sample()
028C ; {
028C .dbline 308
028C ; int cmplt;
028C ; long angle;
028C ; unsigned long high_byte;
028C ; unsigned int mid_byte,low_byte;
028C ; high_byte = 0;
028C 40E0 ldi R20,0
028E 50E0 ldi R21,0
0290 60E0 ldi R22,0
0292 70E0 ldi R23,0
0294 FE01 movw R30,R28
0296 4283 std z+2,R20
0298 5383 std z+3,R21
029A 6483 std z+4,R22
029C 7583 std z+5,R23
029E .dbline 309
029E ; cmplt=inp(GYRO_BASE+0);
029E 00E9 ldi R16,656
02A0 12E0 ldi R17,2
02A2 E3DF xcall _inp
02A4 A02E mov R10,R16
02A6 BB24 clr R11
02A8 .dbline 311
02A8 ;
02A8 ; if((cmplt&0x01)==0x01)
02A8 C501 movw R24,R10
02AA 8170 andi R24,1
02AC 9070 andi R25,0
02AE 8130 cpi R24,1
02B0 E0E0 ldi R30,0
02B2 9E07 cpc R25,R30
02B4 19F4 brne L63
02B6 .dbline 312
02B6 ; {
02B6 .dbline 313
02B6 ; return 0;
02B6 0027 clr R16
02B8 1127 clr R17
02BA 89C0 xjmp L62
02BC L63:
02BC .dbline 315
02BC ; }
02BC ; outp(GYRO_BASE+4,0x01);
02BC 21E0 ldi R18,1
02BE 04E9 ldi R16,660
02C0 12E0 ldi R17,2
02C2 C9DF xcall _outp
02C4 .dbline 316
02C4 ; high_byte=inp(GYRO_BASE+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -