📄 clock.s
字号:
subi R16,56 ; addi 200
rcall _write279
.dbline 151
; i=7;
ldi R24,7
mov R10,R24
.dbline 152
; write279(0x88,0x7f);
ldi R18,127
ldi R16,136
rcall _write279
.dbline 153
; time.second=(time.second/10)*10+key;
ldi R17,10
lds R16,_time
rcall div8s
mov R17,R16
ldi R16,10
rcall mpy8s
mov R2,R16
add R2,R20
sts _time,R2
.dbline 154
; }
.dbline 155
; break;
L60:
.dbline 159
L61:
.dbline 158
; }
; }
; while((PINC&0x02)==0)//按键释放检查
sbis 0x13,1
rjmp L60
.dbline 160
; ;
; }
L18:
.dbline 161
; while(key!=0x17);
cpi R20,23
breq X9
rjmp L21
X9:
.dbline 162
; write279(0x88,0xff);
ldi R18,255
ldi R16,136
rcall _write279
.dbline -2
.dbline 163
; }
L16:
rcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r i 10 c
.dbsym r key 20 c
.dbfunc s opentime _opentime fI
.even
_opentime::
.dbline -1
.dbline 166
; /* 设置定时器1及中断系统 */
; void opentime()
; {
.dbline 168
;
; TCNT1=0x85ee;
ldi R24,-31250
ldi R25,-123
sts 76+1,R25
sts 76,R24
.dbline 169
; TCCR1A=0;
clr R2
out 0x2f,R2
.dbline 170
; TCCR1B=0x04;
ldi R24,4
out 0x2e,R24
.dbline 171
; TCNT0=0x83;
ldi R24,131
out 0x32,R24
.dbline 172
; TCCR0=0x03;
ldi R24,3
out 0x33,R24
.dbline 173
; TIMSK=0x04;
ldi R24,4
out 0x39,R24
.dbline 174
; SREG|=0x80;
bset 7
.dbline -2
.dbline 175
; }
L63:
.dbline 0 ; func end
ret
.dbfunc s display _display fI
.even
_display::
.dbline -1
.dbline 178
; /* 显示刷新 */
; void display(void)
; {
.dbline 179
; write279(0xc8,time.second%10);
ldi R17,10
lds R16,_time
rcall mod8s
mov R18,R16
ldi R16,200
rcall _write279
.dbline 180
; write279(0xc9,time.second/10);
ldi R17,10
lds R16,_time
rcall div8s
mov R18,R16
ldi R16,201
rcall _write279
.dbline 181
; write279(0x92,1);
ldi R18,1
ldi R16,146
rcall _write279
.dbline 182
; write279(0xcb,time.minute%10);
ldi R17,10
lds R16,_time+1
rcall mod8s
mov R18,R16
ldi R16,203
rcall _write279
.dbline 183
; write279(0xcc,time.minute/10);
ldi R17,10
lds R16,_time+1
rcall div8s
mov R18,R16
ldi R16,204
rcall _write279
.dbline 184
; write279(0x95,1);
ldi R18,1
ldi R16,149
rcall _write279
.dbline 185
; write279(0xce,time.hour%10);
ldi R17,10
lds R16,_time+2
rcall mod8s
mov R18,R16
ldi R16,206
rcall _write279
.dbline 186
; write279(0xcf,time.hour/10);
ldi R17,10
lds R16,_time+2
rcall div8s
mov R18,R16
ldi R16,207
rcall _write279
.dbline -2
.dbline 187
; }
L64:
.dbline 0 ; func end
ret
.dbfunc s inctime _inctime fI
.even
_inctime::
.dbline -1
.dbline 190
; /* 正计时 */
; void inctime(void)
; {
.dbline 191
; if(time.second<59)
lds R24,_time
cpi R24,59
brge L70
.dbline 192
; time.second++;
lds R24,_time
subi R24,255 ; addi 1
sts _time,R24
rjmp L71
L70:
.dbline 194
; else
; {
.dbline 195
; time.second=0;
clr R2
sts _time,R2
.dbline 196
; if(time.minute<59)
lds R24,_time+1
cpi R24,59
brge L72
.dbline 197
; time.minute++;
lds R24,_time+1
subi R24,255 ; addi 1
sts _time+1,R24
rjmp L73
L72:
.dbline 199
; else
; {
.dbline 200
; time.minute=0;
clr R2
sts _time+1,R2
.dbline 201
; if(time.hour<23)
lds R24,_time+2
cpi R24,23
brge L77
.dbline 202
; time.hour++;
lds R24,_time+2
subi R24,255 ; addi 1
sts _time+2,R24
rjmp L78
L77:
.dbline 204
; else
; time.hour=0;
clr R2
sts _time+2,R2
L78:
.dbline 205
; }
L73:
.dbline 206
L71:
.dbline -2
.dbline 207
; }
; }
L69:
.dbline 0 ; func end
ret
.dbfunc s dectime _dectime fI
.even
_dectime::
.dbline -1
.dbline 210
; /* 倒计时 */
; void dectime(void)
; {
.dbline 211
; if(time.second>0)
clr R2
lds R3,_time
cp R2,R3
brge L83
.dbline 212
; time.second--;
lds R24,_time
subi R24,1
sts _time,R24
rjmp L84
L83:
.dbline 214
; else
; {
.dbline 215
; time.second=59;
ldi R24,59
sts _time,R24
.dbline 216
; if(time.minute>0)
clr R2
lds R3,_time+1
cp R2,R3
brge L85
.dbline 217
; time.minute--;
lds R24,_time+1
subi R24,1
sts _time+1,R24
rjmp L86
L85:
.dbline 219
; else
; {
.dbline 220
; time.minute=59;
ldi R24,59
sts _time+1,R24
.dbline 221
; if(time.hour>0)
clr R2
lds R3,_time+2
cp R2,R3
brge L90
.dbline 222
; time.hour--;
lds R24,_time+2
subi R24,1
sts _time+2,R24
rjmp L91
L90:
.dbline 224
; else
; time.hour=23;
ldi R24,23
sts _time+2,R24
L91:
.dbline 225
; }
L86:
.dbline 226
L84:
.dbline -2
.dbline 227
; }
; }
L82:
.dbline 0 ; func end
ret
.dbfunc s main _main fI
; temp -> R22
; bpflag -> R20
.even
_main::
.dbline -1
.dbline 231
; /*启动时为正计时,按shift键进行正计时和倒计时切换 */
; /*启动时允许整点报时,按0~F中任意键一次关闭,二次打开*/
; void main(void)
; {
.dbline 232
; unsigned char temp,bpflag=0;
clr R20
.dbline 233
; MCUCR=0x00;
clr R2
out 0x35,R2
.dbline 234
; DDRC=0b00011101;
ldi R24,29
out 0x14,R24
.dbline 235
; PORTC=0b00010001;
ldi R24,17
out 0x15,R24
.dbline 236
; delay_ms(30);
ldi R16,30
ldi R17,0
rcall _delay_ms
.dbline 237
; send_byte(0xa4);
ldi R16,164
rcall _send_byte
.dbline 238
; setcs;
sbi 0x15,4
.dbline 238
.dbline 239
; initdis();
rcall _initdis
.dbline 240
; opentime();
rcall _opentime
rjmp L97
L96:
.dbline 242
; while(1)
; {
.dbline 243
; if(flag==0x01)
lds R24,_flag
cpi R24,1
brne L99
.dbline 244
; {
.dbline 245
; if(dflag==0)
lds R2,_dflag
tst R2
brne L101
.dbline 246
; inctime();
rcall _inctime
rjmp L102
L101:
.dbline 248
; else
; dectime();
rcall _dectime
L102:
.dbline 249
; display();
rcall _display
.dbline 250
; flag=0;
clr R2
sts _flag,R2
.dbline 251
; }
L99:
.dbline 252
; if((PINC&0x02)==0)//检查shift按键
sbic 0x13,1
rjmp L103
.dbline 253
; {
.dbline 254
; send_byte(0x15);
ldi R16,21
rcall _send_byte
.dbline 255
; temp=receive_byte();
rcall _receive_byte
mov R2,R16
mov R3,R17
mov R22,R2
.dbline 256
; setcs;
sbi 0x15,4
.dbline 256
.dbline 257
; if(temp==0x17)
cpi R22,23
brne L105
.dbline 258
; {
.dbline 259
; if (dflag==0)
lds R2,_dflag
tst R2
brne L107
.dbline 260
; dflag=1;
ldi R24,1
sts _dflag,R24
rjmp L110
L107:
.dbline 262
; else
; dflag=0;
clr R2
sts _dflag,R2
.dbline 263
; }
rjmp L110
L105:
.dbline 265
; else
; bpflag^=0x01;
ldi R24,1
eor R20,R24
L109:
.dbline 267
L110:
.dbline 266
; while((PINC&0x02)==0)//按键释放检查
sbis 0x13,1
rjmp L109
.dbline 268
; ;
; }
L103:
.dbline 269
; if ((time.minute==0)&(bpflag==0))
lds R2,_time+1
tst R2
brne L115
ldi R24,1
ldi R25,0
mov R12,R24
mov R13,R25
rjmp L116
L115:
clr R12
clr R13
L116:
tst R20
brne L117
ldi R24,1
ldi R25,0
mov R10,R24
mov R11,R25
rjmp L118
L117:
clr R10
clr R11
L118:
mov R2,R12
mov R3,R13
and R2,R10
and R3,R11
tst R2
brne X11
tst R3
breq L112
X11:
.dbline 270
; TIMSK|=0x01; //整点报时
in R24,0x39
ori R24,1
out 0x39,R24
rjmp L113
L112:
.dbline 272
; else
; TIMSK&=0xfe;
in R24,0x39
andi R24,254
out 0x39,R24
L113:
.dbline 273
L97:
.dbline 241
rjmp L96
X10:
.dbline -2
.dbline 274
; }
; }
L95:
.dbline 0 ; func end
ret
.dbsym r temp 22 c
.dbsym r bpflag 20 c
.dbfunc s timer1_ovf _timer1_ovf fI
.even
_timer1_ovf::
st -y,R24
st -y,R25
in R24,0x3f
st -y,R24
.dbline -1
.dbline 276
; void timer1_ovf() //溢出中断子程序
; {
.dbline 277
; TCNT1=0x85ee;
ldi R24,-31250
ldi R25,-123
sts 76+1,R25
sts 76,R24
.dbline 278
; flag=0x01;
ldi R24,1
sts _flag,R24
.dbline -2
.dbline 279
; }
L119:
ld R24,y+
out 0x3f,R24
ld R25,y+
ld R24,y+
.dbline 0 ; func end
reti
.area bss(ram, con, rel)
.dbfile D:\sl279\8535\clock.c
L121:
.blkb 2
.area text(rom, con, rel)
.dbfile D:\sl279\8535\clock.c
.dbfunc s timer0_ovf _timer0_ovf fI
.dbsym s i L121 i
.even
_timer0_ovf::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 281
; void timer0_ovf()
; {
.dbline 283
; static unsigned int i;
; TCNT0=0x83;
ldi R24,131
out 0x32,R24
.dbline 284
; i++;
lds R25,L121+1
lds R24,L121
adiw R24,1
sts L121+1,R25
sts L121,R24
.dbline 285
; if(i<400)
cpi R24,144
ldi R30,1
cpc R25,R30
brsh L122
.dbline 286
; {
.dbline 287
; PORTC^=0X01;
ldi R24,1
in R2,0x15
eor R2,R24
out 0x15,R2
.dbline 288
; }
L122:
.dbline 289
ldi R24,800
ldi R25,3
lds R3,L121+1
lds R2,L121
cp R24,R2
cpc R25,R3
brsh L124
.dbline 290
clr R2
clr R3
sts L121+1,R3
sts L121,R2
L124:
.dbline -2
.dbline 291
; if(i>800)
; i=0;
; }
L120:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.area bss(ram, con, rel)
.dbfile D:\sl279\8535\clock.c
_time::
.blkb 3
.dbsym s time _time X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -