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

📄 ds1302.lst

📁 基于AVRGCC的时钟DS1302的完整应用源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"ds1302.c"
   2               		.arch atmega162
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  52               	.global	DS1302_Init
  54               	DS1302_Init:
   1:ds1302.c      **** #include <avr/io.h>
   2:ds1302.c      **** #include <avr/interrupt.h>
   3:ds1302.c      **** #include <avr/delay.h>
   4:ds1302.c      **** #include "bcd.h"
   5:ds1302.c      **** #include "ds1302.h"
   6:ds1302.c      **** 
   7:ds1302.c      **** void DS1302_Init(void)
   8:ds1302.c      **** {
  56               	.LM1:
  57               	/* prologue: frame size=0 */
  58               	/* prologue end (size=0) */
   9:ds1302.c      **** 
  60               	.LM2:
  61 0000 8B9A      		sbi 49-0x20,3
  10:ds1302.c      **** 
  63               	.LM3:
  64 0002 8C9A      		sbi 49-0x20,4
  11:ds1302.c      **** 
  66               	.LM4:
  67 0004 8D9A      		sbi 49-0x20,5
  68               	/* epilogue: frame size=0 */
  69 0006 0895      		ret
  70               	/* epilogue end (size=1) */
  71               	/* function DS1302_Init size 4 (3) */
  74               	.global	_DS1302_RD_Byte
  76               	_DS1302_RD_Byte:
  12:ds1302.c      **** 
  13:ds1302.c      **** 	sbi(DS1302_DDR, DS1302_SCLK);
  14:ds1302.c      **** 	sbi(DS1302_DDR, DS1302_IO);
  15:ds1302.c      **** 	sbi(DS1302_DDR, DS1302_RST);
  16:ds1302.c      **** }
  78               	.LM5:
  79               	/* prologue: frame size=0 */
  80               	/* prologue end (size=0) */
  17:ds1302.c      **** 
  82               	.LM6:
  83 0008 90E0      		ldi r25,lo8(0)
  84 000a 27E0      		ldi r18,lo8(7)
  85               	.L11:
  18:ds1302.c      **** // 高 12 个机器周期  低 10 个机器周期
  19:ds1302.c      **** unsigned char _DS1302_RD_Byte(void)
  20:ds1302.c      **** {
  21:ds1302.c      **** 	unsigned char i, result = 0;
  87               	.LM7:
  88 000c 9695      		lsr r25
  22:ds1302.c      **** 
  90               	.LM8:
  91 000e 849B      		sbis 48-0x20,4
  92 0010 03C0      		rjmp .L6
  23:ds1302.c      ****     for(i = 0; i < 8; i++)
  24:ds1302.c      ****     {
  94               	.LM9:
  95 0012 9068      		ori r25,lo8(-128)
  96               	.LBB2:
  98               	.Ltext1:
   1:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    All rights reserved.
   3:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
   4:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    Redistribution and use in source and binary forms, with or without
   5:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    modification, are permitted provided that the following conditions are met:
   6:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
   7:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    * Redistributions of source code must retain the above copyright
   8:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer.
   9:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  10:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer in
  11:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****      the documentation and/or other materials provided with the
  12:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****      distribution.
  13:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  14:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  15:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  18:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  19:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  20:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  21:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  22:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  23:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  24:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  25:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  26:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2.2.2 2004/02/13 21:43:37 joerg_wunsch Exp $ */
  27:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  28:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /*
  29:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****    avr/delay.h - loops for small accurate delays
  30:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****  */
  31:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  32:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
  33:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
  34:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  35:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #include <inttypes.h>
  36:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 
  37:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
  38:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** static __inline__ void
  39:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** _delay_loop_1(uint8_t __count)
  40:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** {
 100               	.LM10:
 101 0014 81E0      		ldi r24,lo8(1)
 102 0016 01C0      		rjmp .L14
 103               	.L6:
 104               	.LBE2:
 105               	.LBB3:
 106 0018 82E0      		ldi r24,lo8(2)
 107               	.L14:
 108               	.LBB4:
  41:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** 	asm volatile (
 110               	.LM11:
 111               	/* #APP */
 112 001a 8A95      		1: dec r24
 113 001c F1F7      		brne 1b
 114               	/* #NOAPP */
 115               	.LBE4:
 116               	.LBE3:
 118               	.Ltext2:
  25:ds1302.c      ****         result >>= 1;
  26:ds1302.c      **** 		if (bit_is_set(DS1302_PIN, DS1302_IO))
  27:ds1302.c      **** 		{
  28:ds1302.c      **** 			result |= 0x80;
  29:ds1302.c      **** 			_delay_loop_1(1);
  30:ds1302.c      **** 		}
  31:ds1302.c      **** 		else
 120               	.LM12:
 121 001e 939A      		sbi 50-0x20,3
 122               	.LBB5:
 124               	.Ltext3:
 126               	.LM13:
 127 0020 84E0      		ldi r24,lo8(4)
 128               	.LBB6:
 130               	.LM14:
 131               	/* #APP */
 132 0022 8A95      		1: dec r24
 133 0024 F1F7      		brne 1b
 134               	/* #NOAPP */
 135               	.LBE6:
 136               	.LBE5:
 138               	.Ltext4:
  32:ds1302.c      **** 		{
  33:ds1302.c      **** 			_delay_loop_1(2);
 140               	.LM15:
 141 0026 9398      		cbi 50-0x20,3
 143               	.LM16:
 144 0028 2150      		subi r18,lo8(-(-1))
 145 002a 27FF      		sbrs r18,7
 146 002c EFCF      		rjmp .L11
  34:ds1302.c      **** 		}
  35:ds1302.c      ****         sbi(DS1302_PORT, DS1302_SCLK);
  36:ds1302.c      **** 		_delay_loop_1(4);
 148               	.LM17:
 149 002e 892F      		mov r24,r25
 150 0030 9927      		clr r25
 151               	/* epilogue: frame size=0 */
 152 0032 0895      		ret
 153               	/* epilogue end (size=1) */
 154               	/* function _DS1302_RD_Byte size 26 (25) */
 169               	.global	_DS1302_WR_Byte
 171               	_DS1302_WR_Byte:
  37:ds1302.c      ****         cbi(DS1302_PORT, DS1302_SCLK);
  38:ds1302.c      ****     } 
  39:ds1302.c      ****     return (result); 
  40:ds1302.c      **** }
 173               	.LM18:
 174               	/* prologue: frame size=0 */
 175               	/* prologue end (size=0) */
 176 0034 982F      		mov r25,r24
 177 0036 27E0      		ldi r18,lo8(7)
 178               	.L22:
  41:ds1302.c      **** 
  42:ds1302.c      **** // 高 12 个机器周期  低 10 个机器周期
  43:ds1302.c      **** void _DS1302_WR_Byte(unsigned char c)
  44:ds1302.c      **** {
  45:ds1302.c      **** 	unsigned char i;
 180               	.LM19:
 181 0038 90FF      		sbrs r25,0
 182 003a 02C0      		rjmp .L19
  46:ds1302.c      **** 
  47:ds1302.c      ****     for(i = 0; i < 8; i++)
 184               	.LM20:
 185 003c 949A      		sbi 50-0x20,4
 186 003e 01C0      		rjmp .L20
 187               	.L19:
  48:ds1302.c      ****     {
  49:ds1302.c      **** 		if (c & 0x01)
  50:ds1302.c      **** 		{
  51:ds1302.c      **** 			sbi(DS1302_PORT, DS1302_IO);
 189               	.LM21:
 190 0040 9498      		cbi 50-0x20,4
 191               	.L20:
  52:ds1302.c      **** 		}
  53:ds1302.c      **** 		else
 193               	.LM22:
 194 0042 939A      		sbi 50-0x20,3
 195               	.LBB7:
 197               	.Ltext5:
 199               	.LM23:
 200 0044 84E0      		ldi r24,lo8(4)
 201               	.LBB8:
 203               	.LM24:
 204               	/* #APP */
 205 0046 8A95      		1: dec r24
 206 0048 F1F7      		brne 1b
 207               	/* #NOAPP */
 208               	.LBE8:
 209               	.LBE7:
 211               	.Ltext6:
  54:ds1302.c      **** 		{
  55:ds1302.c      **** 			cbi(DS1302_PORT, DS1302_IO);
 213               	.LM25:
 214 004a 9398      		cbi 50-0x20,3
  56:ds1302.c      **** 		}
 216               	.LM26:
 217 004c 9695      		lsr r25
 219               	.LM27:
 220 004e 2150      		subi r18,lo8(-(-1))
 221 0050 27FF      		sbrs r18,7
 222 0052 F2CF      		rjmp .L22
 223               	/* epilogue: frame size=0 */
 224 0054 0895      		ret
 225               	/* epilogue end (size=1) */
 226               	/* function _DS1302_WR_Byte size 19 (18) */
 234               	.global	DS1302_Read
 236               	DS1302_Read:
  57:ds1302.c      **** 		sbi(DS1302_PORT, DS1302_SCLK);
  58:ds1302.c      **** 		_delay_loop_1(4);
  59:ds1302.c      **** 		cbi(DS1302_PORT, DS1302_SCLK);
  60:ds1302.c      ****         c >>= 1;
  61:ds1302.c      ****     } 
 238               	.LM28:
 239               	/* prologue: frame size=0 */
 240               	/* prologue end (size=0) */
  62:ds1302.c      **** }
  63:ds1302.c      **** 
  64:ds1302.c      **** unsigned char DS1302_Read(unsigned char addr)
 242               	.LM29:
 243 0056 9598      		cbi 50-0x20,5
  65:ds1302.c      **** {
 245               	.LM30:
 246 0058 9398      		cbi 50-0x20,3
  66:ds1302.c      **** 	unsigned char result;
 248               	.LM31:
 249 005a 959A      		sbi 50-0x20,5
  67:ds1302.c      **** 
 251               	.LM32:
 252               	/* #APP */
 253 005c F894      		cli
  68:ds1302.c      **** 	cbi(DS1302_PORT, DS1302_RST);
 255               	.LM33:
 256               	/* #NOAPP */
 257 005e 0E94 0000 		call _DS1302_WR_Byte
  69:ds1302.c      **** 	cbi(DS1302_PORT, DS1302_SCLK);
 259               	.LM34:
 260 0062 0E94 0000 		call _DS1302_RD_Byte
  70:ds1302.c      **** 	sbi(DS1302_PORT, DS1302_RST);
 262               	.LM35:
 263               	/* #APP */
 264 0066 7894      		sei
  71:ds1302.c      **** 	cli();
 266               	.LM36:
 267               	/* #NOAPP */
 268 0068 9598      		cbi 50-0x20,5
  72:ds1302.c      **** 	_DS1302_WR_Byte(addr);
  73:ds1302.c      **** 	result = _DS1302_RD_Byte();
 270               	.LM37:
 271 006a 9927      		clr r25
 272               	/* epilogue: frame size=0 */
 273 006c 0895      		ret
 274               	/* epilogue end (size=1) */
 275               	/* function DS1302_Read size 14 (13) */
 281               	.global	DS1302_Write
 283               	DS1302_Write:
  74:ds1302.c      **** 	sei();
  75:ds1302.c      **** 	cbi(DS1302_PORT, DS1302_RST);
  76:ds1302.c      **** 	return result;
 285               	.LM38:
 286               	/* prologue: frame size=0 */
 287 006e 1F93      		push r17
 288               	/* prologue end (size=1) */
 289 0070 162F      		mov r17,r22
  77:ds1302.c      **** }
 291               	.LM39:
 292 0072 9598      		cbi 50-0x20,5
  78:ds1302.c      **** 
 294               	.LM40:
 295 0074 9398      		cbi 50-0x20,3
  79:ds1302.c      **** void DS1302_Write(unsigned char addr, unsigned char value)
 297               	.LM41:
 298 0076 959A      		sbi 50-0x20,5

⌨️ 快捷键说明

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