📄 cs5532.s
字号:
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R30,R28
std z+4,R16
std z+5,R17
std z+6,R18
std z+7,R19
.dbline 153
; c |= RxdTxd4b[2];
ldd R2,y+2
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
or R6,R2
or R7,R3
or R8,R4
or R9,R5
movw R30,R28
std z+4,R6
std z+5,R7
std z+6,R8
std z+7,R9
.dbline 154
; c<<=8;
ldi R24,8
ldi R25,0
movw R30,R28
ldd R2,z+4
ldd R3,z+5
ldd R4,z+6
ldd R5,z+7
st -y,R24
movw R16,R2
movw R18,R4
xcall lsl32
movw R30,R28
std z+4,R16
std z+5,R17
std z+6,R18
std z+7,R19
.dbline 155
; c |= RxdTxd4b[3];
ldd R2,y+3
clr R3
clr R4
clr R5
movw R30,R28
ldd R6,z+4
ldd R7,z+5
ldd R8,z+6
ldd R9,z+7
or R6,R2
or R7,R3
or R8,R4
or R9,R5
movw R30,R28
std z+4,R6
std z+5,R7
std z+6,R8
std z+7,R9
.dbline 157
; // c=c>>8;//去掉最低位
; return(c);
movw R30,R28
ldd R16,z+4
ldd R17,z+5
ldd R18,z+6
ldd R19,z+7
.dbline -2
L43:
adiw R28,8
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym l c 4 l
.dbsym l RxdTxd4b 0 A[4:4]c
.dbsym r i 12 c
.dbsym r j 10 c
.dbend
.dbfunc e CS5532_init _CS5532_init fV
; i -> R20
.even
_CS5532_init::
xcall push_gset1
.dbline -1
.dbline 161
; }
;
; void CS5532_init(void)
; {
.dbline 165
;
; //串口初始化
; unsigned char i;
; SET_CS;
sbi 0xe,3
.dbline 166
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 167
; CLR_CS; //片选使能
in R24,0xe
andi R24,247
out 0xe,R24
.dbline 168
; delay_loop(2);
ldi R16,2
ldi R17,0
xcall _delay_loop
.dbline 169
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline 170
; SET_SDO;
sbi 0xe,5
.dbline 171
; CLR_SCK;
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 172
; for(i=0;i<15;i++)
clr R20
xjmp L61
L58:
.dbline 173
.dbline 174
ldi R16,255
xcall _CS5532_Txd
.dbline 175
L59:
.dbline 172
inc R20
L61:
.dbline 172
cpi R20,15
brlo L58
.dbline 176
; {
; CS5532_Txd(0xFF);//发送命令
; }
; CS5532_Txd(0xFE);
ldi R16,254
xcall _CS5532_Txd
.dbline 178
; //配置寄存器
; CS5532_Txd(0x43);
ldi R16,67
xcall _CS5532_Txd
.dbline 180
;
; CS5532_Txd(0x02);
ldi R16,2
xcall _CS5532_Txd
.dbline 181
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 182
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 183
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 185
;
; CS5532_Txd(0x02);
ldi R16,2
xcall _CS5532_Txd
.dbline 186
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 187
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 188
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 190
;
; CS5532_Txd(0x02);
ldi R16,2
xcall _CS5532_Txd
.dbline 191
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 192
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 193
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 195
;
; CS5532_Txd(0x02);
ldi R16,2
xcall _CS5532_Txd
.dbline 196
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 197
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline 198
; CS5532_Txd(0x00);
clr R16
xcall _CS5532_Txd
.dbline -2
L57:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e CS5532_RW _CS5532_RW fl
; l -> <dead>
; Conversion_r -> <dead>
; AD_data -> y+0
; j -> R20
; i -> R22
; chunnel -> R20,R21
.even
_CS5532_RW::
xcall push_gset2
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 208
; /* //通道寄存器
; CS5532_Txd(0x05);
; CS5532_Txd(0x32);
; CS5532_Txd(0x40);
; CS5532_Txd(0x32);
; CS5532_Txd(0x40);*/
; //---------------------------
; }
; unsigned long CS5532_RW(unsigned int chunnel)
; {
.dbline 211
; unsigned char Conversion_r,l,j,i;
; unsigned char AD_data[4];
; switch(chunnel)
cpi R20,0
cpc R20,R21
breq L65
X2:
cpi R20,1
ldi R30,0
cpc R21,R30
brne X4
xjmp L66
X4:
cpi R20,2
ldi R30,0
cpc R21,R30
brne X5
xjmp L67
X5:
cpi R20,3
ldi R30,0
cpc R21,R30
brne X6
xjmp L68
X6:
cpi R20,4
ldi R30,0
cpc R21,R30
brne X7
xjmp L69
X7:
cpi R20,5
ldi R30,0
cpc R21,R30
brne X8
xjmp L70
X8:
cpi R20,6
ldi R30,0
cpc R21,R30
brne X9
xjmp L71
X9:
cpi R20,7
ldi R30,0
cpc R21,R30
brne X10
xjmp L72
X10:
xjmp L64
X3:
.dbline 212
; {
L65:
.dbline 214
; case 0:
; CLR_4052A;
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 215
; CLR_4052B;
in R24,0x5
ori R24,127
out 0x5,R24
.dbline 216
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 217
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 218
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 219
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 220
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 221
; break;
xjmp L64
L66:
.dbline 223
; case 1:
; SET_4052A;
sbi 0x14,3
.dbline 224
; CLR_4052B;
in R24,0x5
ori R24,127
out 0x5,R24
.dbline 225
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 226
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 227
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 228
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 229
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 230
; break;
xjmp L64
L67:
.dbline 232
; case 2:
; CLR_4052A;
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 233
; SET_4052B;
sbi 0x5,7
.dbline 234
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 235
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 236
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 237
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 238
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 239
; break;
xjmp L64
L68:
.dbline 241
; case 3:
; SET_4052A;
sbi 0x14,3
.dbline 242
; SET_4052B;
sbi 0x5,7
.dbline 243
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 244
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 245
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 246
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 247
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 248
; break;
xjmp L64
L69:
.dbline 250
; case 4:
; CLR_4052A;
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 251
; CLR_4052B;
in R24,0x5
ori R24,127
out 0x5,R24
.dbline 252
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 253
; CS5532_Txd(0b01110110);
ldi R16,118
xcall _CS5532_Txd
.dbline 254
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 255
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 256
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 257
; break;
xjmp L64
L70:
.dbline 259
; case 5:
; SET_4052A;
sbi 0x14,3
.dbline 260
; CLR_4052B;
in R24,0x5
ori R24,127
out 0x5,R24
.dbline 261
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 262
; CS5532_Txd(0b01110110);
ldi R16,118
xcall _CS5532_Txd
.dbline 263
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 264
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 265
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 266
; break;
xjmp L64
L71:
.dbline 268
; case 6:
; CLR_4052A;
in R24,0x14
andi R24,247
out 0x14,R24
.dbline 269
; SET_4052B;
sbi 0x5,7
.dbline 270
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 271
; CS5532_Txd(0b01110110);
ldi R16,118
xcall _CS5532_Txd
.dbline 272
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 273
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 274
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 275
; break;
xjmp L64
L72:
.dbline 277
; case 7:
; SET_4052A;
sbi 0x14,3
.dbline 278
; SET_4052B;
sbi 0x5,7
.dbline 279
; CS5532_Txd(0x05);
ldi R16,5
xcall _CS5532_Txd
.dbline 280
; CS5532_Txd(0b01110110);
ldi R16,118
xcall _CS5532_Txd
.dbline 281
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 282
; CS5532_Txd(0b00110110);
ldi R16,54
xcall _CS5532_Txd
.dbline 283
; CS5532_Txd(0x40);
ldi R16,64
xcall _CS5532_Txd
.dbline 284
; break;
.dbline 285
; default:break;
L64:
.dbline 287
; }
; CS5532_Txd(0x80); //启动稳定的单次转换
ldi R16,128
xcall _CS5532_Txd
L73:
.dbline 289
.dbline 289
.dbline 289
L74:
.dbline 288
; while(SDO!=0) //等待转换结束
sbic 0xc,5
rjmp L73
.dbline 291
; {;}
; // 读取数据
; CLR_SCK;//时钟低
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 292
; CLR_SDI;
in R24,0xe
andi R24,239
out 0xe,R24
.dbline 293
; delay_loop(1);
ldi R16,1
ldi R17,0
xcall _delay_loop
.dbline 294
; for(i=0;i<8;i++)
clr R22
xjmp L79
L76:
.dbline 295
.dbline 296
sbi 0xe,6
.dbline 297
ldi R16,1
ldi R17,0
xcall _delay_loop
.dbline 298
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 299
ldi R16,1
ldi R17,0
xcall _delay_loop
.dbline 300
L77:
.dbline 294
inc R22
L79:
.dbline 294
cpi R22,8
brlo L76
.dbline 301
; {
; SET_SCK; //时钟高
; delay_loop(1);
; CLR_SCK; //时钟低
; delay_loop(1);
; }
; for(j=0;j<4;j++)
clr R20
xjmp L83
L80:
.dbline 302
; {
.dbline 303
; for(i=0;i<8;i++)
clr R22
xjmp L87
L84:
.dbline 304
; {
.dbline 305
; SET_SCK; //时钟高
sbi 0xe,6
.dbline 306
; AD_data[j]<<=1;
movw R24,R28
mov R2,R20
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R4,z+0
lsl R4
std z+0,R4
.dbline 307
; if(SDO)
sbis 0xc,5
rjmp L88
.dbline 308
; AD_data[j]|=0x01; //从SDO读取数据
movw R24,R28
mov R2,R20
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
ori R24,1
std z+0,R24
L88:
.dbline 309
in R24,0xe
andi R24,191
out 0xe,R24
.dbline 310
ldi R16,1
ldi R17,0
xcall _delay_loop
.dbline 311
L85:
.dbline 303
inc R22
L87:
.dbline 303
cpi R22,8
brlo L84
.dbline 312
L81:
.dbline 301
inc R20
L83:
.dbline 301
cpi R20,4
brlo L80
.dbline -2
L62:
adiw R28,4
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l l 1 c
.dbsym l Conversion_r 1 c
.dbsym l AD_data 0 A[4:4]c
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r chunnel 20 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -