📄 project.s
字号:
; while(Ack_Flag==1);
lds R24,_Ack_Flag
cpi R24,1
breq L85
.dbline 262
; Stop(); //停止
rcall _Stop
.dbline -2
.dbline 263
; }
L78:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r Data 20 c
.dbsym r Address 22 c
.dbsym r Slave 10 c
.dbend
.dbfunc e Write_2byte _Write_2byte fV
; Data1 -> R20
; Data0 -> R22
; Address -> R10
; Slave -> R12
.even
_Write_2byte::
rcall push_gset4
mov R10,R18
mov R12,R16
ldd R22,y+8
ldd R20,y+10
.dbline -1
.dbline 268
;
; //***************************写两字节数据****************************//
; //向从地址为Slave的IIC器件的Address地址开始写两字节数据Data0,Data1
; void Write_2byte(uchar Slave,uchar Address,uchar Data0,uchar Data1)
; {Start(); //开始
.dbline 268
rcall _Start
.dbline 269
; Write_Byte(Slave); //写I2C器件地址
mov R16,R12
rcall _Write_Byte
L89:
.dbline 270
; do Check_Ack(); //检查应答位
rcall _Check_Ack
L90:
.dbline 271
; while(Ack_Flag==1);
lds R24,_Ack_Flag
cpi R24,1
breq L89
.dbline 272
; Write_Byte(Address); //送寄存器地址
mov R16,R10
rcall _Write_Byte
L92:
.dbline 273
; do Check_Ack(); //检查应答位
rcall _Check_Ack
L93:
.dbline 274
; while(Ack_Flag==1);
lds R24,_Ack_Flag
cpi R24,1
breq L92
.dbline 275
; Write_Byte(Data0);
mov R16,R22
rcall _Write_Byte
L95:
.dbline 276
; do Check_Ack(); //检查应答位
rcall _Check_Ack
L96:
.dbline 277
; while(Ack_Flag==1);
lds R24,_Ack_Flag
cpi R24,1
breq L95
.dbline 278
; Write_Byte(Data1);
mov R16,R20
rcall _Write_Byte
L98:
.dbline 279
; do Check_Ack(); //检查应答位
rcall _Check_Ack
L99:
.dbline 280
; while(Ack_Flag==1);
lds R24,_Ack_Flag
cpi R24,1
breq L98
.dbline 281
; Stop(); //停止信号
rcall _Stop
.dbline -2
.dbline 282
; }
L88:
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r Data1 20 c
.dbsym r Data0 22 c
.dbsym r Address 10 c
.dbsym r Slave 12 c
.dbend
.dbfunc e Read_1byte _Read_1byte fc
; x -> <dead>
; data0 -> R22
; Address -> R10
; Slave -> R20
.even
_Read_1byte::
rcall push_gset3
mov R10,R18
mov R20,R16
.dbline -1
.dbline 287
;
; //***************************读一字节数据****************************//
; //从从地址为Slave的IIC器件的Address地址处读一字节数据
; uchar Read_1byte(uchar Slave,uchar Address)
; {uchar data0,x;
L102:
.dbline 288
; do{
.dbline 289
; Start(); //开始信号
rcall _Start
.dbline 290
; Write_Byte(Slave); //写I2C器件地址
mov R16,R20
rcall _Write_Byte
.dbline 291
; Check_Ack(); //检查应答位
rcall _Check_Ack
.dbline 292
L103:
.dbline 292
; }while(Ack_Flag);
lds R2,_Ack_Flag
tst R2
brne L102
L105:
.dbline 293
; do{
.dbline 294
; Write_Byte(Address); //写寄存器地址
mov R16,R10
rcall _Write_Byte
.dbline 295
; Check_Ack(); //检查应答位
rcall _Check_Ack
.dbline 296
L106:
.dbline 296
; }while(Ack_Flag);
lds R2,_Ack_Flag
tst R2
brne L105
L108:
.dbline 297
; do{
.dbline 298
; Start(); //开始
rcall _Start
.dbline 299
; Write_Byte(Slave+1); //写I2C器件地址(+1表示为读操作)
mov R16,R20
subi R16,255 ; addi 1
rcall _Write_Byte
.dbline 300
; Check_Ack(); //检查应答位
rcall _Check_Ack
.dbline 301
L109:
.dbline 301
; }while(Ack_Flag);
lds R2,_Ack_Flag
tst R2
brne L108
.dbline 302
; data0=Read_Byte(); //读1字节
rcall _Read_Byte
mov R22,R16
.dbline 303
; Nack(); //读完发送一个Not Ack应答
rcall _Nack
.dbline 304
; Stop(); //停止
rcall _Stop
.dbline 305
; return data0; //返回读取数据
mov R16,R22
.dbline -2
L101:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym l x 1 c
.dbsym r data0 22 c
.dbsym r Address 10 c
.dbsym r Slave 20 c
.dbend
.dbfunc e Led_Display _Led_Display fV
; d1 -> R20
; d0 -> R22
; Number -> R20
.even
_Led_Display::
rcall push_gset2
mov R20,R16
sbiw R28,3
.dbline -1
.dbline 310
; }
;
; //***************************数字显示程序****************************//
; void Led_Display(uchar Number)
; {uchar d0,d1;
.dbline 311
; d0=Number/10; //取站数的个位
ldi R17,10
mov R16,R20
rcall div8u
mov R22,R16
.dbline 312
; d1=Number%10; //取站数的十位
ldi R17,10
mov R16,R20
rcall mod8u
mov R20,R16
.dbline 313
; Write_2byte(0x70,0x20,d1,d0); //从显示位0开始连续显示两位
std y+2,R22
std y+0,R20
ldi R18,32
ldi R16,112
rcall _Write_2byte
.dbline -2
.dbline 314
; }
L111:
adiw R28,3
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r d1 20 c
.dbsym r d0 22 c
.dbsym r Number 20 c
.dbend
.dbfunc e change _change fV
.area func_lit(rom, con, rel)
L326:
.word `L118
.word `L131
.word `L144
.word `L157
.word `L170
.word `L183
.word `L196
.word `L209
.word `L222
.word `L235
.word `L248
.word `L261
.word `L274
.word `L287
.word `L300
.word `L313
.area text(rom, con, rel)
.dbfile H:\Project\Project\project.c
.area func_lit(rom, con, rel)
L538:
.word `L330
.word `L343
.word `L356
.word `L369
.word `L382
.word `L395
.word `L408
.word `L421
.word `L434
.word `L447
.word `L460
.word `L473
.word `L486
.word `L499
.word `L512
.word `L525
.area text(rom, con, rel)
.dbfile H:\Project\Project\project.c
; m -> R20
.even
_change::
rcall push_gset2
.dbline -1
.dbline 318
;
; //***************************换下一个字显示**************************//
; void change()
; {unsigned char m;
.dbline 319
; if(!Pre_Flag) //报站情形
lds R2,_Pre_Flag
tst R2
breq X3
rjmp L113
X3:
.dbline 320
; {switch(State) //判断站名
.dbline 320
lds R20,_State
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
brge X4
rjmp L114
X4:
ldi R24,16
ldi R25,0
cp R24,R20
cpc R25,R21
brge X5
rjmp L114
X5:
ldi R24,<L326
ldi R25,>L326
mov R16,R20
mov R17,R21
subi R16,1
sbci R17,0
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
mov R30,R16
mov R31,R17
ijmp
X1:
.dbline 321
; {case 1: //若为第1站
L118:
.dbline 322
; if(Word_Number<5) //判断已显示字数
lds R24,_Word_Number
cpi R24,5
brlo X6
rjmp L119
X6:
.dbline 323
; {if(Word_Number<3) //若未显示完“第1站”,则
.dbline 323
cpi R24,3
brsh L121
.dbline 324
; {for(m=0;m<32;m++) //依次换字显示“第1站”
.dbline 324
clr R20
rjmp L126
L123:
.dbline 325
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_State1
ldi R25,>_State1
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L124:
.dbline 324
inc R20
L126:
.dbline 324
cpi R20,32
brlo L123
.dbline 325
; next[m]=State1[Word_Number][m];}
rjmp L122
L121:
.dbline 327
; else
; for(m=0;m<32;m++) //依次换字显示“到了”
clr R20
rjmp L130
L127:
.dbline 328
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
subi R16,3
sbci R17,0
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_DL
ldi R25,>_DL
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L128:
.dbline 327
inc R20
L130:
.dbline 327
cpi R20,32
brlo L127
L122:
.dbline 329
; next[m]=DL[Word_Number-3][m];
; Word_Number++;} //显示字数+1
lds R24,_Word_Number
subi R24,255 ; addi 1
sts _Word_Number,R24
.dbline 329
rjmp L114
L119:
.dbline 331
; else //若全部显示完,则
; Word_Number=0; //显示字数清0
clr R2
sts _Word_Number,R2
.dbline 332
; break;
rjmp L114
L131:
.dbline 334
; case 2: //若为第2站
; if(Word_Number<5) //判断已显示字数
lds R24,_Word_Number
cpi R24,5
brlo X7
rjmp L132
X7:
.dbline 335
; {if(Word_Number<3) //若未显示完“第2站”,则
.dbline 335
cpi R24,3
brsh L134
.dbline 336
; {for(m=0;m<32;m++) //依次换字显示“第2站”
.dbline 336
clr R20
rjmp L139
L136:
.dbline 337
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_State2
ldi R25,>_State2
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L137:
.dbline 336
inc R20
L139:
.dbline 336
cpi R20,32
brlo L136
.dbline 337
; next[m]=State2[Word_Number][m];}
rjmp L135
L134:
.dbline 339
; else //否则
; for(m=0;m<32;m++)
clr R20
rjmp L143
L140:
.dbline 340
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
subi R16,3
sbci R17,0
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_DL
ldi R25,>_DL
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L141:
.dbline 339
inc R20
L143:
.dbline 339
cpi R20,32
brlo L140
L135:
.dbline 341
; next[m]=DL[Word_Number-3][m]; //依次换字显示“到了”
; Word_Number++;} //显示字数+1
lds R24,_Word_Number
subi R24,255 ; addi 1
sts _Word_Number,R24
.dbline 341
rjmp L114
L132:
.dbline 343
; else //若全部显示完,则
; Word_Number=0; //显示字数清0
clr R2
sts _Word_Number,R2
.dbline 344
; break;
rjmp L114
L144:
.dbline 346
; case 3: //若为第3站
; if(Word_Number<5) //判断已显示字数
lds R24,_Word_Number
cpi R24,5
brlo X8
rjmp L145
X8:
.dbline 347
; {if(Word_Number<3) //若未显示完“第3站”,则
.dbline 347
cpi R24,3
brsh L147
.dbline 348
; {for(m=0;m<32;m++)
.dbline 348
clr R20
rjmp L152
L149:
.dbline 349
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_State1
ldi R25,>_State1
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L150:
.dbline 348
inc R20
L152:
.dbline 348
cpi R20,32
brlo L149
.dbline 349
; next[m]=State1[Word_Number][m];} //依次换字显示“第3站”
rjmp L148
L147:
.dbline 351
; else
; for(m=0;m<32;m++)
clr R20
rjmp L156
L153:
.dbline 352
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
subi R16,3
sbci R17,0
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_DL
ldi R25,>_DL
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
clr R31
add R30,R24
adc R31,R25
std z+0,R0
L154:
.dbline 351
inc R20
L156:
.dbline 351
cpi R20,32
brlo L153
L148:
.dbline 353
; next[m]=DL[Word_Number-3][m]; //依次换字显示“到了”
; Word_Number++;} //显示字数+1
lds R24,_Word_Number
subi R24,255 ; addi 1
sts _Word_Number,R24
.dbline 353
rjmp L114
L145:
.dbline 355
; else //若全部显示完,则
; Word_Number=0; //显示字数清0
clr R2
sts _Word_Number,R2
.dbline 356
; break;
rjmp L114
L157:
.dbline 358
; case 4: //若为第4站
; if(Word_Number<5) //判断已显示字数
lds R24,_Word_Number
cpi R24,5
brlo X9
rjmp L158
X9:
.dbline 359
; {if(Word_Number<3) //若未显示完“第4站”,则
.dbline 359
cpi R24,3
brsh L160
.dbline 360
; {for(m=0;m<32;m++)
.dbline 360
clr R20
rjmp L165
L162:
.dbline 361
ldi R18,5
ldi R19,0
lds R16,_Word_Number
clr R17
rcall lsl16
mov R2,R16
mov R3,R17
ldi R24,<_State2
ldi R25,>_State2
add R2,R24
adc R3,R25
mov R4,R20
clr R5
add R4,R2
adc R5,R3
mov R30,R4
mov R31,R5
lpm
ldi R24,<_next
ldi R25,>_next
mov R30,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -