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

📄 ds1302a.lst

📁 基于avr单片机上的ds1302实时时钟源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 355:../ds1302a/ds1302a.c ****    send_byte(write_data);                 // 发送数据字节
 356:../ds1302a/ds1302a.c **** }
 357:../ds1302a/ds1302a.c **** 
 358:../ds1302a/ds1302a.c **** // ***********************************************************
 359:../ds1302a/ds1302a.c **** // *           向 BC728X 发送一个字节               *
 360:../ds1302a/ds1302a.c **** // ***********************************************************
 361:../ds1302a/ds1302a.c **** void send_byte(unsigned char send_byte)
 362:../ds1302a/ds1302a.c **** {
 646               	,.LM100-.LFBB13
 647               	.LM100:
 648               		cbi 56-0x20,0
 650               	.LM101:
 651 0188 982F      		sbi 56-0x20,0
 363:../ds1302a/ds1302a.c ****    unsigned char bit_counter;   
 364:../ds1302a/ds1302a.c ****    PORTB&=~(1<<PB0);             // 产生一 clk 脉冲
 653               	.LM102:
 654 018a C098      		sbis 54-0x20,2
 365:../ds1302a/ds1302a.c ****   // delay_1us();
 366:../ds1302a/ds1302a.c ****    PORTB|=(1<<PB0);
 655               	mp .L58
 656               		ldi r18,lo8(0)
 657 018c C09A      	.L60:
 367:../ds1302a/ds1302a.c ****   // delay_1us();
 368:../ds1302a/ds1302a.c ****    
 369:../ds1302a/ds1302a.c ****    while (PINB&(1<<PB2));           // 等待 BC728X 输出 dat 低电平响应
 659               	03:
 660               		sbrc r25,7
 661 018e B299      		rjmp .L61
 370:../ds1302a/ds1302a.c ****    //delay_us(3);
 371:../ds1302a/ds1302a.c ****    PORTB&=~(1<<PB0);             // 再次输出一 clk 脉冲
 663               	04:
 664               		ldi r24,lo8(5)
 665 0192 C098      		out 55-0x20,r24
 372:../ds1302a/ds1302a.c ****   //delay_1us();
 373:../ds1302a/ds1302a.c ****    PORTB|=(1<<PB0);
 666               	tabn	68,0,383,.LM105-.LFBB13
 667               	.LM105:
 668 0194 C09A      		cbi 56-0x20,2
 669               		rjmp .L63
 374:../ds1302a/ds1302a.c ****    //delay_1us();
 375:../ds1302a/ds1302a.c ****    while (!(PINB&(1<<PB2)));             // 等待 BC728X 进入接收状态
 670               	:
 672 0196 B29B      	.LM106:
 673 0198 00C0      		sbi 56-0x20,2
 674 019a 20E0      	.L63:
 376:../ds1302a/ds1302a.c ****   // delay_us(2);
 377:../ds1302a/ds1302a.c ****    for (bit_counter=0;bit_counter<8;bit_counter++)
 378:../ds1302a/ds1302a.c ****    {                                 // 发送 8 个比特
 379:../ds1302a/ds1302a.c ****        if ((send_byte&0x80)==0)
 676               	:
 677               		cbi 56-0x20,0
 679 019e 00C0      	.LM108:
 380:../ds1302a/ds1302a.c ****        {
 381:../ds1302a/ds1302a.c ****              DDRB=0x05;                 
 680               	 56-0x20,0
 681               	.LBB80:
 682 01a0 85E0      	.LBB81:
 683 01a2 87BB      	.LBB82:
 382:../ds1302a/ds1302a.c ****                                                   // 设置I/O口B.7和B.5为输出,其余为输入
 383:../ds1302a/ds1302a.c ****              PORTB&=~(1<<PB2);           
 684               	83:
 686 01a4 C298      	.Ltext1:
 688               	.LM109:
 384:../ds1302a/ds1302a.c ****                                                   // 如果待发bit为0, 置 dat 为 0
 385:../ds1302a/ds1302a.c ****            // delay_1us();
 386:../ds1302a/ds1302a.c ****        }
 387:../ds1302a/ds1302a.c ****          else
 388:../ds1302a/ds1302a.c ****          {
 389:../ds1302a/ds1302a.c ****              PORTB|=(1<<PB2);             // 反之置为 1
 689               	r24,lo8(8)
 690               	/* #APP */
 691 01a8 C29A      		1: dec r24
 692               		brne 1b
 390:../ds1302a/ds1302a.c ****            }
 391:../ds1302a/ds1302a.c ****        //delay_1us();
 392:../ds1302a/ds1302a.c ****        send_byte=send_byte*2;             // send_byte 左移一位
 393:../ds1302a/ds1302a.c ****       // delay_us(1);
 394:../ds1302a/ds1302a.c ****        PORTB&=~(1<<PB0);                   // 输出一 clk 脉冲
 693               	NOAPP */
 694               	.LBE83:
 695 01aa C098      	.LBE82:
 395:../ds1302a/ds1302a.c ****       // delay_1us();
 396:../ds1302a/ds1302a.c ****        PORTB|=(1<<PB0);
 696               	E81:
 697               	.LBE80:
 699               	.Ltext2:
 701               	.LM110:
 702               		subi r18,lo8(-(1))
 703               		cpi r18,lo8(8)
 704               		breq .L64
   1:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    Copyright (c) 2007 Joerg Wunsch
   3:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    All rights reserved.
   4:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
   5:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    Redistribution and use in source and binary forms, with or without
   6:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    modification, are permitted provided that the following conditions are met:
   7:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
   8:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    * Redistributions of source code must retain the above copyright
   9:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer.
  10:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  11:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    * Redistributions in binary form must reproduce the above copyright
  12:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer in
  13:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      the documentation and/or other materials provided with the
  14:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      distribution.
  15:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  16:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****    * Neither the name of the copyright holders nor the names of
  17:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      contributors may be used to endorse or promote products derived
  18:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****      from this software without specific prior written permission.
  19:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  20:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****   POSSIBILITY OF SUCH DAMAGE. */
  31:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  32:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
  33:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  34:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
  35:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
  36:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  37:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #include <inttypes.h>
  38:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  39:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \file */
  40:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
  41:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     \code
  42:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     #include <util/delay_basic.h>
  43:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     \endcode
  44:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  45:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     The functions in this header file implement simple delay loops
  46:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     that perform a busy-waiting.  They are typically used to
  47:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     facilitate short delays in the program execution.  They are
  48:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     implemented as count-down loops with a well-known CPU cycle
  49:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     count per loop iteration.  As such, no other processing can
  50:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     occur simultaneously.  It should be kept in mind that the
  51:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     functions described here do not disable interrupts.
  52:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  53:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     In general, for long delays, the use of hardware timers is
  54:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     much preferrable, as they free the CPU, and allow for
  55:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     concurrent processing of other events while the timer is
  56:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     running.  However, in particular for very short delays, the
  57:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     overhead of setting up a hardware timer is too much compared
  58:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     to the overall delay time.
  59:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  60:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     Two inline functions are provided for the actual delay algorithms.
  61:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  62:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
  63:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  64:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
  65:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
  66:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
  67:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #endif
  68:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  69:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
  70:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  71:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     Delay loop using an 8-bit counter \c __count, so up to 256
  72:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 256 would have to be passed
  73:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     as 0.)  The loop executes three CPU cycles per iteration, not
  74:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     including the overhead the compiler needs to setup the counter
  75:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     register.
  76:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 
  77:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
  78:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****     can be achieved.
  79:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
  80:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** void
  81:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
  82:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** {
  83:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** 	__asm__ volatile (
 705               	8,0,392,.LM111-.LFBB13
 706               	.LM111:
 707 01ae 88E0      		lsl r25
 708               		rjmp .L60
 709 01b0 8A95      	.L64:
 711               	.LM112:
 712               		ldi r24,lo8(1)
 713               		out 55-0x20,r24
 714               	.LBB84:
 715               	.LBB85:
 716               	.LBB86:
 717               	.LBB87:
 719               	.Ltext3:
 721 01b6 2830      	.LM113:
 722 01b8 01F0      		ldi r24,lo8(13)
 723               	/* #APP */
 724               		1: dec r24
 725 01ba 990F      		brne 1b
 726 01bc 00C0      	/* #NOAPP */
 727               	.LBE87:
 397:../ds1302a/ds1302a.c ****        _delay_us(3);                 // 短暂延时
 398:../ds1302a/ds1302a.c ****    }
 399:../ds1302a/ds1302a.c ****    DDRB=0x01;
 728               	
 729               	/* epilogue: frame size=0 */
 730 01be 81E0      		ret
 731 01c0 87BB      	/* epilogue end (size=1) */
 732               	/* function send_byte size 37 (36) */
 743 01c6 01F4      	.Lscope13:
 747               	.global	write728x
 749               	write728x:
 751               	.Ltext4:
 753               	.LM114:
 754               	.LFBB14:
 755               	/* prologue: frame size=0 */
 756               		push r17
 757               	/* prologue end (size=1) */
 758               		mov r17,r22
 760               	.LM115:
 761               		ldi r25,lo8(0)
 762               		rcall send_byte
 764               	.LM116:
 765               		mov r24,r17
 766               		ldi r25,lo8(0)
 767               		rcall send_byte
 768               	/* epilogue: frame size=0 */
 769               		pop r17
 770               		ret
 771               	/* epilogue end (size=2) */
 772               	/* function write728x size 9 (6) */
 774               	.Lscope14:
 776 01ca 1F93      	.global	ds1302_read_time
 778 01cc 162F      	ds1302_read_time:
 780               	.LM117:
 781 01ce 90E0      	.LFBB15:
 782 01d0 00D0      	/* prologue: frame size=0 */
 783               	/* prologue end (size=0) */
 785 01d2 812F      	.LM118:
 786 01d4 90E0      		ldi r24,lo8(-116)
 787 01d6 00D0      		rcall ds1302_read
 788               		sts year,r24
 790 01da 0895      	.LM119:
 791               		ldi r24,lo8(-120)
 792               		rcall ds1302_read
 793               		sts month,r24
 795               	.LM120:
 796               		ldi r24,lo8(-122)
 797               		rcall ds1302_read
 798               		sts day,r24
 800               	.LM121:
 801               		ldi r24,lo8(-118)
 802               		rcall ds1302_read
 803               		sts week,r24
 805               	.LM122:
 806 01dc 8CE8      		ldi r24,lo8(-124)
 807 01de 00D0      		rcall ds1302_read
 808 01e0 8093 0000 		sts hour,r24
 810               	.LM123:
 811 01e4 88E8      		ldi r24,lo8(-126)
 812 01e6 00D0      		rcall ds1302_read
 813 01e8 8093 0000 		sts minute,r24
 815               	.LM124:
 816 01ec 86E8      		ldi r24,lo8(-128)
 817 01ee 00D0      		rcall ds1302_read
 818 01f0 8093 0000 		mov r30,r24
 819               		sts second,r24
 821 01f4 8AE8      	.LM125:
 822 01f6 00D0      		ldi r31,lo8(0)
 823 01f8 8093 0000 		andi r30,lo8(15)
 824               		andi r31,hi8(15)
 825               		subi r30,lo8(-(disp_table))
 826 01fc 84E8      		sbci r31,hi8(-(disp_table))

⌨️ 快捷键说明

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