📄 rtc.lis
字号:
0000 L86:
0000 0000 .byte 0,0
0002 0000 .byte 0,0
0004 0000 .byte 0,0
0006 0000 .byte 0,0
0008 0000 .byte 0,0
000A 0000 .byte 0,0
000C 0000 .byte 0,0
000E 0000 .byte 0,0
0010 00 .byte 0
0011 L87:
0011 0000 .byte 0,0
0013 0000 .byte 0,0
0015 0000 .byte 0,0
0017 00 .byte 0
0018 L88:
0018 0000 .byte 0,0
001A FF .byte 255
.area text(rom, con, rel)
0282 .dbfile E:\张军\AVR\光盘内容\实例源文件\第十章程序\RTC.C
0282 .dbfunc e Key_Process _Key_Process fV
0282 ; temp3 -> y+27
0282 ; temp2 -> y+20
0282 ; Flag -> R22,R23
0282 ; Key -> R10
0282 ; temp1 -> y+3
0282 ; i -> R20
.even
0282 _Key_Process::
0282 00D0 rcall push_gset4
0284 6E97 sbiw R28,30
0286 .dbline -1
0286 .dbline 218
0286 ;
0286 ; //***************************按键处理程序**************************//
0286 ; //说明:为简化程序设计,此程序不保证输入的时间数据的合理性。
0286 ; void Key_Process(void)
0286 ; {uchar temp1[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
0286 .dbline 218
0286 80E0 ldi R24,<L86
0288 90E0 ldi R25,>L86
028A EC2F mov R30,R28
028C FD2F mov R31,R29
028E 3396 adiw R30,3
0290 01E1 ldi R16,17
0292 10E0 ldi R17,0
0294 FA93 st -y,R31
0296 EA93 st -y,R30
0298 9A93 st -y,R25
029A 8A93 st -y,R24
029C 00D0 rcall asgncblk
029E .dbline 220
029E ; //输入数据格式依次为年、月、日、星期、小时和分钟
029E ; uchar temp2[7]={0,0,0,0,0,0,0,};
029E 80E0 ldi R24,<L87
02A0 90E0 ldi R25,>L87
02A2 EC2F mov R30,R28
02A4 FD2F mov R31,R29
02A6 7496 adiw R30,20
02A8 07E0 ldi R16,7
02AA 10E0 ldi R17,0
02AC FA93 st -y,R31
02AE EA93 st -y,R30
02B0 9A93 st -y,R25
02B2 8A93 st -y,R24
02B4 00D0 rcall asgncblk
02B6 .dbline 221
02B6 ; uchar temp3[3]={0,0,0xff};
02B6 80E0 ldi R24,<L88
02B8 90E0 ldi R25,>L88
02BA EC2F mov R30,R28
02BC FD2F mov R31,R29
02BE 7B96 adiw R30,27
02C0 03E0 ldi R16,3
02C2 10E0 ldi R17,0
02C4 FA93 st -y,R31
02C6 EA93 st -y,R30
02C8 9A93 st -y,R25
02CA 8A93 st -y,R24
02CC 00D0 rcall asgncblk
02CE .dbline 226
02CE ; //输入数据格式依次为小时和分钟
02CE ; uchar Key;
02CE ; uchar *Flag;
02CE ; uchar i;
02CE ; Flag=temp1;
02CE 6C2F mov R22,R28
02D0 7D2F mov R23,R29
02D2 6D5F subi R22,253 ; offset = 3
02D4 7F4F sbci R23,255
02D6 .dbline 227
02D6 ; if(PIND!=0xff)
02D6 80B3 in R24,0x10
02D8 8F3F cpi R24,255
02DA 09F4 brne X2
02DC C2C1 rjmp L89
02DE X2:
02DE .dbline 228
02DE ; {DelayMs(20); //延时去抖
02DE .dbline 228
02DE 04E1 ldi R16,20
02E0 8FDE rcall _DelayMs
02E2 .dbline 229
02E2 ; if(PIND!=0xff)
02E2 80B3 in R24,0x10
02E4 8F3F cpi R24,255
02E6 09F0 breq L91
02E8 .dbline 230
02E8 ; Key=PINB;
02E8 A6B2 in R10,0x16
02EA L91:
02EA .dbline 231
02EA ; if(Key==0xfe) //"时间设置"键按下
02EA 8A2D mov R24,R10
02EC 8E3F cpi R24,254
02EE 09F0 breq X3
02F0 D7C0 rjmp L93
02F2 X3:
02F2 .dbline 232
02F2 ; {temp1[0]|=0x80; //年高位设置提示
02F2 .dbline 232
02F2 8B81 ldd R24,y+3
02F4 8068 ori R24,128
02F6 8B83 std y+3,R24
02F8 A0C0 rjmp L96
02FA L95:
02FA .dbline 234
02FA ; while(!Enter_Flag) //直到按下确定键方停止
02FA ; {for(i=0;i<50;i++)
02FA .dbline 234
02FA 4427 clr R20
02FC 06C0 rjmp L101
02FE L98:
02FE .dbline 235
02FE 0C2F mov R16,R28
0300 1D2F mov R17,R29
0302 0D5F subi R16,253 ; offset = 3
0304 1F4F sbci R17,255
0306 88DE rcall _Display
0308 L99:
0308 .dbline 234
0308 4395 inc R20
030A L101:
030A .dbline 234
030A 4233 cpi R20,50
030C C0F3 brlo L98
030E .dbline 236
030E ; Display(temp1); //显示和延时
030E ; Key=~PIND;
030E A0B2 in R10,0x10
0310 A094 com R10
0312 .dbline 237
0312 ; switch(Key)
0312 CA2C mov R12,R10
0314 DD24 clr R13
0316 8C2D mov R24,R12
0318 9D2D mov R25,R13
031A 8031 cpi R24,16
031C E0E0 ldi R30,0
031E 9E07 cpc R25,R30
0320 09F4 brne X4
0322 43C0 rjmp L111
0324 X4:
0324 80E1 ldi R24,16
0326 8C15 cp R24,R12
0328 9D05 cpc R25,R13
032A 94F0 brlt L121
032C L120:
032C 8C2D mov R24,R12
032E 9D2D mov R25,R13
0330 8430 cpi R24,4
0332 E0E0 ldi R30,0
0334 9E07 cpc R25,R30
0336 01F1 breq L105
0338 8430 cpi R24,4
033A E0E0 ldi R30,0
033C 9E07 cpc R25,R30
033E 0CF4 brge X5
0340 7CC0 rjmp L103
0342 X5:
0342 L122:
0342 8C2D mov R24,R12
0344 9D2D mov R25,R13
0346 8830 cpi R24,8
0348 E0E0 ldi R30,0
034A 9E07 cpc R25,R30
034C 09F1 breq L108
034E 75C0 rjmp L103
0350 L121:
0350 8C2D mov R24,R12
0352 9D2D mov R25,R13
0354 8032 cpi R24,32
0356 E0E0 ldi R30,0
0358 9E07 cpc R25,R30
035A 09F4 brne X6
035C 4AC0 rjmp L115
035E X6:
035E 8032 cpi R24,32
0360 E0E0 ldi R30,0
0362 9E07 cpc R25,R30
0364 0CF4 brge X7
0366 69C0 rjmp L103
0368 X7:
0368 L123:
0368 8C2D mov R24,R12
036A 9D2D mov R25,R13
036C 8034 cpi R24,64
036E E0E0 ldi R30,0
0370 9E07 cpc R25,R30
0372 09F4 brne X8
0374 5FC0 rjmp L119
0376 X8:
0376 61C0 rjmp L103
0378 X0:
0378 .dbline 238
0378 ; {case 0x04: //"+"键处理
0378 L105:
0378 .dbline 239
0378 ; (*Flag)++;
0378 E62F mov R30,R22
037A F72F mov R31,R23
037C 8081 ldd R24,z+0
037E 8F5F subi R24,255 ; addi 1
0380 8083 std z+0,R24
0382 .dbline 240
0382 ; if(((*Flag)&0x7f)==10) *Flag=0|0x80;
0382 8F77 andi R24,127
0384 8A30 cpi R24,10
0386 09F0 breq X9
0388 58C0 rjmp L103
038A X9:
038A .dbline 240
038A 80E8 ldi R24,128
038C 8083 std z+0,R24
038E .dbline 241
038E ; break;
038E 55C0 rjmp L103
0390 L108:
0390 .dbline 243
0390 ; case 0x08: //"-"键处理
0390 ; if(((*Flag)&0x7f)==0) *Flag=10|0x80;
0390 E62F mov R30,R22
0392 F72F mov R31,R23
0394 8081 ldd R24,z+0
0396 8F77 andi R24,127
0398 11F4 brne L109
039A .dbline 243
039A 8AE8 ldi R24,138
039C 8083 std z+0,R24
039E L109:
039E .dbline 244
039E ; (*Flag)--;
039E E62F mov R30,R22
03A0 F72F mov R31,R23
03A2 8081 ldd R24,z+0
03A4 8150 subi R24,1
03A6 8083 std z+0,R24
03A8 .dbline 245
03A8 ; break;
03A8 48C0 rjmp L103
03AA L111:
03AA .dbline 247
03AA ; case 0x10: //"下一位"键处理
03AA ; Flag++;
03AA 6F5F subi R22,255 ; offset = 1
03AC 7F4F sbci R23,255
03AE .dbline 248
03AE ; (*(Flag-1))&=0x7f; //上一位去掉小数点显示
03AE 862F mov R24,R22
03B0 972F mov R25,R23
03B2 0197 sbiw R24,1
03B4 E82F mov R30,R24
03B6 F92F mov R31,R25
03B8 8081 ldd R24,z+0
03BA 8F77 andi R24,127
03BC 8083 std z+0,R24
03BE .dbline 249
03BE ; (*Flag)|=0x80; //当前位加上小数点显示
03BE E62F mov R30,R22
03C0 F72F mov R31,R23
03C2 8081 ldd R24,z+0
03C4 8068 ori R24,128
03C6 8083 std z+0,R24
03C8 .dbline 250
03C8 ; if(Flag==temp1+13)
03C8 8C2F mov R24,R28
03CA 9D2F mov R25,R29
03CC 4096 adiw R24,16
03CE E817 cp R30,R24
03D0 F907 cpc R31,R25
03D2 09F0 breq X10
03D4 32C0 rjmp L103
03D6 X10:
03D6 .dbline 251
03D6 ; {Flag=temp1;
03D6 .dbline 251
03D6 6C2F mov R22,R28
03D8 7D2F mov R23,R29
03DA 6D5F subi R22,253 ; offset = 3
03DC 7F4F sbci R23,255
03DE .dbline 252
03DE ; (*Flag)|=0x80;
03DE E62F mov R30,R22
03E0 F72F mov R31,R23
03E2 8081 ldd R24,z+0
03E4 8068 ori R24,128
03E6 8083 std z+0,R24
03E8 .dbline 253
03E8 ; (*(Flag+13))&=0x7f;}
03E8 3D96 adiw R30,13
03EA 8081 ldd R24,z+0
03EC 8F77 andi R24,127
03EE 8083 std z+0,R24
03F0 .dbline 253
03F0 .dbline 254
03F0 ; break;
03F0 24C0 rjmp L103
03F2 L115:
03F2 .dbline 256
03F2 ; case 0x20: //"上一位"键处理
03F2 ; if(Flag==temp1)
03F2 8C2F mov R24,R28
03F4 9D2F mov R25,R29
03F6 0396 adiw R24,3
03F8 6817 cp R22,R24
03FA 7907 cpc R23,R25
03FC 79F4 brne L116
03FE .dbline 257
03FE ; {(*Flag)&=0x7f;
03FE .dbline 257
03FE E62F mov R30,R22
0400 F72F mov R31,R23
0402 8081 ldd R24,z+0
0404 8F77 andi R24,127
0406 8083 std z+0,R24
0408 .dbline 258
0408 ; Flag=temp1+13;
0408 6C2F mov R22,R28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -