⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302_main.s

📁 16个单片机c语言实验程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -