📄 test.s
字号:
; _nop_();
nop
.dbline 164
; PORTC &= ~(1<<SCL);
cbi 0x8,5
.dbline 165
; _nop_();
nop
.dbline 166
; _nop_();
nop
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Stop_I2c _Stop_I2c fV
.even
_Stop_I2c::
.dbline -1
.dbline 175
; }
; /*******************************************************************
; 结束总线函数
; 函数原型: void Stop_I2c();
; 功能: 结束I2C总线,即发送I2C结束条件.
;
; ********************************************************************/
; void Stop_I2c()
; {
.dbline 176
; PORTC &= ~(1<<SDA); /*发送结束条件的数据信号*/
cbi 0x8,4
.dbline 177
; _nop_(); /*发送结束条件的时钟信号*/
nop
.dbline 178
; PORTC |= (1<<SCL); /*结束条件建立时间大于4μs*/
sbi 0x8,5
.dbline 179
; _nop_();
nop
.dbline 180
; _nop_();
nop
.dbline 181
; _nop_();
nop
.dbline 182
; _nop_();
nop
.dbline 183
; _nop_();
nop
.dbline 184
; PORTC |= (1<<SDA); /*发送I2C总线结束信号*/
sbi 0x8,4
.dbline 185
; _nop_();
nop
.dbline 186
; _nop_();
nop
.dbline 187
; _nop_();
nop
.dbline 188
; _nop_();
nop
.dbline -2
L17:
.dbline 0 ; func end
ret
.dbend
.dbfunc e SendByte _SendByte fV
; BitCnt -> R20
; c -> R22
.even
_SendByte::
rcall push_gset2
mov R22,R16
.dbline -1
.dbline 198
; }
; /*******************************************************************
; 字节数据传送函数
; 函数原型: void SendByte(unsigned char c);
; 功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
; 此状态位进行操作.(不应答或非应答都使ack=0 假)
; 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
; ********************************************************************/
; void SendByte(unsigned char c)
; {
.dbline 200
; unsigned char BitCnt;
; for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
clr R20
rjmp L22
L19:
.dbline 201
; {
.dbline 202
; if((c<<BitCnt)&0x80){PORTC |= (1<<SDA);} /*判断发送位*/
mov R16,R22
mov R17,R20
rcall lsl8
mov R24,R16
andi R24,128
breq L23
.dbline 202
.dbline 202
sbi 0x8,4
.dbline 202
rjmp L24
L23:
.dbline 203
; else {PORTC &= ~(1<<SDA);}
.dbline 203
cbi 0x8,4
.dbline 203
L24:
.dbline 204
nop
.dbline 205
sbi 0x8,5
.dbline 206
nop
.dbline 207
nop
.dbline 208
nop
.dbline 209
nop
.dbline 210
nop
.dbline 211
nop
.dbline 212
cbi 0x8,5
.dbline 213
L20:
.dbline 200
inc R20
L22:
.dbline 200
cpi R20,8
brlo L19
.dbline 215
; _nop_();
; PORTC |= (1<<SCL); /*置时钟线为高,通知被控器开始接收数据位*/
; _nop_();
; _nop_(); /*保证时钟高电平周期大于4μs*/
; _nop_();
; _nop_();
; _nop_();
; _nop_();
; PORTC &= ~(1<<SCL);
; }
;
; _nop_();
nop
.dbline 216
; _nop_();
nop
.dbline 217
; _nop_();
nop
.dbline 218
; PORTC |= (1<<SDA); /*8位发送完后释放数据线,准备接收应答位*/
sbi 0x8,4
.dbline 219
; _nop_();
nop
.dbline 220
; _nop_();
nop
.dbline 221
; _nop_();
nop
.dbline 222
; PORTC |= (1<<SCL);
sbi 0x8,5
.dbline 223
; _nop_();
nop
.dbline 224
; _nop_();
nop
.dbline 225
; _nop_();
nop
.dbline 226
; _nop_();
nop
.dbline 227
; _nop_();
nop
.dbline 228
; if((PINC&(1<<SDA))==1){temp &= ~(1<<ack);}
in R24,0x6
andi R24,16
cpi R24,1
brne L25
.dbline 228
.dbline 228
lds R24,_temp
andi R24,254
sts _temp,R24
.dbline 228
rjmp L26
L25:
.dbline 229
; else {temp |= (1<<ack);} /*判断是否接收到应答信号*/
.dbline 229
lds R24,_temp
ori R24,1
sts _temp,R24
.dbline 229
L26:
.dbline 230
; PORTC &= ~(1<<SCL);
cbi 0x8,5
.dbline 231
; _nop_();
nop
.dbline 232
; _nop_();
nop
.dbline 233
; _nop_();
nop
.dbline 234
; _nop_();
nop
.dbline -2
L18:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r BitCnt 20 c
.dbsym r c 22 c
.dbend
.dbfunc e TC1321_SET _TC1321_SET fI
; tem -> y+0
; i -> R20
; DA_SET -> R20,R21
.even
_TC1321_SET::
rcall push_gset1
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 243
; }
; /*******************************************************************
; 向有子地址器件发送多字节数据函数
; 函数原型: bit TC1321_SET(unsigned int DA_SET);
; 功能: 设定TC1321的DATA寄存器,从而控制输出所设定的电压值:(DA_SET/1024)*VREF.
; 注意:
; ****************************14.3V时候的D/A输出值*******************************/
; TC1321_SET(unsigned int DA_SET)
; {
.dbline 246
; unsigned char i;
; unsigned char tem[4];
; temp_det();
rcall _temp_det
.dbline 247
; _nop_();
nop
.dbline 248
; temp_det();
rcall _temp_det
.dbline 249
; _nop_();
nop
.dbline 250
; xxyy=now_temp-5;
lds R24,_now_temp
lds R25,_now_temp+1
sbiw R24,5
sts _xxyy+1,R25
sts _xxyy,R24
.dbline 251
; DA_SET=ABC[xxyy];
movw R18,R24
ldi R16,2
ldi R17,0
rcall empy16s
movw R30,R16
ldi R24,<_ABC
ldi R25,>_ABC
add R30,R24
adc R31,R25
lpm R20,Z+
lpm R21,Z
.dbline 253
;
; if(now_temp <6)
lds R24,_now_temp
lds R25,_now_temp+1
cpi R24,6
ldi R30,0
cpc R25,R30
brge L28
.dbline 254
; {
.dbline 255
; DA_SET=735;
ldi R20,735
ldi R21,2
.dbline 256
; }
L28:
.dbline 258
;
; tem[0]=0x90;
ldi R24,144
std y+0,R24
.dbline 259
; tem[1]=0x00;
clr R2
std y+1,R2
.dbline 260
; tem[2]=DA_SET/4;
movw R2,R20
lsr R3
ror R2
lsr R3
ror R2
std y+2,R2
.dbline 261
; tem[3]=DA_SET%4;
movw R24,R20
andi R24,3
andi R25,0
std y+3,R24
.dbline 262
; tem[3]=tem[3]<<6;
mov R2,R24
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
std y+3,R2
.dbline 264
;
; Start_I2c();
rcall _Start_I2c
.dbline 265
; for(i=0;i<4;i++)
clr R20
rjmp L38
L35:
.dbline 266
; {
.dbline 267
; SendByte(tem[i]);
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SendByte
.dbline 268
; if((temp&(1<<ack))==0)return(0);
lds R2,_temp
sbrc R2,0
rjmp L39
.dbline 268
clr R16
clr R17
rjmp L27
L39:
.dbline 269
L36:
.dbline 265
inc R20
L38:
.dbline 265
cpi R20,4
brlo L35
.dbline 270
; }
; Stop_I2c();
rcall _Stop_I2c
.dbline 271
; return(1);
ldi R16,1
ldi R17,0
.dbline -2
L27:
adiw R28,4
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l tem 0 A[4:4]c
.dbsym r i 20 c
.dbsym r DA_SET 20 i
.dbend
.dbfunc e TC1321_SET_138 _TC1321_SET_138 fI
; tem -> y+0
; i -> R20
; DA_SET -> R20,R21
.even
_TC1321_SET_138::
rcall push_gset1
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 275
; }
; /**********************13.8V时候的D/A输出值 ***************************/
; TC1321_SET_138(unsigned int DA_SET)
; {
.dbline 278
; unsigned char i;
; unsigned char tem[4];
; temp_det();
rcall _temp_det
.dbline 279
; _nop_();
nop
.dbline 280
; temp_det();
rcall _temp_det
.dbline 281
; _nop_();
nop
.dbline 283
;
; xxyy=now_temp+5;
lds R24,_now_temp
lds R25,_now_temp+1
adiw R24,5
sts _xxyy+1,R25
sts _xxyy,R24
.dbline 284
; DA_SET=ABC_2[xxyy];
movw R18,R24
ldi R16,2
ldi R17,0
rcall empy16s
movw R30,R16
ldi R24,<_ABC_2
ldi R25,>_ABC_2
add R30,R24
adc R31,R25
lpm R20,Z+
lpm R21,Z
.dbline 286
;
; if(now_temp <-4 ) //温度小于-30°时候输出15.3V
lds R24,_now_temp
lds R25,_now_temp+1
cpi R24,252
ldi R30,255
cpc R25,R30
brge L42
.dbline 287
; {
.dbline 288
; DA_SET=752;
ldi R20,752
ldi R21,2
.dbline 289
; }
L42:
.dbline 291
;
; tem[0]=0x90;
ldi R24,144
std y+0,R24
.dbline 292
; tem[1]=0x00;
clr R2
std y+1,R2
.dbline 293
; tem[2]=DA_SET/4;
movw R2,R20
lsr R3
ror R2
lsr R3
ror R2
std y+2,R2
.dbline 294
; tem[3]=DA_SET%4;
movw R24,R20
andi R24,3
andi R25,0
std y+3,R24
.dbline 295
; tem[3]=tem[3]<<6;
mov R2,R24
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
std y+3,R2
.dbline 297
;
; Start_I2c();
rcall _Start_I2c
.dbline 298
; for(i=0;i<4;i++)
clr R20
rjmp L52
L49:
.dbline 299
; {
.dbline 300
; SendByte(tem[i]);
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SendByte
.dbline 301
; if((temp&(1<<ack))==0)return(0);
lds R2,_temp
sbrc R2,0
rjmp L53
.dbline 301
clr R16
clr R17
rjmp L41
L53:
.dbline 302
L50:
.dbline 298
inc R20
L52:
.dbline 298
cpi R20,4
brlo L49
.dbline 303
; }
; Stop_I2c();
rcall _Stop_I2c
.dbline 304
; return(1);
ldi R16,1
ldi R17,0
.dbline -2
L41:
adiw R28,4
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l tem 0 A[4:4]c
.dbsym r i 20 c
.dbsym r DA_SET 20 i
.dbend
.dbfunc e TC1321_SET_1 _TC1321_SET_1 fI
; tem -> y+0
; i -> R20
; DA_SET -> R20,R21
.even
_TC1321_SET_1::
rcall push_gset1
movw R20,R16
sbiw R28,4
.dbline -1
.dbline 308
; }
; /********************************************************************/
; TC1321_SET_1(unsigned int DA_SET)
; {
.dbline 311
; unsigned char i;
; unsigned char tem[4];
; tem[0]=0x90;
ldi R24,144
std y+0,R24
.dbline 312
; tem[1]=0x00;
clr R2
std y+1,R2
.dbline 313
; tem[2]=DA_SET/4;
movw R2,R20
lsr R3
ror R2
lsr R3
ror R2
std y+2,R2
.dbline 314
; tem[3]=DA_SET%4;
movw R24,R20
andi R24,3
andi R25,0
std y+3,R24
.dbline 315
; tem[3]=tem[3]<<6;
mov R2,R24
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
lsl R2
std y+3,R2
.dbline 317
;
; Start_I2c();
rcall _Start_I2c
.dbline 318
; for(i=0;i<4;i++)
clr R20
rjmp L64
L61:
.dbline 319
; {
.dbline 320
; SendByte(tem[i]);
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _SendByte
.dbline 321
; if((temp&(1<<ack))==0)return(0);
lds R2,_temp
sbrc R2,0
rjmp L65
.dbline 321
clr R16
clr R17
rjmp L55
L65:
.dbline 322
L62:
.dbline 318
inc R20
L64:
.dbline 318
cpi R20,4
brlo L61
.dbline 323
; }
; Stop_I2c();
rcall _Stop_I2c
.dbline 324
; return(1);
ldi R16,1
ldi R17,0
.dbline -2
L55:
adiw R28,4
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l tem 0 A[4:4]c
.dbsym r i 20 c
.dbsym r DA_SET 20 i
.dbend
.dbfunc e Delay _Delay fV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -