📄 measure.s
字号:
andi R20,2
.dbline 161
; error=merror;
mov R10,R20
.dbline 162
; PORTF |=0x04;//SCK=1;
lds R24,98
ori R24,4
sts 98,R24
.dbline 163
; _NOP();_NOP();_NOP(); //check ack (DATA will be pulled down by SHT11)
nop
.dbline 163
nop
.dbline 163
nop
.dbline 164
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 165
; DATA_TO_1();
lds R24,98
ori R24,2
sts 98,R24
.dbline 166
; if(error >0)
ldi R24,0
cp R24,R20
brsh L20
X8:
.dbline 167
; PORTA |=0x04;
sbi 0x1b,2
L20:
.dbline 168
; return error; //error=1 in case of no acknowledge
mov R16,R10
.dbline -2
L3:
xcall pop_xgset5
.dbline 0 ; func end
ret
.dbsym r merror 20 c
.dbsym r error 10 c
.dbsym r i 22 c
.dbsym r value 16 c
.dbend
.dbfunc e s_read_byte _s_read_byte fc
; val -> R10
; i -> R20
; ack -> R16
.even
_s_read_byte::
xcall push_xgsetx
.dbline -1
.dbline 173
; }
; char s_read_byte(unsigned char ack)
; //----------------------------------------------------------------------------------
; // reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
; {
.dbline 174
; unsigned char i,val=0;
clr R10
.dbline 177
; //DDRF |=0x04;
; //DDRF &=0xfd;
; PORTF |=0x02;//DATA=1;
lds R24,98
ori R24,2
sts 98,R24
.dbline 178
; _NOP();_NOP();_NOP();
nop
.dbline 178
nop
.dbline 178
nop
.dbline 181
; //release DATA-line
; //for (i=0x80;i>0;i/=2)
; i=0x80; //shift bit for masking
ldi R20,128
.dbline 182
; { PORTF |=0x04;//SCK=1;
.dbline 182
lds R24,98
ori R24,4
sts 98,R24
.dbline 183
; _NOP(); //clk for SENSI-BUS
nop
.dbline 184
in R24,0x0
andi R24,2
breq L23
X9:
.dbline 184
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L23:
.dbline 185
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 186
; _NOP();
nop
.dbline 187
; }
.dbline 188
; i=0x40;
ldi R20,64
.dbline 189
; { PORTF |=0x04;//SCK=1;
.dbline 189
lds R24,98
ori R24,4
sts 98,R24
.dbline 190
; _NOP(); //clk for SENSI-BUS
nop
.dbline 191
in R24,0x0
andi R24,2
breq L25
X10:
.dbline 191
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L25:
.dbline 192
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 193
; _NOP();
nop
.dbline 194
; }
.dbline 195
; i=0x20;
ldi R20,32
.dbline 196
; { PORTF |=0x04;//SCK=1;
.dbline 196
lds R24,98
ori R24,4
sts 98,R24
.dbline 197
; _NOP(); //clk for SENSI-BUS
nop
.dbline 198
in R24,0x0
andi R24,2
breq L27
X11:
.dbline 198
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L27:
.dbline 199
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 200
; _NOP();
nop
.dbline 201
; }
.dbline 202
; i=0x10;
ldi R20,16
.dbline 203
; { PORTF |=0x04;//SCK=1;
.dbline 203
lds R24,98
ori R24,4
sts 98,R24
.dbline 204
; _NOP(); //clk for SENSI-BUS
nop
.dbline 205
in R24,0x0
andi R24,2
breq L29
X12:
.dbline 205
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L29:
.dbline 206
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 207
; _NOP();
nop
.dbline 208
; }
.dbline 209
; i=0x08;
ldi R20,8
.dbline 210
; { PORTF |=0x04;//SCK=1;
.dbline 210
lds R24,98
ori R24,4
sts 98,R24
.dbline 211
; _NOP(); //clk for SENSI-BUS
nop
.dbline 212
in R24,0x0
andi R24,2
breq L31
X13:
.dbline 212
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L31:
.dbline 213
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 214
; _NOP();
nop
.dbline 215
; }
.dbline 216
; i=0x04;
ldi R20,4
.dbline 217
; { PORTF |=0x04;//SCK=1;
.dbline 217
lds R24,98
ori R24,4
sts 98,R24
.dbline 218
; _NOP(); //clk for SENSI-BUS
nop
.dbline 219
in R24,0x0
andi R24,2
breq L33
X14:
.dbline 219
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L33:
.dbline 220
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 221
; _NOP();
nop
.dbline 222
; }
.dbline 223
; i=0x02;
ldi R20,2
.dbline 224
; { PORTF |=0x04;//SCK=1;
.dbline 224
lds R24,98
ori R24,4
sts 98,R24
.dbline 225
; _NOP(); //clk for SENSI-BUS
nop
.dbline 226
in R24,0x0
andi R24,2
breq L35
X15:
.dbline 226
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L35:
.dbline 227
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 228
; _NOP();
nop
.dbline 229
; }
.dbline 230
; i=0x01;
ldi R20,1
.dbline 231
; { PORTF |=0x04;//SCK=1;
.dbline 231
lds R24,98
ori R24,4
sts 98,R24
.dbline 232
; _NOP(); //clk for SENSI-BUS
nop
.dbline 233
in R24,0x0
andi R24,2
breq L37
X16:
.dbline 233
; if (PINF&0x02) val=(val | i); //read bit
or R10,R20
L37:
.dbline 234
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 235
; _NOP();
nop
.dbline 236
; }
.dbline 237
; DDRF |=0x02;
lds R24,97
ori R24,2
sts 97,R24
.dbline 238
; if(ack==0)
tst R16
brne L39
X17:
.dbline 239
; {PORTF |=0x02;
.dbline 239
lds R24,98
ori R24,2
sts 98,R24
.dbline 240
; _NOP();
nop
.dbline 241
; }
xjmp L40
L39:
.dbline 243
; else
; {PORTF &=0xfd;
.dbline 243
lds R24,98
andi R24,253
sts 98,R24
.dbline 244
; _NOP();
nop
.dbline 245
; }
L40:
.dbline 247
; //DATA=!ack; //in case of "ack==1" pull down DATA-Line
; PORTF |=0x04;//SCK=1; //clk #9 for ack
lds R24,98
ori R24,4
sts 98,R24
.dbline 248
; _NOP();_NOP();_NOP();
nop
.dbline 248
nop
.dbline 248
nop
.dbline 250
; //pulswith approx. 5 us
; PORTF &=0xfb;//SCK=0;
lds R24,98
andi R24,251
sts 98,R24
.dbline 251
; _NOP();_NOP();_NOP();
nop
.dbline 251
nop
.dbline 251
nop
.dbline 253
;
; PORTF |=0x02;//DATA=1;
lds R24,98
ori R24,2
sts 98,R24
.dbline 254
; DDRF &=0xfd;
lds R24,97
andi R24,253
sts 97,R24
.dbline 255
; _NOP(); //release DATA-line
nop
.dbline 256
; return val;
mov R16,R10
.dbline -2
L22:
xcall pop_xgsetx
.dbline 0 ; func end
ret
.dbsym r val 10 c
.dbsym r i 20 c
.dbsym r ack 16 c
.dbend
.dbfunc e s_transstart _s_transstart fV
.even
_s_transstart::
.dbline -1
.dbline 266
; }
;
; void s_transstart(void)
; //----------------------------------------------------------------------------------
; // generates a transmission start
; // _____ ________
; // DATA: |_______|
; // ___ ___
; // SCK : ___| |___| |______
; {
.dbline 267
; DATA_TO_1();
lds R24,98
ori R24,2
sts 98,R24
.dbline 268
; _NOP();
nop
.dbline 269
; SCK_TO_0(); //Initial state
lds R24,98
andi R24,251
sts 98,R24
.dbline 270
; _NOP();
nop
.dbline 271
; SCK_TO_1();
lds R24,98
ori R24,4
sts 98,R24
.dbline 272
; _NOP();
nop
.dbline 273
; DATA_TO_0();
lds R24,98
andi R24,253
sts 98,R24
.dbline 274
; _NOP();
nop
.dbline 275
; SCK_TO_0();
lds R24,98
andi R24,251
sts 98,R24
.dbline 277
; //delay_us(5); //pulswith approx. 5 us
; _NOP();
nop
.dbline 278
; _NOP();
nop
.dbline 279
; _NOP();
nop
.dbline 280
; _NOP();
nop
.dbline 281
; _NOP();
nop
.dbline 282
; SCK_TO_1();
lds R24,98
ori R24,4
sts 98,R24
.dbline 283
; _NOP();
nop
.dbline 284
; DATA_TO_1();
lds R24,98
ori R24,2
sts 98,R24
.dbline 285
; _NOP();
nop
.dbline 286
; SCK_TO_0();
lds R24,98
andi R24,251
sts 98,R24
.dbline 287
; _NOP();
nop
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.dbfunc e s_connectionreset _s_connectionreset fV
; i -> R20
.even
_s_connectionreset::
st -y,R20
st -y,R21
.dbline -1
.dbline 298
; }
;
;
; void s_connectionreset(void)
; //----------------------------------------------------------------------------------
; // communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
; // _____________________________________________________ ________
; // DATA: |_______|
; // _ _ _ _ _ _ _ _ _ ___ ___
; // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______
; {
.dbline 300
; unsigned char i;
; DATA_TO_1();
lds R24,98
ori R24,2
sts 98,R24
.dbline 301
; _NOP();
nop
.dbline 302
; SCK_TO_0(); //Initial state
lds R24,98
andi R24,251
sts 98,R24
.dbline 303
; _NOP();
nop
.dbline 304
; for(i=0;i<9;i++) //9 SCK cycles
clr R20
xjmp L46
L43:
.dbline 305
.dbline 305
lds R24,98
ori R24,4
sts 98,R24
.dbline 306
nop
.dbline 307
lds R24,98
andi R24,251
sts 98,R24
.dbline 308
nop
.dbline 309
L44:
.dbline 304
inc R20
L46:
.dbline 304
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -