📄 temperature.lst
字号:
93 2444 CLR R4
94 2455 CLR R5
95 1628 CP R2,R24
96 0639 CPC R3,R25
97 064A CPC R4,R26
98 065B CPC R5,R27
99 F394 BLT 0x008C
9A 5F4F SUBI R20,0xFF
9B 4F5F SBCI R21,0xFF
9C 1740 CP R20,R16
9D 0751 CPC R21,R17
9E F350 BCS 0x0089
9F C8E1 RJMP pop_xgsetF000
_ms:
i --> R20
j --> R22
n --> R16
A0 D8DB RCALL push_xgsetF000
(0269) }
(0270)
(0271) void ms(WORD n)
(0272) { //延时n毫秒
(0273) WORD i,j;
(0274)
(0275) for(i=0; i<n; i++)
A1 2744 CLR R20
A2 2755 CLR R21
A3 C013 RJMP 0x00B7
(0276) for(j=0; j<MS_COUNT;j++);
A4 2766 CLR R22
A5 2777 CLR R23
A6 C002 RJMP 0x00A9
A7 5F6F SUBI R22,0xFF
A8 4F7F SBCI R23,0xFF
A9 EB81 LDI R24,0xB1
AA E091 LDI R25,1
AB E0A0 LDI R26,0
AC E0B0 LDI R27,0
AD 011B MOVW R2,R22
AE 2444 CLR R4
AF 2455 CLR R5
B0 1628 CP R2,R24
B1 0639 CPC R3,R25
B2 064A CPC R4,R26
B3 065B CPC R5,R27
B4 F394 BLT 0x00A7
B5 5F4F SUBI R20,0xFF
B6 4F5F SBCI R21,0xFF
B7 1740 CP R20,R16
B8 0751 CPC R21,R17
B9 F350 BCS 0x00A4
BA C8C6 RJMP pop_xgsetF000
_us:
i --> R20
j --> R22
n --> R16
BB D8C0 RCALL push_xgsetF000
(0277) }
(0278)
(0279) void us(WORD n)
(0280) { //延时n毫秒
(0281) WORD i,j;
(0282)
(0283) for(i=0; i<n; i++)
BC 2744 CLR R20
BD 2755 CLR R21
BE C013 RJMP 0x00D2
(0284) for(j=0; j<MS_COUNT/1000;j++);
BF 2766 CLR R22
C0 2777 CLR R23
C1 C002 RJMP 0x00C4
C2 5F6F SUBI R22,0xFF
C3 4F7F SBCI R23,0xFF
C4 E080 LDI R24,0
C5 E090 LDI R25,0
C6 E0A0 LDI R26,0
C7 E0B0 LDI R27,0
C8 011B MOVW R2,R22
C9 2444 CLR R4
CA 2455 CLR R5
CB 1628 CP R2,R24
CC 0639 CPC R3,R25
CD 064A CPC R4,R26
CE 065B CPC R5,R27
CF F394 BLT 0x00C2
D0 5F4F SUBI R20,0xFF
D1 4F5F SBCI R21,0xFF
D2 1740 CP R20,R16
D3 0751 CPC R21,R17
D4 F350 BCS 0x00BF
D5 C8AB RJMP pop_xgsetF000
_delay_s:
i --> R20
n --> R10
D6 D89B RCALL push_xgset300C
D7 0158 MOVW R10,R16
(0285) }
(0286)
(0287) /////////////////////////////////////////////////////////////
(0288) void delay_s(WORD n)
(0289) {
(0290) WORD i;
(0291) for ( i=0; i<10*n; i++ ) ms(100);
D8 2744 CLR R20
D9 2755 CLR R21
DA C005 RJMP 0x00E0
DB E604 LDI R16,0x64
DC E010 LDI R17,0
DD DFC2 RCALL _ms
DE 5F4F SUBI R20,0xFF
DF 4F5F SBCI R21,0xFF
E0 E00A LDI R16,0xA
E1 E010 LDI R17,0
E2 0195 MOVW R18,R10
E3 D87E RCALL empy16s
E4 1740 CP R20,R16
E5 0751 CPC R21,R17
E6 F3A0 BCS 0x00DB
E7 C88F RJMP pop_xgset300C
(0292) }
(0293)
(0294) /////////////////////////////////////////////////////////////
(0295) //UART口
(0296) void uart_init(void)
(0297) {
(0298) UCSRB = 0x00; //设置波特率时关闭发送和接收
_uart_init:
E8 2422 CLR R2
E9 B82A OUT 0x0A,R2
(0299) UCSRA = 0x00;
EA B82B OUT 0x0B,R2
(0300) UCSRC = (1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位STOP位
EB E086 LDI R24,6
EC BD80 OUT 0x20,R24
(0301) UBRRL=(fosc/16/baud-1)%256;
ED E083 LDI R24,3
EE B989 OUT 0x09,R24
(0302) UBRRH=(fosc/16/baud-1)/256; //设置波特率
EF BC20 OUT 0x20,R2
(0303) UCSRB =(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //允许发送和接收
F0 E988 LDI R24,0x98
F1 B98A OUT 0x0A,R24
F2 9508 RET
(0304) }
(0305)
(0306) /////////////////////////////////////////////////////////////
(0307) //URAT口
(0308) BYTE uart_RxChar(void)
(0309) {
(0310) while(!(UCSRA& (1<<RXC)));//判断是否接收到数据
_uart_RxChar:
F3 9B5F SBIS 0x0B,7
F4 CFFE RJMP _uart_RxChar
(0311) return UDR; //接收数据
F5 B10C IN R16,0x0C
F6 9508 RET
(0312) }
(0313)
(0314) /////////////////////////////////////////////////////////////
(0315) void uart_TxChar(BYTE c)
(0316) {
(0317) while (!(UCSRA&(1<<UDRE)));//判断上次发送是否完成
_uart_TxChar:
c --> R16
F7 9B5D SBIS 0x0B,5
F8 CFFE RJMP _uart_TxChar
(0318) UDR=c; //发送数据
F9 B90C OUT 0x0C,R16
FA 9508 RET
_put_bytes:
i --> R20
len --> R10
buf --> R12
FB D898 RCALL push_xgset303C
FC 0159 MOVW R10,R18
FD 0168 MOVW R12,R16
(0319) }
(0320)
(0321) /////////////////////////////////////////////////////////////////////////////////
(0322) void put_bytes(BYTE *buf,int len)
(0323) {
(0324) int i;
(0325) for ( i=0; i<len; i++ ) uart_TxChar(buf[i]);
FE 2744 CLR R20
FF 2755 CLR R21
100 C007 RJMP 0x0108
101 01FA MOVW R30,R20
102 0DEC ADD R30,R12
103 1DFD ADC R31,R13
104 8100 LDD R16,Z+0
105 DFF1 RCALL _uart_TxChar
106 5F4F SUBI R20,0xFF
107 4F5F SBCI R21,0xFF
108 154A CP R20,R10
109 055B CPC R21,R11
10A F3B4 BLT 0x0101
10B C88F RJMP pop_xgset303C
(0326) }
(0327)
(0328) /////////////////////////////////////////////////////////////////////////////////
(0329) //ADC初始化
(0330) void adc_init(void)
(0331) {
(0332) ADCSRA = 0x00;
_adc_init:
10C 2422 CLR R2
10D B826 OUT 0x06,R2
(0333)
(0334) ADMUX =(1<<REFS0)|(adc_mux&0x0F);
10E 9180 013F LDS R24,adc_mux
110 9190 0140 LDS R25,adc_mux+1
112 708F ANDI R24,0xF
113 7090 ANDI R25,0
114 6480 ORI R24,0x40
115 B987 OUT 0x07,R24
(0335)
(0336) ACSR =(1<<ACD);//关闭模拟比较器
116 E880 LDI R24,0x80
117 B988 OUT 0x08,R24
(0337)
(0338) ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ;//128分频
118 EC87 LDI R24,0xC7
119 B986 OUT 0x06,R24
(0339)
(0340) us(2);
11A E002 LDI R16,2
11B E010 LDI R17,0
11C DF9E RCALL _us
(0341)
(0342) ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ;//128分频
11D EC8F LDI R24,0xCF
11E B986 OUT 0x06,R24
11F 9508 RET
_AlarmPro:
j --> Y,+1
temp --> R10
i --> R20
120 D851 RCALL push_xgset300C
(0343)
(0344) }
(0345)
(0346) void AlarmPro(void)
(0347) {
(0348) BYTE i,j;
(0349) WORD temp;
(0350)
(0351) for(i=0;i<num;i++){
121 2744 CLR R20
122 C08B RJMP 0x01AE
(0352)
(0353) if(i == 4) i=i+2;
123 3044 CPI R20,4
124 F409 BNE 0x0126
125 5F4E SUBI R20,0xFE
(0354) temp = data[i]+(data[i+1]<<8);
126 E186 LDI R24,0x16
127 E091 LDI R25,1
128 2FE4 MOV R30,R20
129 27FF CLR R31
12A 0FE8 ADD R30,R24
12B 1FF9 ADC R31,R25
12C 8020 LDD R2,Z+0
12D 2433 CLR R3
12E 2C32 MOV R3,R2
12F 2422 CLR R2
130 E185 LDI R24,0x15
131 E091 LDI R25,1
132 2FE4 MOV R30,R20
133 27FF CLR R31
134 0FE8 ADD R30,R24
135 1FF9 ADC R31,R25
136 80A0 LDD R10,Z+0
137 24BB CLR R11
138 0CA2 ADD R10,R2
139 1CB3 ADC R11,R3
(0355)
(0356) alarmno = i;
13A 9340 00E2 STS alarmno,R20
(0357)
(0358) if(temp < limit[i][2]) {
13C E086 LDI R24,6
13D 9F84 MUL R24,R20
13E 01F0 MOVW R30,R0
13F EE87 LDI R24,0xE7
140 E090 LDI R25,0
141 0FE8 ADD R30,R24
142 1FF9 ADC R31,R25
143 8020 LDD R2,Z+0
144 8031 LDD R3,Z+1
145 14A2 CP R10,R2
146 04B3 CPC R11,R3
147 F448 BCC 0x0151
(0359)
(0360) alarm_flag[i] = 3;
148 EA88 LDI R24,0xA8
149 E090 LDI R25,0
14A 2FE4 MOV R30,R20
14B 27FF CLR R31
14C 0FE8 ADD R30,R24
14D 1FF9 ADC R31,R25
14E E083 LDI R24,3
14F 8380 STD Z+0,R24
(0361) }
150 C032 RJMP 0x0183
(0362) else {
(0363) if(temp < limit[i][1]) {
151 E086 LDI R24,6
152 9F84 MUL R24,R20
153 01F0 MOVW R30,R0
154 EE85 LDI R24,0xE5
155 E090 LDI R25,0
156 0FE8 ADD R30,R24
157 1FF9 ADC R31,R25
158 8020 LDD R2,Z+0
159 8031 LDD R3,Z+1
15A 14A2 CP R10,R2
15B 04B3 CPC R11,R3
15C F448 BCC 0x0166
(0364)
(0365) alarm_flag[i] = 2;
15D EA88 LDI R24,0xA8
15E E090 LDI R25,0
15F 2FE4 MOV R30,R20
160 27FF CLR R31
161 0FE8 ADD R30,R24
162 1FF9 ADC R31,R25
163 E082 LDI R24,2
164 8380 STD Z+0,R24
(0366) }
165 C01D RJMP 0x0183
(0367) else {
(0368) if(temp < limit[i][0]) {
166 E086 LDI R24,6
167 9F84 MUL R24,R20
168 01F0 MOVW R30,R0
169 EE83 LDI R24,0xE3
16A E090 LDI R25,0
16B 0FE8 ADD R30,R24
16C 1FF9 ADC R31,R25
16D 8020 LDD R2,Z+0
16E 8031 LDD R3,Z+1
16F 14A2 CP R10,R2
170 04B3 CPC R11,R3
171 F448 BCC 0x017B
(0369)
(0370) alarm_flag[i] = 1;
172 EA88 LDI R24,0xA8
173 E090 LDI R25,0
174 2FE4 MOV R30,R20
175 27FF CLR R31
176 0FE8 ADD R30,R24
177 1FF9 ADC R31,R25
178 E081 LDI R24,1
179 8380 STD Z+0,R24
(0371) }
17A C008 RJMP 0x0183
(0372) else{
(0373) alarm_flag[i] = 0;
17B EA88 LDI R24,0xA8
17C E090 LDI R25,0
17D 2FE4 MOV R30,R20
17E 27FF CLR R31
17F 0FE8 ADD R30,R24
180 1FF9 ADC R31,R25
181 2422 CLR R2
182 8220 STD Z+0,R2
(0374) }
(0375) }
(0376) }
(0377)
(0378) if(alarm_flag[i] != Alarm_flag_prev[i]) {
183 EB80 LDI R24,0xB0
184 E090 LDI R25,0
185 2FE4 MOV R30,R20
186 27FF CLR R31
187 0FEE LSL R30
188 1FFF ROL R31
189 0FE8 ADD R30,R24
18A 1FF9 ADC R31,R25
18B 8020 LDD R2,Z+0
18C 8031 LDD R3,Z+1
18D EA88 LDI R24,0xA8
18E E090 LDI R25,0
18F 2FE4 MOV R30,R20
190 27FF CLR R31
191 0FE8 ADD R30,R24
192 1FF9 ADC R31,R25
193 8040 LDD R4,Z+0
194 2455 CLR R5
195 1442 CP R4,R2
196 0453 CPC R5,R3
197 F0A9 BEQ 0x01AD
(0379) SendGram(CMD_RETDATA);
198 E001 LDI R16,1
199 D4A9 RCALL _SendGram
(0380) Alarm_flag_prev[i] = alarm_flag[i];
19A EA88 LDI R24,0xA8
19B E090 LDI R25,0
19C 2FE4 MOV R30,R20
19D 27FF CLR R31
19E 0FE8 ADD R30,R24
19F 1FF9 ADC R31,R25
1A0 8020 LDD R2,Z+0
1A1 2433 CLR R3
1A2 EB80 LDI R24,0xB0
1A3 E090 LDI R25,0
1A4 2FE4 MOV R30,R20
1A5 27FF CLR R31
1A6 0FEE LSL R30
1A7 1FFF ROL R31
1A8 0FE8 ADD R30,R24
1A9 1FF9 ADC R31,R25
1AA 8231 STD Z+1,R3
1AB 8220 STD Z+0,R2
(0381) return ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -