📄 can18b20.s
字号:
.dbline 424
; HC595_SENDDAT(table[ge]|0x80); //加小数点
ldi R24,<_table
ldi R25,>_table
lds R30,_ge
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
ori R16,128
rcall _HC595_SENDDAT
.dbline 425
; PORTC|=0x10;
sbi 0x15,4
.dbline 426
; }
rjmp L110
L109:
.dbline 428
.dbline 428
clr R2
sts _flag,R2
.dbline 430
in R24,0x15
andi R24,231
out 0x15,R24
.dbline 431
ldi R24,<_table
ldi R25,>_table
lds R30,_shi
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _HC595_SENDDAT
.dbline 432
sbi 0x15,3
.dbline 433
L110:
.dbline -2
L106:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e main _main fV
.area func_lit(rom, con, rel)
L156:
.word `L145
.word `L145
.word `L146
.word `L146
.word `L147
.word `L148
.word `L148
.word `L149
.word `L150
.word `L150
.word `L151
.word `L151
.word `L152
.word `L153
.word `L153
.word `L154
.word `L155
.area text(rom, con, rel)
.dbfile F:\can-18b20(无浮点再调试)\can18b20.c
; m -> R12,R13
; a -> R10
; temh -> R20
; teml -> R22
; i -> R12
; temporary -> y+0
; j -> R14
.even
_main::
sbiw R28,9
.dbline -1
.dbline 440
; else
; { flag=0;
; //十位显示
; PORTC&=(~0x18);
; HC595_SENDDAT(table[shi]);
; PORTC|=0x08;
; }
;
; }
;
; /*************************** 主机先发送,等待接收***************************/
; /* 说明:外部中断0不使能,如果允许,显示保持不住。*/
; void main( void )
; { unsigned char i,j;
.dbline 442
; unsigned char teml,temh;
; unsigned char a=0;
clr R10
.dbline 446
; unsigned int m;
; unsigned char temporary[9];
; //M8 端口初始化
; PORTB=0x07; //MCP2515 disable(CS,PB2),PB1,PB0上、下行灯灭
ldi R24,7
out 0x18,R24
.dbline 447
; DDRB|=0x07;
in R24,0x17
ori R24,7
out 0x17,R24
.dbline 448
; DDRD=0xC0; //1100 0000 PD7、PD6输出保持,PD5、PD4按键输入
ldi R24,192
out 0x11,R24
.dbline 449
; PORTC=0x02; //CS disable
ldi R24,2
out 0x15,R24
.dbline 450
; DDRC|=0x1F; //PC3为595的位选COM2(十位),PC4为595的位选COM1(个位)+595(PC0、PC1、PC2)
in R24,0x14
ori R24,31
out 0x14,R24
.dbline 456
; /*use int0*/
; // GICR|=0x40; //int0 enable
; //MCUCR|=0x02; //下降沿触发中断0
; //uart_init(); //串口初始化
; //初始化SPI
; init_SPI();
rcall _init_SPI
.dbline 458
; //reset mcp2515
; reset_MCP();
rcall _reset_MCP
.dbline 460
; //初始化 CAN
; init_can();
rcall _init_can
.dbline 461
; minus_flag=0; //初始化负温度标志
clr R2
sts _minus_flag,R2
.dbline 462
; CLI(); //关中断
cli
L112:
.dbline 464
L113:
.dbline 464
; //矫正第一次数据,不矫正第一次显示85
; while(!ds1820_ack());
rcall _ds1820_ack
tst R16
breq L112
.dbline 465
; write_byte(0xCC); // Skip ROM
ldi R16,204
rcall _write_byte
.dbline 466
; write_byte(0x44); // Start Conversion
ldi R16,68
rcall _write_byte
.dbline 467
; wait(750);
ldi R16,750
ldi R17,2
rcall _wait
L115:
.dbline 468
L116:
.dbline 468
; while(!ds1820_ack());
rcall _ds1820_ack
tst R16
breq L115
.dbline 469
; write_byte(0xCC); // Skip ROM
ldi R16,204
rcall _write_byte
.dbline 470
; write_byte(0xBE); // Read Scratch Pad
ldi R16,190
rcall _write_byte
.dbline 471
; teml = read_byte();
rcall _read_byte
mov R22,R16
.dbline 472
; temh = read_byte();
rcall _read_byte
mov R20,R16
.dbline 473
; m=temh*256+teml;
mov R18,R20
clr R19
ldi R16,256
ldi R17,1
rcall empy16s
movw R12,R16
mov R2,R22
clr R3
add R12,R2
adc R13,R3
.dbline 474
; if ((m&0xf800)!=0)
movw R24,R12
andi R24,0
andi R25,248
cpi R24,0
cpc R24,R25
breq L118
X0:
.dbline 475
; {minus_flag=1;
.dbline 475
ldi R24,1
sts _minus_flag,R24
.dbline 476
; m=(~m)+1; //取反
movw R24,R12
com R24
com R25
adiw R24,1
movw R12,R24
.dbline 477
; a=(unsigned char)((m*5)/80);}
ldi R16,5
ldi R17,0
movw R18,R24
rcall empy16s
ldi R18,80
ldi R19,0
rcall div16u
mov R10,R16
.dbline 477
rjmp L119
L118:
.dbline 479
; else
; a=(unsigned char)((m*5)/80);
ldi R16,5
ldi R17,0
movw R18,R12
rcall empy16s
ldi R18,80
ldi R19,0
rcall div16u
mov R10,R16
L119:
.dbline 480
; shi=a/10;
ldi R17,10
mov R16,R10
rcall div8u
sts _shi,R16
.dbline 481
; ge=a%10;
ldi R17,10
mov R16,R10
rcall mod8u
sts _ge,R16
.dbline 482
; if(minus_flag==1)
lds R24,_minus_flag
cpi R24,1
brne L120
.dbline 483
; wendu=a|0x80; //暂时做 char处理
mov R24,R10
ori R24,128
sts _wendu,R24
rjmp L121
L120:
.dbline 485
; else
; wendu=a;
sts _wendu,R10
L121:
.dbline 486
; TCNT0=0xF8;//1ms
ldi R24,248
out 0x32,R24
.dbline 487
; TCCR0=5; //1024
ldi R24,5
out 0x33,R24
.dbline 488
; TIMSK=(1<<TOIE0);
ldi R24,1
out 0x39,R24
.dbline 489
; count=0;
clr R2
clr R3
sts _count+1,R3
sts _count,R2
.dbline 490
; dot1=0;
sts _dot1,R2
.dbline 492
; //开中断
; SEI();
sei
rjmp L123
L122:
.dbline 494
; while(1)
; { if(count==0)
.dbline 494
lds R2,_count
lds R3,_count+1
tst R2
breq X4
rjmp L125
X4:
tst R3
breq X5
rjmp L125
X5:
X1:
.dbline 495
; { fill_msg_box_0(); //填充CAN数据
.dbline 495
rcall _fill_msg_box_0
.dbline 496
; send_box_0(); //发送CAN信息
rcall _send_box_0
.dbline 497
; minus_flag=0; //负温度标志清0
clr R2
sts _minus_flag,R2
.dbline 499
; // 读取温度值
; CLI();
cli
L127:
.dbline 500
L128:
.dbline 500
; while(!ds1820_ack());
rcall _ds1820_ack
tst R16
breq L127
.dbline 501
; SEI();
sei
.dbline 502
; write_byte(0xCC); // Skip ROM
ldi R16,204
rcall _write_byte
.dbline 503
; write_byte(0x44); // Start Conversion
ldi R16,68
rcall _write_byte
.dbline 504
; delay(20);
ldi R16,20
ldi R17,0
rcall _delay
.dbline 505
; CLI();
cli
L130:
.dbline 506
L131:
.dbline 506
; while(!ds1820_ack());
rcall _ds1820_ack
tst R16
breq L130
.dbline 507
; SEI();
sei
.dbline 508
; write_byte(0xCC); // Skip ROM
ldi R16,204
rcall _write_byte
.dbline 509
; write_byte(0xBE); // Read Scratch Pad
ldi R16,190
rcall _write_byte
.dbline 510
; for(j = 0; j < 9; j++)
clr R14
rjmp L136
L133:
.dbline 511
rcall _read_byte
movw R24,R28
mov R30,R14
clr R31
add R30,R24
adc R31,R25
std z+0,R16
L134:
.dbline 510
inc R14
L136:
.dbline 510
mov R24,R14
cpi R24,9
brlo L133
.dbline 512
; temporary[j] = read_byte();
; if(!crccheck(temporary,9)) //CRC校验正确
ldi R18,9
movw R16,R28
rcall _crccheck
tst R16
breq X6
rjmp L137
X6:
.dbline 513
; {
.dbline 514
; teml=temporary[0];
ldd R22,y+0
.dbline 515
; temh=temporary[1];
ldd R20,y+1
.dbline 517
; // 处理小数第一位
; j=teml&0x0F;
mov R24,R22
andi R24,15
mov R14,R24
.dbline 519
; //温度十位个位处理
; teml>>=4;
mov R24,R22
swap R24
andi R24,#0x0F
mov R22,R24
.dbline 520
; temh<<=4;
mov R24,R20
andi R24,#0x0F
swap R24
mov R20,R24
.dbline 521
; i=teml|temh;
mov R12,R22
or R12,R24
.dbline 522
; if(i>=0x80) //是负温度
mov R24,R12
cpi R24,128
brlo L140
.dbline 523
; {minus_flag=1;
.dbline 523
ldi R24,1
sts _minus_flag,R24
.dbline 524
; i=~i; //取反
com R12
.dbline 525
; j=(~j)&0x0F;
mov R24,R14
com R24
andi R24,15
mov R14,R24
.dbline 526
; j=j+1;} //加1
inc R14
.dbline 526
L140:
.dbline 527
; switch(j) //小数第一位
mov R10,R14
clr R11
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brge X7
rjmp L143
X7:
ldi R24,16
cp R24,R10
cpc R25,R11
brge X8
rjmp L143
X8:
ldi R16,2
ldi R17,0
movw R18,R10
rcall empy16s
movw R30,R16
ldi R24,<L156
ldi R25,>L156
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
X2:
.dbline 528
; {case 0:
L145:
.dbline 529
; case 1:{dot1=0;break;}
.dbline 529
clr R2
sts _dot1,R2
.dbline 529
rjmp L143
L146:
.dbline 531
; case 2:
; case 3:{dot1=1;break;}
.dbline 531
ldi R24,1
sts _dot1,R24
.dbline 531
rjmp L143
L147:
.dbline 532
; case 4:{dot1=2;break;}
.dbline 532
ldi R24,2
sts _dot1,R24
.dbline 532
rjmp L143
L148:
.dbline 534
; case 5:
; case 6:{dot1=3;break;}
.dbline 534
ldi R24,3
sts _dot1,R24
.dbline 534
rjmp L143
L149:
.dbline 535
; case 7:{dot1=4;break;}
.dbline 535
ldi R24,4
sts _dot1,R24
.dbline 535
rjmp L143
L150:
.dbline 537
; case 8:
; case 9:{dot1=5;break;}
.dbline 537
ldi R24,5
sts _dot1,R24
.dbline 537
rjmp L143
L151:
.dbline 539
; case 10:
; case 11:{dot1=6;break;}
.dbline 539
ldi R24,6
sts _dot1,R24
.dbline 539
rjmp L143
L152:
.dbline 540
; case 12:{dot1=7;break;}
.dbline 540
ldi R24,7
sts _dot1,R24
.dbline 540
rjmp L143
L153:
.dbline 542
; case 13:
; case 14:{dot1=8;break;}
.dbline 542
ldi R24,8
sts _dot1,R24
.dbline 542
rjmp L143
L154:
.dbline 543
; case 15:{dot1=9;break;}
.dbline 543
ldi R24,9
sts _dot1,R24
.dbline 543
rjmp L143
L155:
.dbline 544
; case 16:{dot1=0;i=i+1;break;}
.dbline 544
clr R2
sts _dot1,R2
.dbline 544
inc R12
.dbline 544
.dbline 545
; default:break;
L143:
.dbline 547
; }
; shi=i/10; //十位
ldi R17,10
mov R16,R12
rcall div8u
sts _shi,R16
.dbline 548
; ge=i%10; //个位
ldi R17,10
mov R16,R12
rcall mod8u
sts _ge,R16
.dbline 549
; if(minus_flag==1)//负温度
lds R24,_minus_flag
cpi R24,1
brne L157
.dbline 550
; wendu=i|0x80; //暂时做 char处理
mov R24,R12
ori R24,128
sts _wendu,R24
rjmp L158
L157:
.dbline 552
; else
; wendu=i;
sts _wendu,R12
L158:
.dbline 553
; }
L137:
.dbline 554
; }
L125:
.dbline 555
L123:
.dbline 493
rjmp L122
X3:
.dbline -2
L111:
adiw R28,9
.dbline 0 ; func end
ret
.dbsym r m 12 i
.dbsym r a 10 c
.dbsym r temh 20 c
.dbsym r teml 22 c
.dbsym r i 12 c
.dbsym l temporary 0 A[9:9]c
.dbsym r j 14 c
.dbend
.area bss(ram, con, rel)
.dbfile F:\can-18b20(无浮点再调试)\can18b20.c
_minus_flag::
.blkb 1
.dbsym e minus_flag _minus_flag c
_dot1::
.blkb 1
.dbsym e dot1 _dot1 c
_ge::
.blkb 1
.dbsym e ge _ge c
_shi::
.blkb 1
.dbsym e shi _shi c
_wendu::
.blkb 1
.dbsym e wendu _wendu c
_count::
.blkb 2
.dbsym e count _count i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -