📄 thermometer-c51.lis
字号:
00F2 2224 clr R2
00F4 E42F mov R30,R20
00F6 F52F mov R31,R21
00F8 2382 std z+3,R2
00FA .dbline -2
00FA .dbline 56
00FA ; }
00FA L36:
00FA 00D0 rcall pop_gset2
00FC .dbline 0 ; func end
00FC 0895 ret
00FE .dbsym r i 22 c
00FE .dbsym r p2 20 pc
00FE .dbsym r p1 22 pc
00FE .dbend
00FE .dbfunc e SPI_Write1Byte _SPI_Write1Byte fV
00FE ; i -> R20
00FE ; Data -> R22
00FE ; Address -> R10
.even
00FE _SPI_Write1Byte::
00FE 00D0 rcall push_gset3
0100 622F mov R22,R18
0102 A02E mov R10,R16
0104 .dbline -1
0104 .dbline 59
0104 ;
0104 ; void SPI_Write1Byte(uchar Address,uchar Data)
0104 ; {uchar i;
0104 .dbline 60
0104 ; Set_SDI(0);//SDI=0;
0104 0027 clr R16
0106 BDDF rcall _Set_SDI
0108 .dbline 61
0108 ; Set_SCLK(1);//SCLK=1;//CPOL=1
0108 01E0 ldi R16,1
010A C4DF rcall _Set_SCLK
010C .dbline 62
010C ; Set_CE(1);//CE=1;//Enable Chip_Select
010C 01E0 ldi R16,1
010E B0DF rcall _Set_CE
0110 .dbline 63
0110 ; for(i=0;i<8;i++) //送地址;
0110 4427 clr R20
0112 0FC0 rjmp L41
0114 L38:
0114 .dbline 64
0114 ; {Set_SCLK(0);//SCLK=0;//时钟恢复
0114 .dbline 64
0114 0027 clr R16
0116 BEDF rcall _Set_SCLK
0118 .dbline 65
0118 ; if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
0118 A7FE sbrs R10,7
011A 03C0 rjmp L42
011C .dbline 65
011C 01E0 ldi R16,1
011E B1DF rcall _Set_SDI
0120 02C0 rjmp L43
0122 L42:
0122 .dbline 66
0122 ; else Set_SDI(0);//SDI=0;
0122 0027 clr R16
0124 AEDF rcall _Set_SDI
0126 L43:
0126 .dbline 67
0126 AA0C lsl R10
0128 .dbline 68
0128 01E0 ldi R16,1
012A B4DF rcall _Set_SCLK
012C .dbline 69
012C 0EE1 ldi R16,30
012E 79DF rcall _DelayNOP
0130 .dbline 69
0130 L39:
0130 .dbline 63
0130 4395 inc R20
0132 L41:
0132 .dbline 63
0132 4830 cpi R20,8
0134 78F3 brlo L38
0136 .dbline 70
0136 ; Address=Address<<1;//左移
0136 ; Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
0136 ; DelayNOP(30);}
0136 ; for(i=0;i<8;i++) //送地址;
0136 4427 clr R20
0138 0FC0 rjmp L47
013A L44:
013A .dbline 71
013A ; {Set_SCLK(0);//SCLK=0;//时钟恢复
013A .dbline 71
013A 0027 clr R16
013C ABDF rcall _Set_SCLK
013E .dbline 72
013E ; if(Data&0x80) Set_SDI(1);//SDI=1;//MSB first
013E 67FF sbrs R22,7
0140 03C0 rjmp L48
0142 .dbline 72
0142 01E0 ldi R16,1
0144 9EDF rcall _Set_SDI
0146 02C0 rjmp L49
0148 L48:
0148 .dbline 73
0148 ; else Set_SDI(0);//SDI=0;
0148 0027 clr R16
014A 9BDF rcall _Set_SDI
014C L49:
014C .dbline 74
014C 660F lsl R22
014E .dbline 75
014E 01E0 ldi R16,1
0150 A1DF rcall _Set_SCLK
0152 .dbline 76
0152 0EE1 ldi R16,30
0154 66DF rcall _DelayNOP
0156 .dbline 76
0156 L45:
0156 .dbline 70
0156 4395 inc R20
0158 L47:
0158 .dbline 70
0158 4830 cpi R20,8
015A 78F3 brlo L44
015C .dbline 77
015C ; Data=Data<<1;//左移
015C ; Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
015C ; DelayNOP(30);}
015C ; Set_CE(0);//CE=0;
015C 0027 clr R16
015E 88DF rcall _Set_CE
0160 .dbline -2
0160 .dbline 78
0160 ; }
0160 L37:
0160 00D0 rcall pop_gset3
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r i 20 c
0164 .dbsym r Data 22 c
0164 .dbsym r Address 10 c
0164 .dbend
0164 .dbfunc e SPI_Read1Byte _SPI_Read1Byte fc
0164 ; temp -> R20
0164 ; i -> R22
0164 ; Address -> R10
.even
0164 _SPI_Read1Byte::
0164 00D0 rcall push_gset3
0166 A02E mov R10,R16
0168 .dbline -1
0168 .dbline 81
0168 ;
0168 ; uchar SPI_Read1Byte(uchar Address)
0168 ; {uchar i,temp;
0168 .dbline 83
0168 ; //SDO=1;
0168 ; Set_SCLK(1);//SCLK=1;//CPOL=1
0168 01E0 ldi R16,1
016A 94DF rcall _Set_SCLK
016C .dbline 84
016C ; Set_CE(1);//CE=1;//Enable Chip_Select
016C 01E0 ldi R16,1
016E 80DF rcall _Set_CE
0170 .dbline 85
0170 ; for(i=0;i<8;i++) //送地址;
0170 6627 clr R22
0172 0FC0 rjmp L54
0174 L51:
0174 .dbline 86
0174 ; {Set_SCLK(0);//SCLK=0;//时钟恢复
0174 .dbline 86
0174 0027 clr R16
0176 8EDF rcall _Set_SCLK
0178 .dbline 87
0178 ; if(Address&0x80) Set_SDI(1);//SDI=1;//MSB first
0178 A7FE sbrs R10,7
017A 03C0 rjmp L55
017C .dbline 87
017C 01E0 ldi R16,1
017E 81DF rcall _Set_SDI
0180 02C0 rjmp L56
0182 L55:
0182 .dbline 88
0182 ; else Set_SDI(0);//SDI=0;
0182 0027 clr R16
0184 7EDF rcall _Set_SDI
0186 L56:
0186 .dbline 89
0186 AA0C lsl R10
0188 .dbline 90
0188 01E0 ldi R16,1
018A 84DF rcall _Set_SCLK
018C .dbline 91
018C 0EE1 ldi R16,30
018E 49DF rcall _DelayNOP
0190 .dbline 91
0190 L52:
0190 .dbline 85
0190 6395 inc R22
0192 L54:
0192 .dbline 85
0192 6830 cpi R22,8
0194 78F3 brlo L51
0196 .dbline 92
0196 ; Address=Address<<1;//左移
0196 ; Set_SCLK(1);//SCLK=1;//上升沿完成,锁存
0196 ; DelayNOP(30);}
0196 ; for(i=0;i<8;i++)
0196 6627 clr R22
0198 0DC0 rjmp L60
019A L57:
019A .dbline 93
019A ; {Set_SCLK(0);//SCLK=0;//提供一个下降沿接收一位数据
019A .dbline 93
019A 0027 clr R16
019C 7BDF rcall _Set_SCLK
019E .dbline 94
019E ; temp=temp<<1;
019E 440F lsl R20
01A0 .dbline 95
01A0 ; DelayNOP(30);
01A0 0EE1 ldi R16,30
01A2 3FDF rcall _DelayNOP
01A4 .dbline 96
01A4 ; if(PIND&0x40) temp=temp|0x01;
01A4 869B sbis 0x10,6
01A6 01C0 rjmp L61
01A8 .dbline 96
01A8 4160 ori R20,1
01AA L61:
01AA .dbline 98
01AA 01E0 ldi R16,1
01AC 73DF rcall _Set_SCLK
01AE .dbline 99
01AE 0EE1 ldi R16,30
01B0 38DF rcall _DelayNOP
01B2 .dbline 99
01B2 L58:
01B2 .dbline 92
01B2 6395 inc R22
01B4 L60:
01B4 .dbline 92
01B4 6830 cpi R22,8
01B6 88F3 brlo L57
01B8 .dbline 100
01B8 ; //if(SDO) temp=temp|0x01;//采样
01B8 ; Set_SCLK(1);//SCLK=1;//时钟恢复
01B8 ; DelayNOP(30);}
01B8 ; Set_CE(0);//CE=0;//Disbale Chip_Select
01B8 0027 clr R16
01BA 5ADF rcall _Set_CE
01BC .dbline 101
01BC ; return(temp);
01BC 042F mov R16,R20
01BE .dbline -2
01BE L50:
01BE 00D0 rcall pop_gset3
01C0 .dbline 0 ; func end
01C0 0895 ret
01C2 .dbsym r temp 20 c
01C2 .dbsym r i 22 c
01C2 .dbsym r Address 10 c
01C2 .dbend
01C2 .dbfunc e main _main fV
01C2 ; i -> <dead>
01C2 ; Temp -> y+2
01C2 ; Read_Temp -> y+0
.even
01C2 _main::
01C2 2697 sbiw R28,6
01C4 .dbline -1
01C4 .dbline 105
01C4 ; }
01C4 ;
01C4 ; void main(void)
01C4 ; {uchar Read_Temp[2];
01C4 .dbline 108
01C4 ; uchar Temp[4];
01C4 ; uchar i;
01C4 ; DDRA=0xff;
01C4 8FEF ldi R24,255
01C6 8ABB out 0x1a,R24
01C8 .dbline 109
01C8 ; DDRC=0xff;
01C8 84BB out 0x14,R24
01CA .dbline 110
01CA ; DDRD=0xbf;
01CA 8FEB ldi R24,191
01CC 81BB out 0x11,R24
01CE .dbline 111
01CE ; PORTA=0xff;
01CE 8FEF ldi R24,255
01D0 8BBB out 0x1b,R24
01D2 .dbline 112
01D2 ; PORTC=0x00;
01D2 2224 clr R2
01D4 25BA out 0x15,R2
01D6 .dbline 113
01D6 ; DelayMs(2500);
01D6 04EC ldi R16,2500
01D8 19E0 ldi R17,9
01DA 12DF rcall _DelayMs
01DC .dbline 114
01DC ; PORTC=0xff;
01DC 8FEF ldi R24,255
01DE 85BB out 0x15,R24
01E0 .dbline 115
01E0 ; SPI_Init();
01E0 62DF rcall _SPI_Init
01E2 .dbline 116
01E2 ; SPI_Write1Byte(0x80,0xf0);//1 1 1 1SHOT R2 R1 R0 SD,8bit sampling
01E2 20EF ldi R18,240
01E4 00E8 ldi R16,128
01E6 8BDF rcall _SPI_Write1Byte
01E8 12C0 rjmp L65
01EA L64:
01EA .dbline 119
01EA .dbline 119
01EA 01E0 ldi R16,1
01EC BBDF rcall _SPI_Read1Byte
01EE 0983 std y+1,R16
01F0 .dbline 120
01F0 02E0 ldi R16,2
01F2 B8DF rcall _SPI_Read1Byte
01F4 0883 std y+0,R16
01F6 .dbline 121
01F6 2C2F mov R18,R28
01F8 3D2F mov R19,R29
01FA 2E5F subi R18,254 ; offset = 2
01FC 3F4F sbci R19,255
01FE 0C2F mov R16,R28
0200 1D2F mov R17,R29
0202 55DF rcall _SPI_Process
0204 .dbline 123
0204 0C2F mov R16,R28
0206 1D2F mov R17,R29
0208 0E5F subi R16,254 ; offset = 2
020A 1F4F sbci R17,255
020C 10DF rcall _Display
020E .dbline 124
020E L65:
020E .dbline 118
020E EDCF rjmp L64
0210 X2:
0210 .dbline -2
0210 .dbline 125
0210 ; //1 1 1 1 0 0 0 0//SD=0 indicate continuous convertion
0210 ; while(1)
0210 ; {Read_Temp[1]=SPI_Read1Byte(0x01);//Low Byte
0210 ; Read_Temp[0]=SPI_Read1Byte(0x02);//Hign Byte
0210 ; SPI_Process(Read_Temp,Temp);
0210 ; //DelayMs(250);
0210 ; Display(Temp);
0210 ; }
0210 ; }
0210 L63:
0210 2696 adiw R28,6
0212 .dbline 0 ; func end
0212 0895 ret
0214 .dbsym l i 1 c
0214 .dbsym l Temp 2 A[4:4]c
0214 .dbsym l Read_Temp 0 A[2:2]c
0214 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -