📄 ac15-3.s
字号:
ldi R24,164
out 0x36,R24
.dbline 179
L42:
.dbline 179
L43:
.dbline 179
; Wait();
in R2,0x36
sbrs R2,7
rjmp L42
.dbline 179
.dbline 179
.dbline 180
; if (TestAck()!=RE_START) return 0;
in R24,0x1
andi R24,248
cpi R24,16
breq L45
.dbline 180
clr R16
xjmp L26
L45:
.dbline 181
; Write8Bit(rd_device_add);
.dbline 181
ldi R24,161
out 0x3,R24
.dbline 181
ldi R24,132
out 0x36,R24
.dbline 181
.dbline 181
.dbline 182
L47:
.dbline 182
L48:
.dbline 182
; Wait();
in R2,0x36
sbrs R2,7
rjmp L47
.dbline 182
.dbline 182
.dbline 183
; if(TestAck()!=MR_SLA_ACK) return 0;
in R24,0x1
andi R24,248
cpi R24,64
breq L50
.dbline 183
clr R16
xjmp L26
L50:
.dbline 184
; Twi();
ldi R24,132
out 0x36,R24
.dbline 185
L52:
.dbline 185
L53:
.dbline 185
; Wait();
in R2,0x36
sbrs R2,7
rjmp L52
.dbline 185
.dbline 185
.dbline 186
; if(TestAck()!=MR_DATA_NOACK) return 0;
in R24,0x1
andi R24,248
cpi R24,88
breq L55
.dbline 186
clr R16
xjmp L26
L55:
.dbline 187
; temp=TWDR;
in R20,0x3
.dbline 188
; Stop();
ldi R24,148
out 0x36,R24
.dbline 189
; return temp;
mov R16,R20
.dbline -2
L26:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r RomAddress 16 c
.dbend
.dbfunc e i2c_Write _i2c_Write fc
; Wdata -> R20
; RomAddress -> R22
.even
_i2c_Write::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 198
; }
;
; /******************************************
; I2C总线写一个字节
; 返回0:写成功
; 返回非0:写失败
; *******************************************/
; unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata)
; {
.dbline 199
; Start();
ldi R24,164
out 0x36,R24
.dbline 200
L58:
.dbline 200
L59:
.dbline 200
; Wait();
in R2,0x36
sbrs R2,7
rjmp L58
.dbline 200
.dbline 200
.dbline 201
; if(TestAck()!=START) return 1;
in R24,0x1
andi R24,248
cpi R24,8
breq L61
.dbline 201
ldi R16,1
xjmp L57
L61:
.dbline 202
; Write8Bit(wr_device_add);
.dbline 202
ldi R24,160
out 0x3,R24
.dbline 202
ldi R24,132
out 0x36,R24
.dbline 202
.dbline 202
.dbline 203
L63:
.dbline 203
L64:
.dbline 203
; Wait();
in R2,0x36
sbrs R2,7
rjmp L63
.dbline 203
.dbline 203
.dbline 204
; if(TestAck()!=MT_SLA_ACK) return 1;
in R24,0x1
andi R24,248
cpi R24,24
breq L66
.dbline 204
ldi R16,1
xjmp L57
L66:
.dbline 205
; Write8Bit(RomAddress);
.dbline 205
out 0x3,R22
.dbline 205
ldi R24,132
out 0x36,R24
.dbline 205
.dbline 205
.dbline 206
L68:
.dbline 206
L69:
.dbline 206
; Wait();
in R2,0x36
sbrs R2,7
rjmp L68
.dbline 206
.dbline 206
.dbline 207
; if(TestAck()!=MT_DATA_ACK) return 1;
in R24,0x1
andi R24,248
cpi R24,40
breq L71
.dbline 207
ldi R16,1
xjmp L57
L71:
.dbline 208
; Write8Bit(Wdata);
.dbline 208
out 0x3,R20
.dbline 208
ldi R24,132
out 0x36,R24
.dbline 208
.dbline 208
.dbline 209
L73:
.dbline 209
L74:
.dbline 209
; Wait();
in R2,0x36
sbrs R2,7
rjmp L73
.dbline 209
.dbline 209
.dbline 210
; if(TestAck()!=MT_DATA_ACK) return 1;
in R24,0x1
andi R24,248
cpi R24,40
breq L76
.dbline 210
ldi R16,1
xjmp L57
L76:
.dbline 211
; Stop();
ldi R24,148
out 0x36,R24
.dbline 212
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 213
; return 0;
clr R16
.dbline -2
L57:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Wdata 20 c
.dbsym r RomAddress 22 c
.dbend
.dbfunc e main _main fV
; key_val -> R10
; rd_val -> R22
; wr_val -> R20
.even
_main::
sbiw R28,2
.dbline -1
.dbline 218
; }
;
; //******************************************
; void main(void)
; {
.dbline 219
; uchar key_val,wr_val=0,rd_val=0;
clr R20
.dbline 219
clr R22
.dbline 220
; port_init();
xcall _port_init
.dbline 221
; delay_ms(400);
ldi R16,400
ldi R17,1
xcall _delay_ms
.dbline 222
; InitLcd();
xcall _InitLcd
.dbline 223
; LcdWriteCommand(0x01,1);
ldi R18,1
ldi R16,1
xcall _LcdWriteCommand
.dbline 224
; LcdWriteCommand(0x0c,1);
ldi R18,1
ldi R16,12
xcall _LcdWriteCommand
.dbline 225
; ePutstr(0,0,str0);
ldi R24,<_str0
ldi R25,>_str0
std y+1,R25
std y+0,R24
clr R18
clr R16
xcall _ePutstr
.dbline 226
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 227
; ePutstr(0,1,str1);
ldi R24,<_str1
ldi R25,>_str1
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
xcall _ePutstr
.dbline 228
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
xjmp L80
L79:
.dbline 231
; /********************************************/
; while(1)
; {
.dbline 232
; DisplayOneChar(9,0,wr_val/100+0x30);
ldi R17,100
mov R16,R20
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,9
xcall _DisplayOneChar
.dbline 233
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 234
; DisplayOneChar(10,0,(wr_val/10)%10+0x30);
ldi R17,10
mov R16,R20
xcall div8u
ldi R17,10
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,10
xcall _DisplayOneChar
.dbline 235
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 236
; DisplayOneChar(11,0,wr_val%10+0x30);
ldi R17,10
mov R16,R20
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,11
xcall _DisplayOneChar
.dbline 237
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 239
;
; DisplayOneChar(8,1,rd_val/100+0x30);
ldi R17,100
mov R16,R22
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,8
xcall _DisplayOneChar
.dbline 240
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 241
; DisplayOneChar(9,1,(rd_val/10%10)+0x30);
ldi R17,10
mov R16,R22
xcall div8u
ldi R17,10
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,9
xcall _DisplayOneChar
.dbline 242
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 243
; DisplayOneChar(10,1,rd_val%10+0x30);
ldi R17,10
mov R16,R22
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,10
xcall _DisplayOneChar
.dbline 244
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 246
;
; key_val=scan_key();
xcall _scan_key
mov R10,R16
.dbline 247
; switch(key_val)
mov R12,R10
clr R13
movw R24,R12
cpi R24,191
ldi R30,0
cpc R25,R30
breq L91
ldi R24,191
cp R24,R12
cpc R25,R13
brlt L94
L93:
movw R24,R12
cpi R24,127
ldi R30,0
cpc R25,R30
breq L92
xjmp L83
L94:
movw R24,R12
cpi R24,223
ldi R30,0
cpc R25,R30
breq L88
cpi R24,223
ldi R30,0
cpc R25,R30
brlt L83
L95:
movw R24,R12
cpi R24,239
ldi R30,0
cpc R25,R30
breq L85
xjmp L83
X0:
.dbline 248
; {
L85:
.dbline 249
; case 0xef:if(wr_val<255)wr_val++;break;
cpi R20,255
brsh L83
.dbline 249
inc R20
.dbline 249
xjmp L83
L88:
.dbline 250
; case 0xdf:if(wr_val>0)wr_val--;break;
clr R2
cp R2,R20
brsh L83
.dbline 250
dec R20
.dbline 250
xjmp L83
L91:
.dbline 251
; case 0xbf:i2c_Write(10,wr_val);
mov R18,R20
ldi R16,10
xcall _i2c_Write
.dbline 252
; DisplayOneChar(15,0,0xef);break;
ldi R24,239
std y+0,R24
clr R18
ldi R16,15
xcall _DisplayOneChar
.dbline 252
xjmp L83
L92:
.dbline 253
; case 0x7f:rd_val=i2c_Read(10);
ldi R16,10
xcall _i2c_Read
mov R22,R16
.dbline 254
; DisplayOneChar(15,1,0xef);break;
ldi R24,239
std y+0,R24
ldi R18,1
ldi R16,15
xcall _DisplayOneChar
.dbline 254
.dbline 255
; default:break;
L83:
.dbline 257
ldi R16,200
ldi R17,0
xcall _delay_ms
.dbline 258
ldi R24,32
std y+0,R24
clr R18
ldi R16,15
xcall _DisplayOneChar
.dbline 258
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 259
ldi R24,32
std y+0,R24
ldi R18,1
ldi R16,15
xcall _DisplayOneChar
.dbline 259
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 261
L80:
.dbline 230
xjmp L79
X1:
.dbline -2
L78:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r key_val 10 c
.dbsym r rd_val 22 c
.dbsym r wr_val 20 c
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 267
; }
; delay_ms(200);
; DisplayOneChar(15,0,0x20);delay_ms(10);
; DisplayOneChar(15,1,0x20);delay_ms(10);
;
; }
;
; }
;
; /*********************延时time*1ms子函数*********************/
; void delay_ms(unsigned int time)
; {
xjmp L98
L97:
.dbline 269
.dbline 270
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 271
subi R20,1
sbci R21,0
.dbline 272
L98:
.dbline 268
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L97
X2:
.dbline -2
L96:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 277
; {
; delay_us(1000);
; time--;
; }
; }
;
; /********************延时子函数*********************/
; void delay_us(int time)
; {
L101:
.dbline 279
; do
; {
.dbline 280
; time--;
subi R16,1
sbci R17,0
.dbline 281
; }
L102:
.dbline 282
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L101
.dbline -2
L100:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -