📄 1602_8563.s
字号:
.dbline 58
L56:
.dbline 58
L57:
.dbline 58
in R2,0x36
sbrs R2,7
rjmp L56
.dbline 58
.dbline 58
.dbline 59
in R24,0x1
andi R24,248
cpi R24,8
breq L59
.dbline 59
clr R16
xjmp L55
L59:
.dbline 60
ldi R16,162
xcall _write_tim
.dbline 61
ldi R16,2
xcall _write_tim
.dbline 63
ldi R24,164
out 0x36,R24
.dbline 64
L61:
.dbline 64
L62:
.dbline 64
in R2,0x36
sbrs R2,7
rjmp L61
.dbline 64
.dbline 64
.dbline 65
in R24,0x1
andi R24,248
cpi R24,16
breq L64
.dbline 65
clr R16
xjmp L55
L64:
.dbline 66
ldi R16,163
xcall _write_tim
.dbline 68
xcall _read_tim
mov R24,R16
andi R24,127
sts _timer,R24
.dbline 69
xcall _read_tim
mov R24,R16
andi R24,127
sts _timer+1,R24
.dbline 70
xcall _read_tim
mov R24,R16
andi R24,63
sts _timer+2,R24
.dbline 71
xcall _read_tim
mov R24,R16
andi R24,63
sts _timer+3,R24
.dbline 72
xcall _read_tim
mov R24,R16
andi R24,7
sts _timer+4,R24
.dbline 73
tst R24
brne L70
.dbline 73
ldi R24,7
sts _timer+4,R24
L70:
.dbline 74
xcall _read_tim
sts _timer+5,R16
.dbline 75
sbrc R16,7
rjmp L75
.dbline 76
ldi R24,32
sts _timer+7,R24
xjmp L76
L75:
.dbline 77
ldi R24,25
sts _timer+7,R24
L76:
.dbline 78
lds R24,_timer+5
andi R24,31
sts _timer+5,R24
.dbline 79
xcall _read_tim
sts _timer+6,R16
.dbline 80
ldi R24,148
out 0x36,R24
.dbline 81
ldi R16,1
.dbline -2
L55:
.dbline 0 ; func end
ret
.dbend
.dbfunc e write_timer _write_timer fc
.even
_write_timer::
.dbline -1
.dbline 88
.dbline 89
ldi R24,164
out 0x36,R24
.dbline 90
L84:
.dbline 90
L85:
.dbline 90
in R2,0x36
sbrs R2,7
rjmp L84
.dbline 90
.dbline 90
.dbline 91
in R24,0x1
andi R24,248
cpi R24,8
breq L87
.dbline 91
clr R16
xjmp L83
L87:
.dbline 92
ldi R16,162
xcall _write_tim
.dbline 93
clr R16
xcall _write_tim
.dbline 94
ldi R16,32
xcall _write_tim
.dbline 95
clr R16
xcall _write_tim
.dbline 96
clr R16
xcall _write_tim
.dbline 97
lds R16,_timer+1
xcall _write_tim
.dbline 98
lds R16,_timer+2
xcall _write_tim
.dbline 99
lds R16,_timer+3
xcall _write_tim
.dbline 100
lds R16,_timer+4
xcall _write_tim
.dbline 101
lds R16,_timer+5
xcall _write_tim
.dbline 102
lds R16,_timer+6
xcall _write_tim
.dbline 103
ldi R24,148
out 0x36,R24
.dbline 104
ldi R16,1
.dbline -2
L83:
.dbline 0 ; func end
ret
.dbend
.dbfunc e start_timer _start_timer fc
.even
_start_timer::
.dbline -1
.dbline 111
.dbline 112
ldi R24,164
out 0x36,R24
.dbline 113
L96:
.dbline 113
L97:
.dbline 113
in R2,0x36
sbrs R2,7
rjmp L96
.dbline 113
.dbline 113
.dbline 114
in R24,0x1
andi R24,248
cpi R24,8
breq L99
.dbline 114
clr R16
xjmp L95
L99:
.dbline 115
ldi R16,162
xcall _write_tim
.dbline 116
clr R16
xcall _write_tim
.dbline 117
clr R16
xcall _write_tim
.dbline 118
ldi R24,148
out 0x36,R24
.dbline 119
ldi R16,1
.dbline -2
L95:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer_lcd _timer_lcd fV
.even
_timer_lcd::
.dbline -1
.dbline 126
.dbline 127
ldi R18,4
ldi R16,1
xcall _locate
.dbline 129
lds R16,_timer+7
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 130
lds R16,_timer+7
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 131
lds R16,_timer+6
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 132
lds R16,_timer+6
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 133
ldi R16,47
xcall _lcd_da
.dbline 134
lds R16,_timer+5
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 135
lds R16,_timer+5
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 136
ldi R16,47
xcall _lcd_da
.dbline 137
lds R16,_timer+3
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 138
lds R16,_timer+3
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 140
ldi R18,2
ldi R16,2
xcall _locate
.dbline 142
lds R16,_timer+2
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 143
lds R16,_timer+2
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 144
ldi R16,58
xcall _lcd_da
.dbline 145
lds R16,_timer+1
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 146
lds R16,_timer+1
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 147
ldi R16,58
xcall _lcd_da
.dbline 148
lds R16,_timer
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 149
lds R16,_timer
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 151
;
; lcd_da(20); //时间与星期间留1空格
ldi R16,20
xcall _lcd_da
.dbline 152
; lcd_da('W'); //星期的前导字
ldi R16,87
xcall _lcd_da
.dbline 153
; lcd_da('e');
ldi R16,101
xcall _lcd_da
.dbline 154
; lcd_da('e');
ldi R16,101
xcall _lcd_da
.dbline 155
; lcd_da('k');
ldi R16,107
xcall _lcd_da
.dbline 156
; lcd_da((timer[4]&0x0f)+0x30); //星期数据
lds R16,_timer+4
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline -2
L101:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 161
; }
;
; //定时器1:每秒从8563中读取4次数据,更新显示
; void timer1_init(void) //定时器1初始化:250毫秒定时,预分频256
; {
.dbline 162
; TCCR1B = 0x00; //停止定时器
clr R2
out 0x2e,R2
.dbline 163
; TCNT1H = 0x8F; //初值高字节
ldi R24,143
out 0x2d,R24
.dbline 164
; TCNT1L = 0x81; //定时初值低字节
ldi R24,129
out 0x2c,R24
.dbline 165
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 166
; TCCR1B = 0x03; //启动定时器
ldi R24,3
out 0x2e,R24
.dbline -2
L115:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile D:\PCF8563\1602_time\1602_8563.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
xcall push_lset
.dbline -1
.dbline 171
; }
;
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void) //定时器1中断入口:250MS中断一次
; {
.dbline 172
; TCNT1H = 0x8F; //重装初值
ldi R24,143
out 0x2d,R24
.dbline 173
; TCNT1L = 0x81;
ldi R24,129
out 0x2c,R24
.dbline 174
; read_timer(); //读出当前时钟
xcall _read_timer
.dbline 175
; timer_lcd(); //显示数据转换
xcall _timer_lcd
.dbline -2
L116:
xcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e set_xs1 _set_xs1 fV
; i -> R20
.even
_set_xs1::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 182
; }
;
; /**********************************
; * 调整显示函数1 *
; **********************************/
; void set_xs1(uchar i)
; {
.dbline 183
; lcd_da((timer[i]>>4)+0x30); //显示数据
ldi R24,<_timer
ldi R25,>_timer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 184
; lcd_da((timer[i]&0x0f)+0x30);
ldi R24,<_timer
ldi R25,>_timer
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline -2
L117:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc e set_xs2 _set_xs2 fV
; data -> R20
.even
_set_xs2::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 191
; }
;
; /**********************************
; * 调整显示函数2 *
; **********************************/
; void set_xs2(uchar data)
; {
.dbline 192
; lcd_da((data>>4)+0x30); //显示数据
mov R16,R20
swap R16
andi R16,#0x0F
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 193
; lcd_da((data&0x0f)+0x30);
mov R16,R20
andi R16,15
subi R16,208 ; addi 48
xcall _lcd_da
.dbline 194
; lcd(0x20);
ldi R16,32
xcall _lcd
.dbline -2
L118:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r data 20 c
.dbend
.dbfunc e main _main fV
; set_time -> R22
; set_bh -> y+2
; set_flag -> y+1
; a1 -> y+0
; a -> R20
.even
_main::
sbiw R28,5
.dbline -1
.dbline 201
; }
;
; /**********************************
; * 程序主函数 *
; **********************************/
; void main(void)
; {
.dbline 202
; uchar set_flag=0; //调整与正常工作标志
clr R0
std y+1,R0
.dbline 204
; uchar set_time; //调整数据类型标志
; uchar set_bh=0; //调整变化标志
std y+2,R0
.dbline 207
; uchar a,a1;
;
; port_init();
xcall _port_init
.dbline 208
; LED_ON; //开LCD背光
sbi 0x18,3
.dbline 209
; lcd_init();
xcall _lcd_init
.dbline 210
; delay_ms(500);
ldi R16,500
ldi R17,1
xcall _delay_ms
.dbline 211
; tonghe();
xcall _tonghe
.dbline 212
; delay_ms(2000);
ldi R16,2000
ldi R17,7
xcall _delay_ms
.dbline 214
;
; Twi_Init();
xcall _Twi_Init
.dbline 215
; delay_ms(100);
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 216
; CLI(); //关总中断
cli
.dbline 217
; timer1_init(); //定时器1初始化
xcall _timer1_init
.dbline 218
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 219
; GICR = 0x00;
out 0x3b,R2
.dbline 220
; TIMSK = 0x04; //开放定时器0中断和比较中断
ldi R24,4
out 0x39,R24
.dbline 221
; SEI(); //开总中断
sei
.dbline 223
;
; cls();
xcall _cls
.dbline 224
; delay_ms(50);
ldi R16,50
ldi R17,0
xcall _delay_ms
xjmp L121
L120:
.dbline 227
;
; while(1)
; {
.dbline 228
; a=KEY_RD;
in R24,0x13
lsr R24
ori R24,241
in R20,0x10
lsr R20
lsr R20
ori R20,254
and R20,R24
com R20
.dbline 229
; if(a!=0)
brne X9
xjmp L123
X9:
.dbline 230
; {
.dbline 231
; delay_ms(20);
ldi R16,20
ldi R17,0
xcall _delay_ms
.dbline 232
; a1=KEY_RD;
in R24,0x13
lsr R24
ori R24,241
in R25,0x10
lsr R25
lsr R25
ori R25,254
and R25,R24
com R25
std y+0,R25
.dbline 233
; if(a1==a)
mov R0,R25
cp R25,R20
breq X10
xjmp L284
X10:
.dbline 234
; {
.dbline 235
; switch(a)
mov R14,R20
clr R15
movw R24,R14
cpi R24,1
ldi R30,0
cpc R25,R30
breq L130
cpi R24,2
ldi R30,0
cpc R25,R30
breq L136
cpi R24,4
ldi R30,0
cpc R25,R30
brne X11
xjmp L154
X11:
cpi R24,8
ldi R30,0
cpc R25,R30
brne X12
xjmp L216
X12:
xjmp L284
X4:
.dbline 236
; {
L130:
.dbline 238
; case 0x01:
; spk(10,1);
ldi R18,1
ldi R16,10
xcall _spk
.dbline 239
; if(set_flag==0)
ldd R0,y+1
tst R0
brne L131
.dbline 240
; {
.dbline 241
; TCCR1B=0x00;
clr R2
out 0x2e,R2
.dbline 242
; LED_ON;
sbi 0x18,3
.dbline 243
; set_flag=1;
clr R0
inc R0
std y+1,R0
.dbline 244
; cls();
xcall _cls
.dbline 245
; locate(1,4); //显示“时间调整”
ldi R18,4
ldi R16,1
xcall _locate
.dbline 246
; xs_lcd("SET:");
ldi R16,<L133
ldi R17,>L133
xcall _xs_lcd
.dbline 247
; }
xjmp L284
L131:
.dbline 249
; else
; {
.dbline 250
; TCCR1B=0x04; //开启时钟
ldi R24,4
out 0x2e,R24
.dbline 251
; set_flag=0;
clr R0
std y+1,R0
.dbline 252
; if(set_bh==1)
ldd R24,y+2
cpi R24,1
breq X13
xjmp L284
X13:
.dbline 253
; {
.dbline 254
; write_timer(); //写入新时间
xcall _write_timer
.dbline 255
; set_bh=0;
clr R0
std y+2,R0
.dbline 256
; }
.dbline 257
; }
.dbline 258
; break;
xjmp L284
L136:
.dbline 260
; case 0x02:
; if(set_flag==1)
ldd R24,y+1
cpi R24,1
breq X14
xjmp L284
X14:
.dbline 261
; {
.dbline 262
; spk(10,1);
ldi R18,1
ldi R16,10
xcall _spk
.dbline 263
; set_time++;
inc R22
.dbline 264
; locate(2,2); //显示待调整的数据
ldi R18,2
ldi R16,2
xcall _locate
.dbline 265
; switch(set_time)
mov R2,R22
clr R3
std y+4,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -