📄 toucher2.s
字号:
L23:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbend
.dbfunc e print1 _print1 fV
; temp1 -> R10,R11
; temp -> y+0
; temp2 -> R12,R13
; temp3 -> R14,R15
; q -> R20
; p -> R22
; num -> y+15
.even
_print1::
st -y,r17
st -y,r16
xcall push_gset5
sbiw R28,5
.dbline -1
.dbline 300
; case 0x03:
; {
; write_print(0x56); //V
; write_print(0x4f); //O
; write_print(0x4c); //L
; }
; break;
; default:
; break;
; }
; }
; /***********************打印格式1*****************************/
; void print1(uint num)
; {
.dbline 301
; uchar p=0,q=0;
clr R22
.dbline 301
clr R20
.dbline 303
; uchar temp[5];
; uint temp1=0,temp2=0;
clr R10
clr R11
.dbline 303
clr R12
clr R13
.dbline 304
; uint temp3=0;
clr R14
clr R15
.dbline 305
; temp2=num;
ldd R12,y+15
ldd R13,y+16
.dbline 306
; temp3=10000;
ldi R24,10000
ldi R25,39
movw R14,R24
.dbline 307
; for(p=0;p<5;p++)
xjmp L35
L32:
.dbline 308
.dbline 309
movw R18,R14
movw R16,R12
xcall div16u
movw R10,R16
.dbline 310
movw R18,R14
movw R16,R12
xcall mod16u
movw R12,R16
.dbline 311
ldi R18,10
ldi R19,0
movw R16,R14
xcall div16u
movw R14,R16
.dbline 312
movw R24,R28
mov R30,R22
clr R31
add R30,R24
adc R31,R25
movw R24,R10
adiw R24,48
std z+0,R24
.dbline 313
L33:
.dbline 307
inc R22
L35:
.dbline 307
cpi R22,5
brlo L32
.dbline 314
; {
; temp1=temp2/temp3;
; temp2=temp2%temp3;
; temp3=temp3/10;
; temp[p]=(uchar)(temp1+0x30);
; }
; wdr();
xcall _wdr
.dbline 317
; //功能: 将一个uint型的数显示出来,但是第一个非零数字前的零要省略
;
; for(p=0;p<4;p++)
clr R22
xjmp L39
L36:
.dbline 318
; {
.dbline 319
; if(temp[p]!=0x30)
movw R24,R28
mov R30,R22
clr R31
add R30,R24
adc R31,R25
ldd R24,z+0
cpi R24,48
breq L40
.dbline 320
; break;
xjmp L38
L40:
.dbline 321
L37:
.dbline 317
inc R22
L39:
.dbline 317
cpi R22,4
brlo L36
L38:
.dbline 322
; }
; for(q=0;q<p;q++)
clr R20
xjmp L45
L42:
.dbline 323
.dbline 324
ldi R16,32
xcall _write_print
.dbline 325
L43:
.dbline 322
inc R20
L45:
.dbline 322
cp R20,R22
brlo L42
.dbline 326
; {
; write_print(0x20);
; }
; for(q=p;q<5;q++)
mov R20,R22
xjmp L49
L46:
.dbline 327
.dbline 328
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _write_print
.dbline 329
L47:
.dbline 326
inc R20
L49:
.dbline 326
cpi R20,5
brlo L46
.dbline -2
L31:
adiw R28,5
xcall pop_gset5
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r temp1 10 i
.dbsym l temp 0 A[5:5]c
.dbsym r temp2 12 i
.dbsym r temp3 14 i
.dbsym r q 20 c
.dbsym r p 22 c
.dbsym l num 15 i
.dbend
.dbfunc e date_print _date_print fV
; temp2 -> R20
; temp1 -> R10
; temp -> R22
.even
_date_print::
xcall push_gset3
mov R22,R16
.dbline -1
.dbline 333
; {
; write_print(temp[q]);
; }
; }
; /***********************时间处理打印函数*********************/
; void date_print(uchar temp) //时钟处理函数
; {
.dbline 334
; uchar temp1=0;
clr R10
.dbline 335
; uchar temp2=0;
clr R20
.dbline 336
; temp1=temp>>4;
mov R24,R22
swap R24
andi R24,#0x0F
.dbline 337
; temp1=temp1+0x30;
subi R24,208 ; addi 48
mov R10,R24
.dbline 338
; write_print(temp1); //打印
mov R16,R24
xcall _write_print
.dbline 339
; temp2=temp&0x0f; //取年\月\日\时\分\秒的低四位
mov R20,R22
andi R20,15
.dbline 340
; temp2=temp2+0x30;
subi R20,208 ; addi 48
.dbline 341
; write_print(temp2); //打印
mov R16,R20
xcall _write_print
.dbline -2
L50:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp2 20 c
.dbsym r temp1 10 c
.dbsym r temp 22 c
.dbend
.dbfunc e num_print _num_print fV
; temp2 -> R20
; temp1 -> R22
; temp -> R10
.even
_num_print::
xcall push_gset3
mov R10,R16
.dbline -1
.dbline 346
; }
;
; /********************编号打印*******************/
; void num_print(uchar temp)
; {
.dbline 347
; uchar temp1=0;
clr R22
.dbline 348
; uchar temp2=0;
clr R20
.dbline 349
; temp1=temp/10+0x30; //编号高位
ldi R17,10
mov R16,R10
xcall div8u
mov R22,R16
subi R22,208 ; addi 48
.dbline 350
; temp2=temp%10+0x30; //编号低位
ldi R17,10
mov R16,R10
xcall mod8u
mov R20,R16
subi R20,208 ; addi 48
.dbline 351
; write_print(temp1); //显示编号高位
mov R16,R22
xcall _write_print
.dbline 352
; write_print(temp2); //显示编号低位
mov R16,R20
xcall _write_print
.dbline -2
L51:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r temp2 20 c
.dbsym r temp1 22 c
.dbsym r temp 10 c
.dbend
.dbfunc e clarm_print _clarm_print fV
; temp -> R20,R21
; kkk -> R22
; addr_unit -> R10,R11
; addr_gas -> R12,R13
; temp1 -> R14,R15
; clarm_buff -> y+21
; a -> y+5
; c -> y+38
.even
_clarm_print::
xcall push_gset5
sbiw R28,39
.dbline -1
.dbline 358
; }
;
; /***********************报警记录打印***************************/
;
; void clarm_print(void)
; {
.dbline 360
; uchar a[16];
; uchar c=0;
clr R0
std y+38,R0
.dbline 361
; uchar kkk=0;
clr R22
.dbline 362
; uint temp=0;
clr R20
clr R21
.dbline 363
; uint temp1=0;
clr R14
clr R15
.dbline 364
; uint addr_gas=0x5c00; //外部E2中存放气体类型的初始地址
ldi R24,23552
ldi R25,92
movw R12,R24
.dbline 365
; uint addr_unit=0x6100; //外部E2中存放浓度单位的初始地址
ldi R25,97
movw R10,R24
.dbline 368
; uchar clarm_buff[17]; //取报警信息暂时用
;
; temp1=baojingaddr+16;
lds R24,_baojingaddr
lds R25,_baojingaddr+1
adiw R24,16
movw R14,R24
.dbline 369
; if(temp1==0x4280) //到头
cpi R24,128
ldi R30,66
cpc R25,R30
brne L53
.dbline 370
; temp1=0x0400; //调整
ldi R24,1024
ldi R25,4
movw R14,R24
L53:
.dbline 371
; int_prt();
xcall _int_prt
.dbline 372
; for(kkk=0;kkk<8;kkk++)
clr R22
xjmp L58
L55:
.dbline 373
; {
.dbline 374
; wdr();
xcall _wdr
.dbline 376
; /********************************************************/
; clarm_buff[1]= (uchar)((temp1>>8)&0x00ff ) ; //FM24C256片内地址高位字节
movw R24,R14
mov R24,R25
clr R25
andi R25,0
std y+22,R24
.dbline 377
; clarm_buff[2]= (uchar)(temp1&0x00ff) ; //FM24C256片内地址低位字节
movw R24,R14
andi R25,0
std y+23,R24
.dbline 378
; EIMSK&=~(1<<INT6);
in R24,0x39
andi R24,191
out 0x39,R24
.dbline 380
; //do
; fhz=I2cRead( SLA2_W,SLA2_R , clarm_buff[1],clarm_buff[2],16);
ldi R24,16
std y+4,R24
ldd R2,y+23
std y+2,R2
ldd R2,y+22
std y+0,R2
ldi R18,163
ldi R16,162
xcall _I2cRead
sts _fhz,R16
.dbline 383
; //while(fhz==1);
;
; for(c=0;c<16;c++)
clr R0
std y+38,R0
xjmp L66
L63:
.dbline 384
ldi R24,<_i2c_rd_buff
ldi R25,>_i2c_rd_buff
ldd R30,y+38
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
movw R24,R28
adiw R24,5
ldd R30,y+38
clr R31
add R30,R24
adc R31,R25
std z+0,R2
L64:
.dbline 383
ldd R0,y+38
inc R0
std y+38,R0
L66:
.dbline 383
ldd R24,y+38
cpi R24,16
brlo L63
.dbline 385
; a[c]=i2c_rd_buff[c] ; //
; EIMSK|=(1<<INT6);
in R24,0x39
ori R24,64
out 0x39,R24
.dbline 386
; if(temp1==0x4270) //到头
movw R24,R14
cpi R24,112
ldi R30,66
cpc R25,R30
brne L67
.dbline 387
; temp1=0x0400; //调整
ldi R24,1024
ldi R25,4
movw R14,R24
xjmp L68
L67:
.dbline 389
; else
; temp1=temp1+16 ; //调整
movw R24,R14
adiw R24,16
movw R14,R24
L68:
.dbline 391
; /****************从外部E2中读取气体类型**********************/
; addr_gas=addr_gas+baojing[0]*32+baojing[1]-1;
lds R2,_baojing
ldi R24,32
mul R24,R2
movw R24,R12
add R24,R0
adc R25,R1
lds R2,_baojing+1
clr R3
add R24,R2
adc R25,R3
sbiw R24,1
movw R12,R24
.dbline 392
; clarm_buff[1]= (uchar)((addr_gas>>8)&0x00ff ) ; //FM24C256片内地址高位字节
mov R24,R25
clr R25
andi R25,0
std y+22,R24
.dbline 393
; clarm_buff[2]= (uchar)(addr_gas&0x00ff) ; //FM24C256片内地址低位字节
movw R24,R12
andi R25,0
std y+23,R24
.dbline 394
; EIMSK&=~(1<<INT6);
in R24,0x39
andi R24,191
out 0x39,R24
.dbline 396
; //do
; fhz=I2cRead( SLA2_W,SLA2_R , clarm_buff[1],clarm_buff[2],1);
ldi R24,1
std y+4,R24
ldd R2,y+23
std y+2,R2
ldd R2,y+22
std y+0,R2
ldi R18,163
ldi R16,162
xcall _I2cRead
sts _fhz,R16
.dbline 399
; //while(fhz==1);
;
; gas_type=i2c_rd_buff[0] ; //将读出的气体类型放入gas_type中
lds R2,_i2c_rd_buff
sts _gas_type,R2
.dbline 400
; EIMSK|=(1<<INT6);
in R24,0x39
ori R24,64
out 0x39,R24
.dbline 402
; /***************从外部E2中读取浓度单位**************************/
; addr_unit=addr_unit+baojing[0]*32+baojing[1]-1;
lds R2,_baojing
ldi R24,32
mul R24,R2
movw R24,R10
add R24,R0
adc R25,R1
lds R2,_baojing+1
clr R3
add R24,R2
adc R25,R3
sbiw R24,1
movw R10,R24
.dbline 403
; clarm_buff[1]= (uchar)((addr_unit>>8)&0x00ff ) ; //FM24C256片内地址高位字节
mov R24,R25
clr R25
andi R25,0
std y+22,R24
.dbline 404
; clarm_buff[2]= (uchar)(addr_unit&0x00ff) ; //FM24C256片内地址低位字节
movw R24,R10
andi R25,0
std y+23,R24
.dbline 405
; EIMSK&=~(1<<INT6);
in R24,0x39
andi R24,191
out 0x39,R24
.dbline 407
; //do
; fhz=I2cRead( SLA2_W,SLA2_R , clarm_buff[1],clarm_buff[2],1);
ldi R24,1
std y+4,R24
ldd R2,y+23
std y+2,R2
ldd R2,y+22
std y+0,R2
ldi R18,163
ldi R16,162
xcall _I2cRead
sts _fhz,R16
.dbline 410
; //while(fhz==1);
;
; unit_chroma = i2c_rd_buff[0] ; //将读出的气体类型放入unit_chroma中
lds R2,_i2c_rd_buff
sts _unit_chroma,R2
.dbline 411
; EIMSK|=(1<<INT6);
in R24,0x39
ori R24,64
out 0x39,R24
.dbline 413
; /********************************************************/
; if(a[0]==0xff) //如果外部E2中没有数,无操作
ldd R24,y+5
cpi R24,255
brne L79
.dbline 414
; ;
xjmp L80
L79:
.dbline 416
; else
; {
.dbline 418
; //气体类型
; kong_print(0x08);
ldi R16,8
xcall _kong_print
.dbline 419
; gas_choice(); //报警类型打印
xcall _gas_choice
.dbline 420
; write_print(0x0d); //换行
ldi R16,13
xcall _write_print
.dbline 421
; cha_print(0xc6,0xf8); //气
ldi R18,248
ldi R16,198
xcall _cha_print
.dbline 422
; cha_print(0xb1,0xa8); //体
ldi R18,168
ldi R16,177
xcall _cha_print
.dbline 423
; cha_print(0xc0,0xe0); //类
ldi R18,224
ldi R16,192
xcall _cha_print
.dbline 424
; cha_print(0xd0,0xcd); //型
ldi R18,205
ldi R16,208
xcall _cha_print
.dbline 426
; //cha_print(0x1b,0x36); //选择字符集1
; write_print(0x3a); //:
ldi R16,58
xcall _write_print
.dbline 427
; write_print(0x0d); //换行
ldi R16,13
xcall _write_print
.dbline 431
;
; //浓度
; // cha_print(0x1c,0x26); //设置汉字打印方式
; temp=(uint)(a[9]);
ldd R20,y+14
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -