📄 ds1302_main.s
字号:
xcall _s_ms
.dbline 115
; DDRD=0xff; //A端口变输出
ldi R24,255
out 0x11,R24
.dbline 116
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 117
; PORTA&=~(1<<EN); //EN=0
cbi 0x1b,7
.dbline 118
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 119
; return temp;
mov R16,R10
.dbline -2
L42:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r temp 10 c
.dbend
.dbfunc e WriteCGRAM _WriteCGRAM fV
; t -> R10,R11
; i -> R20,R21
; pBuffer -> R22,R23
; num -> R10,R11
.even
_WriteCGRAM::
xcall push_xgsetF00C
movw R22,R18
movw R10,R16
.dbline -1
.dbline 129
; }
;
; //=================================================
; // 描述: 写LCD内部CGRAM函数
; // 入口: ‘num’要写的数据个数
; // ‘pbuffer’要写的数据的首地址
; // 出口: 无
; //================================================
; void WriteCGRAM(uint num, const uint *pBuffer)
; {
.dbline 131
; uint i,t;
; writecom(0x40);
ldi R16,64
xcall _writecom
.dbline 132
; PORTA|=(1<<RS);
sbi 0x1b,5
.dbline 133
; PORTA&=~(1<<RW);
cbi 0x1b,6
.dbline 134
; for(i=num;i!=0;i--)
movw R20,R10
xjmp L47
L44:
.dbline 135
; {
.dbline 136
; t = *pBuffer;
movw R30,R22
ldd R10,z+0
ldd R11,z+1
.dbline 137
; PORTA|=(1<<EN);
sbi 0x1b,7
.dbline 138
; PORTD = t;
out 0x12,R10
.dbline 139
; PORTA&=~(1<<EN);
cbi 0x1b,7
.dbline 140
; pBuffer++;
subi R22,254 ; offset = 2
sbci R23,255
.dbline 141
; }
L45:
.dbline 134
subi R20,1
sbci R21,0
L47:
.dbline 134
cpi R20,0
cpc R20,R21
brne L44
X10:
.dbline -2
L43:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r t 10 i
.dbsym r i 20 i
.dbsym r pBuffer 22 pki
.dbsym r num 10 i
.dbend
.dbfunc e WriteMenu _WriteMenu fV
; t -> R10
; i -> R22
; pBuffer -> R20,R21
.even
_WriteMenu::
xcall push_xgsetF00C
movw R20,R16
.dbline -1
.dbline 151
;
; }
;
; //=================================================
; //描述:写菜单函数,本程序使用的LCD规格为 16 * 2
; //入口:菜单数组首地址
; //出口:无
; //=================================================
; void WriteMenu(const uchar *pBuffer)
; {
.dbline 153
; uchar i,t;
; writecom(0x80); //数据地址
ldi R16,128
xcall _writecom
.dbline 155
;
; PORTA|=(1<<RS);
sbi 0x1b,5
.dbline 156
; PORTA&=~(1<<RW);
cbi 0x1b,6
.dbline 157
; s_ms(50);
ldi R16,50
ldi R17,0
xcall _s_ms
.dbline 158
; for(i=0;i<16;i++)
clr R22
xjmp L52
L49:
.dbline 159
; {
.dbline 160
; t = *pBuffer;
movw R30,R20
ldd R10,z+0
.dbline 161
; PORTD = t;
out 0x12,R10
.dbline 162
; PORTA|=(1<<EN);
sbi 0x1b,7
.dbline 163
; s_ms(50);
ldi R16,50
ldi R17,0
xcall _s_ms
.dbline 164
; PORTA&=~(1<<EN);
cbi 0x1b,7
.dbline 165
; pBuffer++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 166
; }
L50:
.dbline 158
inc R22
L52:
.dbline 158
cpi R22,16
brlo L49
X11:
.dbline 167
; writecom(0xC0);
ldi R16,192
xcall _writecom
.dbline 169
;
; PORTA|=(1<<RS);
sbi 0x1b,5
.dbline 170
; PORTA&=~(1<<RW);
cbi 0x1b,6
.dbline 171
; s_ms(50);
ldi R16,50
ldi R17,0
xcall _s_ms
.dbline 172
; for(i=0;i<16;i++)
clr R22
xjmp L56
L53:
.dbline 173
; {
.dbline 174
; t = *pBuffer;
movw R30,R20
ldd R10,z+0
.dbline 175
; PORTD = t;
out 0x12,R10
.dbline 176
; PORTA|=(1<<EN);
sbi 0x1b,7
.dbline 177
; s_ms(50);
ldi R16,50
ldi R17,0
xcall _s_ms
.dbline 178
; PORTA&=~(1<<EN);
cbi 0x1b,7
.dbline 179
; pBuffer++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 180
; }
L54:
.dbline 172
inc R22
L56:
.dbline 172
cpi R22,16
brlo L53
X12:
.dbline -2
L48:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r t 10 c
.dbsym r i 22 c
.dbsym r pBuffer 20 pkc
.dbend
.dbfunc e WriteNum _WriteNum fV
; num -> R20,R21
; col -> R10,R11
; row -> R22,R23
.even
_WriteNum::
xcall push_xgsetF00C
movw R10,R18
movw R22,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 190
; }
; //====================================================
; // 描述:在任意位置写数字函数
; // 入口:’row‘表示要写数字所在的行地址,只能为1或2
; // ’col‘表示要写数字所在的列地址,只能为0--15
; // ‘num’表示要写的数字,只能为0--9
; // 出口:无
; //===================================================
; void WriteNum(uint row,uint col,uint num)
; {
.dbline 191
; if (row == 1) row = 0x80 + col;
cpi R22,1
ldi R30,0
cpc R23,R30
brne L58
X13:
.dbline 191
movw R22,R10
subi R22,128 ; offset = 128
sbci R23,255
xjmp L59
L58:
.dbline 192
; else row = 0xC0 + col;
movw R22,R10
subi R22,64 ; offset = 192
sbci R23,255
L59:
.dbline 193
; writecom(row);
mov R16,R22
xcall _writecom
.dbline 194
; if (num<=0 | num>9) num =0x30;
cpi R20,0
cpc R20,R21
brne L62
X14:
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L63
L62:
clr R10
clr R11
L63:
ldi R24,9
ldi R25,0
cp R24,R20
cpc R25,R21
brsh L64
X15:
ldi R22,1
ldi R23,0
xjmp L65
L64:
clr R22
clr R23
L65:
movw R2,R10
or R2,R22
or R3,R23
tst R2
brne X16
tst R3
breq L60
X16:
.dbline 194
ldi R20,48
ldi R21,0
xjmp L61
L60:
.dbline 195
; else num = 0x30 + num;
subi R20,208 ; offset = 48
sbci R21,255
L61:
.dbline 197
;
; PORTA|=(1<<RS);
sbi 0x1b,5
.dbline 198
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 199
; PORTA&=~(1<<RW);
cbi 0x1b,6
.dbline 200
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 201
; PORTD = num;
out 0x12,R20
.dbline 202
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 203
; PORTA|=(1<<EN);
sbi 0x1b,7
.dbline 204
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 205
; PORTA&=~(1<<EN);
cbi 0x1b,7
.dbline 206
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline -2
L57:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r num 20 i
.dbsym r col 10 i
.dbsym r row 22 i
.dbend
.dbfunc e WriteChar _WriteChar fV
; t -> R12
; i -> R10
; pBuffer -> R20,R21
; num -> y+8
; col -> R10
; row -> R22
.even
_WriteChar::
xcall push_xgsetF03C
mov R10,R18
mov R22,R16
ldd R20,y+10
ldd R21,y+11
.dbline -1
.dbline 216
; }
; //================================================================
; // 描述:在任意位置写任意多个字符
; // 入口:’row‘要写的字符所在的行,只能为1或2;
; // ‘col’要写的字符所在的列,只能为0---15
; // ‘num’要写字符的个数
; // ‘pbuffer’要写字符的首地址
; //==================================================================
; void WriteChar(uchar row,uchar col,uint num,uchar *pBuffer)
; {
.dbline 218
; uchar i,t;
; if (row == 1) row = 0x80 + col;
cpi R22,1
brne L67
X17:
.dbline 218
mov R22,R10
subi R22,128 ; addi 128
xjmp L68
L67:
.dbline 219
; else row = 0xC0 + col;
mov R22,R10
subi R22,64 ; addi 192
L68:
.dbline 220
; writecom(row);
mov R16,R22
xcall _writecom
.dbline 224
; //if (num<=0 | num>9) num =0x30;
; //else num = 0x30 + num;
;
; PORTA|=(1<<RS);
sbi 0x1b,5
.dbline 225
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 226
; PORTA&=~(1<<RW);
cbi 0x1b,6
.dbline 227
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 228
; for(i=num;i!=0;i--)
ldd R10,y+8
ldd R11,y+9
xjmp L72
L69:
.dbline 229
; {
.dbline 230
; t = *pBuffer;
movw R30,R20
ldd R12,z+0
.dbline 231
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 232
; PORTD = t;
out 0x12,R12
.dbline 233
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 234
; PORTA|=(1<<EN);
sbi 0x1b,7
.dbline 235
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 236
; PORTA&=~(1<<EN);
cbi 0x1b,7
.dbline 237
; s_ms(500);
ldi R16,500
ldi R17,1
xcall _s_ms
.dbline 238
; pBuffer++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 239
; }
L70:
.dbline 228
dec R10
L72:
.dbline 228
tst R10
brne L69
X18:
.dbline -2
L66:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r t 12 c
.dbsym r i 10 c
.dbsym r pBuffer 20 pc
.dbsym l num 8 i
.dbsym r col 10 c
.dbsym r row 22 c
.dbend
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\1602.h
_aa::
.blkb 1
.area idata
.byte 45
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\1602.h
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.dbsym e aa _aa A[1:1]c
_time_data::
.blkb 2
.area idata
.byte 33,17
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.blkb 2
.area idata
.byte 17,18
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.blkb 2
.area idata
.byte 24,'R
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.blkb 2
.area idata
.byte 0,2
.area data(ram, con, rel)
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.dbsym e time_data _time_data A[8:8]c
.area text(rom, con, rel)
.dbfile E:\16实验程序\ds1302\ds1302_main.c
.dbfunc e s_1ms _s_1ms fV
; aa -> R20,R21
; ms -> R16,R17
.even
_s_1ms::
st -y,R20
st -y,R21
.dbline -1
.dbline 14
.dbline 16
xjmp L77
L74:
.dbline 17
.dbline 18
clr R20
clr R21
xjmp L81
L78:
.dbline 19
.dbline 19
.dbline 19
L79:
.dbline 18
subi R20,255 ; offset = 1
sbci R21,255
L81:
.dbline 18
ldi R24,2000
ldi R25,7
cp R24,R20
cpc R25,R21
brsh L78
X19:
.dbline 20
L75:
.dbline 16
subi R16,1
sbci R17,0
L77:
.dbline 16
cpi R16,1
ldi R30,0
cpc R17,R30
brsh L74
X20:
.dbline -2
L73:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r aa 20 i
.dbsym r ms 16 i
.dbend
.dbfunc e main _main fV
; temp -> R20
.even
_main::
sbiw R28,4
.dbline -1
.dbline 25
.dbline 28
ldi R24,255
out 0x1b,R24
.dbline 29
out 0x1a,R24
.dbline 30
ldi R24,240
out 0x18,R24
.dbline 31
ldi R24,255
out 0x17,R24
.dbline 32
ldi R24,127
out 0x15,R24
.dbline 33
ldi R24,128
out 0x14,R24
.dbline 34
clr R2
out 0x12,R2
.dbline 35
ldi R24,255
out 0x11,R24
.dbline 37
ldi R16,20
ldi R17,0
xcall _s_1ms
.dbline 39
xcall _LcdInit
.dbline 41
xcall _ds1302_init
.dbline 42
ldi R16,10
ldi R17,0
xcall _s_1ms
.dbline 44
ldi R16,<_time_data
ldi R17,>_time_data
xcall _ds1302_write_time
xjmp L84
L83:
.dbline 46
.dbline 47
ldi R16,100
ldi R17,0
xcall _s_1ms
.dbline 49
ldi R16,<_time_data
ldi R17,>_time_data
xcall _ds1302_read_time
.dbline 51
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,3
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 52
clr R2
clr R3
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 53
lds R20,_time_data+1
swap R20
andi R20,#0x0F
.dbline 54
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,5
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 55
lds R20,_time_data+1
andi R20,15
.dbline 56
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,6
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 57
ldi R24,<_aa
ldi R25,>_aa
std y+3,R25
std y+2,R24
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,7
ldi R16,1
xcall _WriteChar
.dbline 59
lds R20,_time_data+2
swap R20
andi R20,#0x0F
.dbline 60
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,8
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 61
lds R20,_time_data+2
andi R20,15
.dbline 62
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,9
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 63
ldi R24,<_aa
ldi R25,>_aa
std y+3,R25
std y+2,R24
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,10
ldi R16,1
xcall _WriteChar
.dbline 65
lds R20,_time_data+3
swap R20
andi R20,#0x0F
.dbline 66
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,11
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 67
lds R20,_time_data+3
andi R20,15
.dbline 68
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,12
ldi R19,0
ldi R16,1
ldi R17,0
xcall _WriteNum
.dbline 70
lds R20,_time_data+4
swap R20
andi R20,#0x0F
.dbline 71
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,4
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 72
lds R20,_time_data+4
andi R20,15
.dbline 73
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,5
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 74
ldi R24,<_aa
ldi R25,>_aa
std y+3,R25
std y+2,R24
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,6
ldi R16,2
xcall _WriteChar
.dbline 76
lds R20,_time_data+5
swap R20
andi R20,#0x0F
.dbline 77
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,7
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 78
lds R20,_time_data+5
andi R20,15
.dbline 79
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,8
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 80
ldi R24,<_aa
ldi R25,>_aa
std y+3,R25
std y+2,R24
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,9
ldi R16,2
xcall _WriteChar
.dbline 82
lds R20,_time_data+6
swap R20
andi R20,#0x0F
.dbline 83
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,10
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 84
lds R20,_time_data+6
andi R20,15
.dbline 85
mov R2,R20
clr R3
std y+1,R3
std y+0,R2
ldi R18,11
ldi R19,0
ldi R16,2
ldi R17,0
xcall _WriteNum
.dbline 86
L84:
.dbline 46
xjmp L83
X21:
.dbline -2
L82:
.dbline 0 ; func end
adiw R28,4
ret
.dbsym r temp 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -