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

📄 ds1302a.lst

📁 基于avr单片机上的ds1302实时时钟源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
   1               		.file	"ds1302a.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__tmp_reg__ = 0
   6               	__zero_reg__ = 1
   7               		.global __do_copy_data
   8               		.global __do_clear_bss
  10               		.text
  11               	.Ltext0:
  70               	.global	nop
  72               	nop:
   1:../ds1302a/ds1302a.c **** #include <avr/io.h>
   2:../ds1302a/ds1302a.c **** #include <util/delay.h>
   3:../ds1302a/ds1302a.c **** #define uchar unsigned char 
   4:../ds1302a/ds1302a.c **** #define uint unsigned int 
   5:../ds1302a/ds1302a.c **** #define	T_CLK 7
   6:../ds1302a/ds1302a.c **** #define	T_IO  6
   7:../ds1302a/ds1302a.c **** #define	T_RST 5
   8:../ds1302a/ds1302a.c **** /******************************************************************** */
   9:../ds1302a/ds1302a.c **** #define	SETBIT(x,y) (x|=(1<<y))      //set bit y in byte x
  10:../ds1302a/ds1302a.c **** #define	CLRBIT(x,y) (x&=(~(1<<y)))   //clear bit y in byte x
  11:../ds1302a/ds1302a.c **** #define	CHKBIT(x,y) (x&(1<<y))       //check bit y in byte x
  12:../ds1302a/ds1302a.c **** /******************************************************************** */
  13:../ds1302a/ds1302a.c ****     void ds1302_write(unsigned char , unsigned char);
  14:../ds1302a/ds1302a.c **** 	uchar year=0;
  15:../ds1302a/ds1302a.c **** 	uchar month=0;
  16:../ds1302a/ds1302a.c **** 	uchar day=0;
  17:../ds1302a/ds1302a.c **** 	uchar week=0;
  18:../ds1302a/ds1302a.c **** 	uchar hour=0;
  19:../ds1302a/ds1302a.c **** 	uchar minute=0;
  20:../ds1302a/ds1302a.c **** 	uchar second=0;
  21:../ds1302a/ds1302a.c **** 	unsigned char  disp_table[16] ={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  22:../ds1302a/ds1302a.c ****                          0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  23:../ds1302a/ds1302a.c ****  /*
  24:../ds1302a/ds1302a.c **** 		0x3f,
  25:../ds1302a/ds1302a.c **** 		0x06, 
  26:../ds1302a/ds1302a.c **** 		0x5b, 
  27:../ds1302a/ds1302a.c **** 		0x4f,  
  28:../ds1302a/ds1302a.c **** 		0x66,  
  29:../ds1302a/ds1302a.c **** 		0x6d,
  30:../ds1302a/ds1302a.c **** 		0x7d,
  31:../ds1302a/ds1302a.c **** 		0x07, 
  32:../ds1302a/ds1302a.c ****         0x7f,
  33:../ds1302a/ds1302a.c **** 		0x6f,
  34:../ds1302a/ds1302a.c **** 		0x77,
  35:../ds1302a/ds1302a.c **** 		0x7c,
  36:../ds1302a/ds1302a.c **** 		0x39,
  37:../ds1302a/ds1302a.c **** 		0x5e,
  38:../ds1302a/ds1302a.c **** 		0x79,
  39:../ds1302a/ds1302a.c **** 		0x71};
  40:../ds1302a/ds1302a.c **** */
  41:../ds1302a/ds1302a.c **** void nop(void)
  42:../ds1302a/ds1302a.c **** {
  73               	* prologue end (size=0) */
  74               	/* epilogue: frame size=0 */
  75               		ret
  76               	/* epilogue end (size=1) */
  77               	/* function nop size 1 (0) */
  79 0000 0895      	.Lscope1:
  82               	.global	ds1302_write_a_byte
  84               	ds1302_write_a_byte:
  86               	.LM1:
  87               	.LFBB2:
  88               	/* prologue: frame size=0 */
  43:../ds1302a/ds1302a.c ****  char i;
  44:../ds1302a/ds1302a.c ****  for (i=0;i<1;i++)
  45:../ds1302a/ds1302a.c ****   ;
  46:../ds1302a/ds1302a.c **** }
  47:../ds1302a/ds1302a.c **** 
  48:../ds1302a/ds1302a.c **** void initialize_1302(void)
  49:../ds1302a/ds1302a.c **** {
  50:../ds1302a/ds1302a.c ****  ds1302_write(0x8e,0x00);
  51:../ds1302a/ds1302a.c ****  ds1302_write(0x90,0xA5);
  52:../ds1302a/ds1302a.c ****  ds1302_write(0x80,0x00);
  53:../ds1302a/ds1302a.c **** }
  54:../ds1302a/ds1302a.c **** /********************************************************************
  55:../ds1302a/ds1302a.c **** * 名称: ds1302_write_a_byte
  56:../ds1302a/ds1302a.c **** * 说明:
  57:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入1Byte数据
  58:../ds1302a/ds1302a.c **** * 调用:
  59:../ds1302a/ds1302a.c **** * 输入: ucDa 写入的数据
  60:../ds1302a/ds1302a.c **** * 返回值: 无
  61:../ds1302a/ds1302a.c **** ***********************************************************************/
  62:../ds1302a/ds1302a.c **** void ds1302_write_a_byte(unsigned char ucDa)
  63:../ds1302a/ds1302a.c **** {
  89               	(size=0) */
  90               		ldi r25,lo8(8)
  91               	.L4:
  93               	.LM2:
  94 0002 98E0      		cbi 50-0x20,7
  64:../ds1302a/ds1302a.c ****     unsigned char i;
  65:../ds1302a/ds1302a.c ****     for(i=8; i>0; i--)
  66:../ds1302a/ds1302a.c ****     {
  67:../ds1302a/ds1302a.c **** 	    CLRBIT(PORTD,T_CLK);
  96               	sbrs r24,0
  97               		rjmp .L5
  98 0004 9798      		sbi 50-0x20,6
  68:../ds1302a/ds1302a.c **** 		if (ucDa&1) SETBIT(PORTD,T_IO);
  99               	mp .L7
 100               	.L5:
 102 0008 00C0      	.LM4:
 103 000a 969A      		cbi 50-0x20,6
 104 000c 00C0      	.L7:
  69:../ds1302a/ds1302a.c **** 		    else CLRBIT(PORTD,T_IO);
 106               	sbi 50-0x20,7
 108 000e 9698      	.LM6:
 109               		subi r25,lo8(-(-1))
  70:../ds1302a/ds1302a.c **** 		SETBIT(PORTD,T_CLK);
 110               	q .L10
 112 0010 979A      	.LM7:
 113               		lsr r24
 114               		rjmp .L4
 115 0012 9150      	.L10:
 116 0014 01F0      		ret
  71:../ds1302a/ds1302a.c **** 		ucDa>>=1;
 117               	ogue: frame size=0 */
 118               	/* epilogue: noreturn */
 119 0016 8695      	/* epilogue end (size=0) */
 120 0018 00C0      	/* function ds1302_write_a_byte size 14 (14) */
 125               	.Lscope2:
 127               	.global	ds1302_read_a_byte
 129               	ds1302_read_a_byte:
 131               	.LM8:
 132               	.LFBB3:
 133               	/* prologue: frame size=0 */
 134               	/* prologue end (size=0) */
  72:../ds1302a/ds1302a.c ****     }
  73:../ds1302a/ds1302a.c **** }
  74:../ds1302a/ds1302a.c **** 
  75:../ds1302a/ds1302a.c **** /********************************************************************
  76:../ds1302a/ds1302a.c **** *
  77:../ds1302a/ds1302a.c **** * 名称: unsigned char ds1302_read_a_byte
  78:../ds1302a/ds1302a.c **** * 说明:
  79:../ds1302a/ds1302a.c **** * 功能: 从DS1302读取1Byte数据
  80:../ds1302a/ds1302a.c **** * 调用:
  81:../ds1302a/ds1302a.c **** * 输入:
  82:../ds1302a/ds1302a.c **** * 返回值: t
  83:../ds1302a/ds1302a.c **** ***********************************************************************/
  84:../ds1302a/ds1302a.c **** unsigned char ds1302_read_a_byte(void)
  85:../ds1302a/ds1302a.c **** {
 136               	6
 138               	.LM10:
 139               		cbi 50-0x20,6
 140               		ldi r25,lo8(8)
  86:../ds1302a/ds1302a.c ****     unsigned char i,t;
  87:../ds1302a/ds1302a.c **** 	CLRBIT(DDRD,T_IO);
 141               	
 143 001c 8E98      	.LM11:
  88:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_IO);
 144               	sr r24
 146 001e 9698      	.LM12:
 147 0020 98E0      		sbi 50-0x20,7
  89:../ds1302a/ds1302a.c ****     for(i=8; i>0; i--)
  90:../ds1302a/ds1302a.c ****     {
  91:../ds1302a/ds1302a.c ****         t>>=1;
 149               	:
 150               		cbi 50-0x20,7
  92:../ds1302a/ds1302a.c **** 		SETBIT(PORTD,T_CLK);
 152               	14:
 153               		sbis 48-0x20,6
 154 0024 979A      		rjmp .L13
  93:../ds1302a/ds1302a.c **** 		nop();
  94:../ds1302a/ds1302a.c **** 		CLRBIT(PORTD,T_CLK);
 155               	i r24,lo8(-128)
 156               		rjmp .L15
 157 0026 9798      	.L13:
  95:../ds1302a/ds1302a.c **** 		nop();
  96:../ds1302a/ds1302a.c **** 		if(CHKBIT(PIND,T_IO)) t|=0x80;
 158               	tabn	68,0,97,.LM15-.LFBB3
 159               	.LM15:
 160 0028 869B      		andi r24,lo8(127)
 161 002a 00C0      	.L15:
 163 002e 00C0      	.LM16:
 164               		subi r25,lo8(-(-1))
  97:../ds1302a/ds1302a.c **** 		else t&= 0x7f; 
 165               	L12
 167 0030 8F77      	.LM17:
 168               		sbi 49-0x20,6
 170               	.LM18:
 171 0032 9150      		ldi r25,lo8(0)
 172 0034 01F4      	/* epilogue: frame size=0 */
  98:../ds1302a/ds1302a.c **** 	}
  99:../ds1302a/ds1302a.c ****     SETBIT(DDRD,T_IO);
 173               	epilogue end (size=1) */
 174               	/* function ds1302_read_a_byte size 17 (16) */
 100:../ds1302a/ds1302a.c **** 	return(t);
 101:../ds1302a/ds1302a.c **** }
 176               	tabs	"i:r(0,11)",64,0,0,25
 180 003a 0895      	.Lscope3:
 184               	.global	ds1302_write
 186               	ds1302_write:
 188               	.LM19:
 189               	.LFBB4:
 190               	/* prologue: frame size=0 */
 191               		push r17
 192               	/* prologue end (size=1) */
 193               		mov r17,r22
 102:../ds1302a/ds1302a.c **** 
 103:../ds1302a/ds1302a.c **** 
 104:../ds1302a/ds1302a.c **** /********************************************************************
 105:../ds1302a/ds1302a.c **** * 名称: write_1302
 106:../ds1302a/ds1302a.c **** * 说明: 先写地址,后写命令/数据
 107:../ds1302a/ds1302a.c **** * 功能: 往DS1302写入数据
 108:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte()
 109:../ds1302a/ds1302a.c **** * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
 110:../ds1302a/ds1302a.c **** * 返回值: 无
 111:../ds1302a/ds1302a.c **** ***********************************************************************/
 112:../ds1302a/ds1302a.c **** void ds1302_write(unsigned char ucAddr, unsigned char ucDa)
 113:../ds1302a/ds1302a.c **** {
 195               	,5
 197               	.LM21:
 198               		cbi 50-0x20,7
 200               	.LM22:
 201 003e 162F      		sbi 50-0x20,5
 114:../ds1302a/ds1302a.c ****     //DDRC=0xff;
 115:../ds1302a/ds1302a.c ****     CLRBIT(PORTD,T_RST);     //T_RST=0
 202               		68,0,121,.LM23-.LFBB4
 203               	.LM23:
 204 0040 9598      		rcall ds1302_write_a_byte
 116:../ds1302a/ds1302a.c **** 	//;;nop();
 117:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);	 //T_CLK=0;
 205               	tabn	68,0,122,.LM24-.LFBB4
 206               	.LM24:
 207 0042 9798      		cbi 50-0x20,7
 118:../ds1302a/ds1302a.c **** 	//;;
 119:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_RST);	 //T_RST=1
 208               	tabn	68,0,123,.LM25-.LFBB4
 209               	.LM25:
 210 0044 959A      		mov r24,r17
 120:../ds1302a/ds1302a.c ****     nop();
 121:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(ucAddr); /* 地址,命令 */
 211               	all ds1302_write_a_byte
 213 0046 00D0      	.LM26:
 122:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_CLK);
 214               	i 50-0x20,7
 216 0048 9798      	.LM27:
 123:../ds1302a/ds1302a.c ****     ds1302_write_a_byte(ucDa); /* 写1Byte数据*/
 217               	i 50-0x20,5
 218               	/* epilogue: frame size=0 */
 219 004a 812F      		pop r17
 220 004c 00D0      		ret
 124:../ds1302a/ds1302a.c **** 	SETBIT(PORTD,T_CLK);      //T_CLK=1
 221               	pilogue end (size=2) */
 222               	/* function ds1302_write size 13 (10) */
 125:../ds1302a/ds1302a.c **** 	//;;nop();
 126:../ds1302a/ds1302a.c **** 	CLRBIT(PORTD,T_RST);	  //T_RST=0
 224               	cope4:
 226 0050 9598      	.global	initialize_1302
 228 0052 1F91      	initialize_1302:
 230               	.LM28:
 231               	.LFBB5:
 232               	/* prologue: frame size=0 */
 233               	/* prologue end (size=0) */
 235               	.LM29:
 236               		ldi r22,lo8(0)
 237               		ldi r24,lo8(-114)
 238               		rcall ds1302_write
 240               	.LM30:
 241               		ldi r22,lo8(-91)
 242               		ldi r24,lo8(-112)
 243               		rcall ds1302_write
 245 0056 60E0      	.LM31:
 246 0058 8EE8      		ldi r22,lo8(0)
 247 005a 00D0      		ldi r24,lo8(-128)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -