📄 shiyan.lst
字号:
(0089) {
(0090) unsigned char i,byte,temp;
(0091) byte=0x00;
ED 2744 CLR R20
(0092) for (i=0;i<8;i++)
EE 2766 CLR R22
EF C01F RJMP 0x010F
(0093) {
(0094) DDRA|=0x01;
F0 9AD0 SBI 0x1A,0
(0095) PORTA&=0xfe;//给脉冲信号
F1 B38B IN R24,0x1B
F2 7F8E ANDI R24,0xFE
F3 BB8B OUT 0x1B,R24
(0096) delay_18B20(3);
F4 E003 LDI R16,3
F5 E010 LDI R17,0
F6 DFD5 RCALL _delay_18B20
(0097) PORTA|=0x01;
F7 9AD8 SBI 0x1B,0
(0098) DDRA&=0xfe;
F8 B38A IN R24,0x1A
F9 7F8E ANDI R24,0xFE
FA BB8A OUT 0x1A,R24
(0099) delay_18B20(10);
FB E00A LDI R16,0xA
FC E010 LDI R17,0
FD DFCE RCALL _delay_18B20
(0100) temp=(PINA&0x01);
FE B389 IN R24,0x19
FF 7081 ANDI R24,1
100 2EA8 MOV R10,R24
(0101) if(temp!=0x00)
101 2388 TST R24
102 F009 BEQ 0x0104
(0102) byte|=0x80;
103 6840 ORI R20,0x80
(0103) if(i<7)
104 3067 CPI R22,7
105 F408 BCC 0x0107
(0104) byte=byte>>1;
106 9546 LSR R20
(0105) delay_18B20(100);
107 E604 LDI R16,0x64
108 E010 LDI R17,0
109 DFC2 RCALL _delay_18B20
(0106) DDRA|=0x01;
10A 9AD0 SBI 0x1A,0
(0107) delay_18B20(5);
10B E005 LDI R16,5
10C E010 LDI R17,0
10D DFBE RCALL _delay_18B20
10E 9563 INC R22
10F 3068 CPI R22,0x8
110 F2F8 BCS 0x00F0
(0108) }
(0109) return byte;
111 2F04 MOV R16,R20
112 940C 01AA JMP pop_xgsetF00C
_ds1820wr:
i --> R22
j --> R10
wdata --> R20
114 940E 01A3 CALL push_xgsetF00C
116 2F40 MOV R20,R16
(0110) }
(0111)
(0112) void ds1820wr(uchar wdata)/*写数据*/
(0113) {
(0114) unsigned char i,j;
(0115) DDRA|=0x01;
117 9AD0 SBI 0x1A,0
(0116) for (j=0;j<=7;j++)
118 24AA CLR R10
119 C01B RJMP 0x0135
(0117) {
(0118) i=wdata&0x01;
11A 2F64 MOV R22,R20
11B 7061 ANDI R22,1
(0119) if(i==0x01)
11C 3061 CPI R22,1
11D F459 BNE 0x0129
(0120) {
(0121) PORTA&=0xfe;
11E B38B IN R24,0x1B
11F 7F8E ANDI R24,0xFE
120 BB8B OUT 0x1B,R24
(0122) delay_18B20(10);
121 E00A LDI R16,0xA
122 E010 LDI R17,0
123 DFA8 RCALL _delay_18B20
(0123) PORTA|=0x01;
124 9AD8 SBI 0x1B,0
(0124) delay_18B20(100);
125 E604 LDI R16,0x64
126 E010 LDI R17,0
127 DFA4 RCALL _delay_18B20
(0125) }
128 C00A RJMP 0x0133
(0126) else
(0127) {
(0128) PORTA&=0xfe;
129 B38B IN R24,0x1B
12A 7F8E ANDI R24,0xFE
12B BB8B OUT 0x1B,R24
(0129) delay_18B20(100);
12C E604 LDI R16,0x64
12D E010 LDI R17,0
12E DF9D RCALL _delay_18B20
(0130) PORTA|=0x01;
12F 9AD8 SBI 0x1B,0
(0131) delay_18B20(10);
130 E00A LDI R16,0xA
131 E010 LDI R17,0
132 DF99 RCALL _delay_18B20
(0132) }
(0133) wdata=wdata>>1;
133 9546 LSR R20
134 94A3 INC R10
135 E087 LDI R24,7
136 158A CP R24,R10
137 F710 BCC 0x011A
138 940C 01AA JMP pop_xgsetF00C
_asc2con:
i --> R10
temp --> R20
len --> R12
q --> R14
13A 940E 019A CALL push_xgset30FC
13C 2EC2 MOV R12,R18
13D 0178 MOVW R14,R16
(0134) }
(0135) }
(0136) /************将十六进制转换成ASCII码,并送LCD显示****************/
(0137) void asc2con(unsigned char *q,unsigned char len)
(0138) {
(0139) unsigned char temp,i;
(0140) wr_com(0xc0);
13E EC00 LDI R16,0xC0
13F DF30 RCALL _wr_com
(0141) for(i=0;i<len;i++)
140 24AA CLR R10
141 C02B RJMP 0x016D
(0142) {
(0143) temp=q[len-1-i]&0xf0;
142 2C2A MOV R2,R10
143 2433 CLR R3
144 2DEC MOV R30,R12
145 27FF CLR R31
146 9731 SBIW R30,1
147 19E2 SUB R30,R2
148 09F3 SBC R31,R3
149 0DEE ADD R30,R14
14A 1DFF ADC R31,R15
14B 8140 LDD R20,Z+0
14C 7F40 ANDI R20,0xF0
(0144) temp=temp>>4;
14D 2F84 MOV R24,R20
14E 9582 SWAP R24
14F 708F ANDI R24,0xF
150 2F48 MOV R20,R24
(0145) wr_dat(dispcode[temp]);
151 E680 LDI R24,0x60
152 E090 LDI R25,0
153 2FE4 MOV R30,R20
154 27FF CLR R31
155 0FE8 ADD R30,R24
156 1FF9 ADC R31,R25
157 8100 LDD R16,Z+0
158 DF2A RCALL _wr_dat
(0146) temp=q[len-1-i]&0x0f;
159 2C2A MOV R2,R10
15A 2433 CLR R3
15B 2DEC MOV R30,R12
15C 27FF CLR R31
15D 9731 SBIW R30,1
15E 19E2 SUB R30,R2
15F 09F3 SBC R31,R3
160 0DEE ADD R30,R14
161 1DFF ADC R31,R15
162 8140 LDD R20,Z+0
163 704F ANDI R20,0xF
(0147) wr_dat(dispcode[temp]);
164 E680 LDI R24,0x60
165 E090 LDI R25,0
166 2FE4 MOV R30,R20
167 27FF CLR R31
168 0FE8 ADD R30,R24
169 1FF9 ADC R31,R25
16A 8100 LDD R16,Z+0
16B DF17 RCALL _wr_dat
16C 94A3 INC R10
16D 14AC CP R10,R12
16E F408 BCC 0x0170
16F CFD2 RJMP 0x0142
170 940C 018F JMP pop_xgset30FC
_main:
a --> Y,+0
i --> R20
172 9728 SBIW R28,0x8
(0148) }
(0149) }
(0150) /********************主程序***********************************/
(0151) void main()
(0152) {
(0153) unsigned char a[8],i;
(0154) lcd_init();
173 DF22 RCALL _lcd_init
(0155) display(str1);
174 E701 LDI R16,0x71
175 E010 LDI R17,0
176 DF42 RCALL _display
(0156) ds1820rst();
177 DF5C RCALL _ds1820rst
(0157) delay1ms(1);
178 E001 LDI R16,1
179 E010 LDI R17,0
17A DEE1 RCALL _delay1ms
(0158) ds1820wr(0x33);
17B E303 LDI R16,0x33
17C DF97 RCALL _ds1820wr
(0159) for(i=0;i<8;i++)
17D 2744 CLR R20
17E C008 RJMP 0x0187
(0160) {
(0161) a[i]=ds1820rd();
17F DF6B RCALL _ds1820rd
180 01CE MOVW R24,R28
181 2FE4 MOV R30,R20
182 27FF CLR R31
183 0FE8 ADD R30,R24
184 1FF9 ADC R31,R25
185 8300 STD Z+0,R16
186 9543 INC R20
187 3048 CPI R20,0x8
188 F3B0 BCS 0x017F
(0162) }
(0163) asc2con(a,8);
189 E028 LDI R18,0x8
18A 018E MOVW R16,R28
18B DFAE RCALL _asc2con
(0164) while(1);
FILE: <library>
18C CFFF RJMP 0x018C
18D 9628 ADIW R28,0x8
18E 9508 RET
pop_xgset30FC:
18F 90A9 LD R10,Y+
190 90B9 LD R11,Y+
191 90C9 LD R12,Y+
192 90D9 LD R13,Y+
193 90E9 LD R14,Y+
194 90F9 LD R15,Y+
195 9149 LD R20,Y+
196 9159 LD R21,Y+
197 9508 RET
push_xgsetF0FC:
198 937A ST R23,-Y
199 936A ST R22,-Y
push_xgset30FC:
19A 935A ST R21,-Y
19B 934A ST R20,-Y
push_xgset00FC:
19C 92FA ST R15,-Y
19D 92EA ST R14,-Y
push_xgset003C:
19E 92DA ST R13,-Y
19F 92CA ST R12,-Y
1A0 92BA ST R11,-Y
1A1 92AA ST R10,-Y
1A2 9508 RET
push_xgsetF00C:
1A3 937A ST R23,-Y
1A4 936A ST R22,-Y
1A5 935A ST R21,-Y
1A6 934A ST R20,-Y
1A7 92BA ST R11,-Y
1A8 92AA ST R10,-Y
1A9 9508 RET
pop_xgsetF00C:
1AA 90A9 LD R10,Y+
1AB 90B9 LD R11,Y+
1AC 9149 LD R20,Y+
1AD 9159 LD R21,Y+
1AE 9169 LD R22,Y+
1AF 9179 LD R23,Y+
1B0 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -