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

📄 main.lst

📁 avr单片机的一些实际应用源码
💻 LST
📖 第 1 页 / 共 4 页
字号:
   1               		.file	"main.c"
   2               		.arch atmega8
   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:
  78               	.global	DelayMs
  80               	DelayMs:
   1:main.c        **** /*
   2:main.c        **** 	main.c
   3:main.c        **** 	
   4:main.c        **** 	芯艺 2004-09-02   ---------- 2004
   5:main.c        **** */
   6:main.c        **** 
   7:main.c        **** 
   8:main.c        **** #include <avr/io.h>
   9:main.c        **** #include <avr/delay.h>
  10:main.c        **** #include <avr/twi.h>
  11:main.c        **** #include <avr/pgmspace.h>
  12:main.c        **** 
  13:main.c        **** #include <stdio.h>
  14:main.c        **** 
  15:main.c        **** #define uint unsigned int
  16:main.c        **** #define uchar unsigned char
  17:main.c        **** 
  18:main.c        **** #define FREQ 4
  19:main.c        **** #define DS1307_ADDR 0XD0
  20:main.c        **** 
  21:main.c        **** #define TW_ACK  1
  22:main.c        **** #define TW_NACK 0
  23:main.c        **** 
  24:main.c        **** #define RTC_READ 1
  25:main.c        **** #define RTC_WRITE 0
  26:main.c        **** 
  27:main.c        **** 
  28:main.c        **** FILE *g_hFile;
  29:main.c        **** 
  30:main.c        **** uchar g_aTimeBuf[7];//时钟/日历缓冲区
  31:main.c        **** uchar g_aTimeBin[7];//时钟/日历二进制格式缓冲区
  32:main.c        **** 
  33:main.c        **** void DelayMs(uint ms)
  34:main.c        **** {
  82               	.LM1:
  83               	/* prologue: frame size=0 */
  84               	/* prologue end (size=0) */
  85 0000 AC01      		movw r20,r24
  35:main.c        **** 	uint i;
  36:main.c        **** 	for(i=0;i<ms;i++)
  87               	.LM2:
  88               	.LBB2:
  89 0002 20E0      		ldi r18,lo8(0)
  90 0004 30E0      		ldi r19,hi8(0)
  91 0006 2817      		cp r18,r24
  92 0008 3907      		cpc r19,r25
  93 000a 48F4      		brsh .L9
  94               	.L7:
  37:main.c        **** 		_delay_loop_2(FREQ *250);
  96               	.LM3:
  98               	.Ltext1:
   1:C:/WinAVR/avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:C:/WinAVR/avr/include/avr/delay.h ****    All rights reserved.
   3:C:/WinAVR/avr/include/avr/delay.h **** 
   4:C:/WinAVR/avr/include/avr/delay.h ****    Redistribution and use in source and binary forms, with or without
   5:C:/WinAVR/avr/include/avr/delay.h ****    modification, are permitted provided that the following conditions are met:
   6:C:/WinAVR/avr/include/avr/delay.h **** 
   7:C:/WinAVR/avr/include/avr/delay.h ****    * Redistributions of source code must retain the above copyright
   8:C:/WinAVR/avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer.
   9:C:/WinAVR/avr/include/avr/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  10:C:/WinAVR/avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer in
  11:C:/WinAVR/avr/include/avr/delay.h ****      the documentation and/or other materials provided with the
  12:C:/WinAVR/avr/include/avr/delay.h ****      distribution.
  13:C:/WinAVR/avr/include/avr/delay.h **** 
  14:C:/WinAVR/avr/include/avr/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  15:C:/WinAVR/avr/include/avr/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16:C:/WinAVR/avr/include/avr/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17:C:/WinAVR/avr/include/avr/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  18:C:/WinAVR/avr/include/avr/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  19:C:/WinAVR/avr/include/avr/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  20:C:/WinAVR/avr/include/avr/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  21:C:/WinAVR/avr/include/avr/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  22:C:/WinAVR/avr/include/avr/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  23:C:/WinAVR/avr/include/avr/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  24:C:/WinAVR/avr/include/avr/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  25:C:/WinAVR/avr/include/avr/delay.h **** 
  26:C:/WinAVR/avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2 2002/12/12 11:41:01 joerg_wunsch Exp $ */
  27:C:/WinAVR/avr/include/avr/delay.h **** 
  28:C:/WinAVR/avr/include/avr/delay.h **** /*
  29:C:/WinAVR/avr/include/avr/delay.h ****    avr/delay.h - loops for small accurate delays
  30:C:/WinAVR/avr/include/avr/delay.h ****  */
  31:C:/WinAVR/avr/include/avr/delay.h **** 
  32:C:/WinAVR/avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
  33:C:/WinAVR/avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
  34:C:/WinAVR/avr/include/avr/delay.h **** 
  35:C:/WinAVR/avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
  36:C:/WinAVR/avr/include/avr/delay.h **** static inline void
  37:C:/WinAVR/avr/include/avr/delay.h **** _delay_loop_1(unsigned char __count)
  38:C:/WinAVR/avr/include/avr/delay.h **** {
  39:C:/WinAVR/avr/include/avr/delay.h **** 	asm volatile (
  40:C:/WinAVR/avr/include/avr/delay.h **** 		"1: dec %0" "\n\t"
  41:C:/WinAVR/avr/include/avr/delay.h **** 		"brne 1b"
  42:C:/WinAVR/avr/include/avr/delay.h **** 		: "=r" (__count)
  43:C:/WinAVR/avr/include/avr/delay.h **** 		: "0" (__count)
  44:C:/WinAVR/avr/include/avr/delay.h **** 	);
  45:C:/WinAVR/avr/include/avr/delay.h **** }
  46:C:/WinAVR/avr/include/avr/delay.h **** 
  47:C:/WinAVR/avr/include/avr/delay.h **** /* 16-bit count, 4 cycles/loop */
  48:C:/WinAVR/avr/include/avr/delay.h **** static inline void
  49:C:/WinAVR/avr/include/avr/delay.h **** _delay_loop_2(unsigned int __count)
  50:C:/WinAVR/avr/include/avr/delay.h **** {
 100               	.LM4:
 101               	.LBB3:
 102 000c 88EE      		ldi r24,lo8(1000)
 103 000e 93E0      		ldi r25,hi8(1000)
  51:C:/WinAVR/avr/include/avr/delay.h **** 	asm volatile (
 105               	.LM5:
 106               	/* #APP */
 107 0010 0197      		1: sbiw r24,1
 108 0012 F1F7      		brne 1b
 110               	.Ltext2:
 112               	.LM6:
 113               	/* #NOAPP */
 114               	.LBE3:
 115 0014 2F5F      		subi r18,lo8(-(1))
 116 0016 3F4F      		sbci r19,hi8(-(1))
 117 0018 2417      		cp r18,r20
 118 001a 3507      		cpc r19,r21
 119 001c B8F3      		brlo .L7
 120               	.L9:
  38:main.c        **** }
 122               	.LM7:
 123 001e 0895      		ret
 124               	.LBE2:
 125               	/* epilogue: frame size=0 */
 126               	/* epilogue: noreturn */
 127               	/* epilogue end (size=0) */
 128               	/* function DelayMs size 18 (18) */
 138               	.global	usart_putchar
 140               	usart_putchar:
  39:main.c        **** 
  40:main.c        **** 
  41:main.c        **** /*******************标准I/O功能****************开始********/
  42:main.c        **** //标准I/O输出函数
  43:main.c        **** int usart_putchar(char c)
  44:main.c        **** {
 142               	.LM8:
 143               	/* prologue: frame size=0 */
 144 0020 CF93      		push r28
 145               	/* prologue end (size=1) */
 146 0022 C82F      		mov r28,r24
  45:main.c        **** 	if(c=='\n')
 148               	.LM9:
 149 0024 8A30      		cpi r24,lo8(10)
 150 0026 11F4      		brne .L13
  46:main.c        **** 		usart_putchar('\r');
 152               	.LM10:
 153 0028 8DE0      		ldi r24,lo8(13)
 154 002a FADF      		rcall usart_putchar
  47:main.c        **** 	loop_until_bit_is_set(UCSRA,UDRE);
 156               	.LM11:
 157               	.L13:
 158 002c 5D9B      		sbis 43-0x20,5
 159 002e FECF      		rjmp .L13
  48:main.c        **** 	UDR=c;
 161               	.LM12:
 162 0030 CCB9      		out 44-0x20,r28
  49:main.c        **** 	return 0;
  50:main.c        **** }
 164               	.LM13:
 165 0032 80E0      		ldi r24,lo8(0)
 166 0034 90E0      		ldi r25,hi8(0)
 167               	/* epilogue: frame size=0 */
 168 0036 CF91      		pop r28
 169 0038 0895      		ret
 170               	/* epilogue end (size=2) */
 171               	/* function usart_putchar size 13 (10) */
 174               	.global	usart_getchar
 176               	usart_getchar:
  51:main.c        **** //标准I/O输入函数
  52:main.c        **** int usart_getchar(void)
  53:main.c        **** {
 178               	.LM14:
 179               	/* prologue: frame size=0 */
 180               	/* prologue end (size=0) */
  54:main.c        **** 	loop_until_bit_is_set(UCSRA,RXC);
 182               	.LM15:
 183               	.L18:
 184 003a 5F9B      		sbis 43-0x20,7
 185 003c FECF      		rjmp .L18
  55:main.c        **** 	return UDR;
 187               	.LM16:
 188 003e 8CB1      		in r24,44-0x20
 189 0040 9927      		clr r25
  56:main.c        **** }
 191               	.LM17:
 192               	/* epilogue: frame size=0 */
 193 0042 0895      		ret
 194               	/* epilogue end (size=1) */
 195               	/* function usart_getchar size 5 (4) */
 198               	.global	IoInit
 200               	IoInit:
  57:main.c        **** 
  58:main.c        **** //初始化
  59:main.c        **** void IoInit(void)
  60:main.c        **** {
 202               	.LM18:
 203               	/* prologue: frame size=0 */
 204               	/* prologue end (size=0) */
  61:main.c        **** 	//串行口初始化
  62:main.c        **** 	UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
 206               	.LM19:
 207 0044 88E1      		ldi r24,lo8(24)
 208 0046 8AB9      		out 42-0x20,r24
  63:main.c        **** 	UBRRL=25;	//9600 baud 6MHz:38  4MHz:25	
 210               	.LM20:
 211 0048 89E1      		ldi r24,lo8(25)
 212 004a 89B9      		out 41-0x20,r24
  64:main.c        **** 	
  65:main.c        **** 	//UART用于标准I/O输入输出
  66:main.c        **** 	g_hFile=fdevopen(usart_putchar,usart_getchar,0);	
 214               	.LM21:
 215 004c 40E0      		ldi r20,lo8(0)
 216 004e 50E0      		ldi r21,hi8(0)
 217 0050 60E0      		ldi r22,lo8(pm(usart_getchar))
 218 0052 70E0      		ldi r23,hi8(pm(usart_getchar))
 219 0054 80E0      		ldi r24,lo8(pm(usart_putchar))
 220 0056 90E0      		ldi r25,hi8(pm(usart_putchar))
 221 0058 00D0      		rcall fdevopen
 222 005a 9093 0000 		sts (g_hFile)+1,r25
 223 005e 8093 0000 		sts g_hFile,r24
  67:main.c        **** }
 225               	.LM22:
 226               	/* epilogue: frame size=0 */
 227 0062 0895      		ret
 228               	/* epilogue end (size=1) */
 229               	/* function IoInit size 16 (15) */
 232               	.global	twi_stop
 234               	twi_stop:
  68:main.c        **** /*******************标准I/O功能**************结束**********/
  69:main.c        **** 
  70:main.c        **** /*************主模式TWI操作部分*************开始**************/
  71:main.c        **** 
  72:main.c        **** //总线上起动停止条件
  73:main.c        **** void twi_stop(void)
  74:main.c        **** {
 236               	.LM23:
 237               	/* prologue: frame size=0 */
 238               	/* prologue end (size=0) */
  75:main.c        **** 	TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);
 240               	.LM24:
 241 0064 84E9      		ldi r24,lo8(-108)
 242 0066 86BF      		out 86-0x20,r24
  76:main.c        **** }
 244               	.LM25:
 245               	/* epilogue: frame size=0 */
 246 0068 0895      		ret
 247               	/* epilogue end (size=1) */
 248               	/* function twi_stop size 3 (2) */
 251               	.global	twi_start
 253               	twi_start:
  77:main.c        **** //总线上起动开始条件
  78:main.c        **** uchar twi_start(void)
  79:main.c        **** {
 255               	.LM26:
 256               	/* prologue: frame size=0 */
 257               	/* prologue end (size=0) */
  80:main.c        **** 	TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN); 
 259               	.LM27:
 260 006a 84EA      		ldi r24,lo8(-92)
 261 006c 86BF      		out 86-0x20,r24
  81:main.c        **** 	while ((TWCR & _BV(TWINT)) == 0) ;
 263               	.LM28:
 264               	.L25:
 265 006e 06B6      		in __tmp_reg__,86-0x20
 266 0070 07FE      		sbrs __tmp_reg__,7
 267 0072 FDCF      		rjmp .L25
  82:main.c        **** 
  83:main.c        **** 	
  84:main.c        **** 	return TW_STATUS;
 269               	.LM29:
 270 0074 81B1      		in r24,33-0x20
 271 0076 9927      		clr r25
 272 0078 887F      		andi r24,lo8(248)
 273 007a 9070      		andi r25,hi8(248)
  85:main.c        **** }
 275               	.LM30:
 276               	/* epilogue: frame size=0 */
 277 007c 0895      		ret
 278               	/* epilogue end (size=1) */
 279               	/* function twi_start size 10 (9) */
 283               	.global	twi_writebyte
 285               	twi_writebyte:
  86:main.c        **** 
  87:main.c        **** //写一字节
  88:main.c        **** uchar twi_writebyte(uchar c)
  89:main.c        **** {
 287               	.LM31:
 288               	/* prologue: frame size=0 */
 289               	/* prologue end (size=0) */
  90:main.c        **** 	TWDR = c;
 291               	.LM32:
 292 007e 83B9      		out 35-0x20,r24
  91:main.c        **** 	TWCR = _BV(TWINT) | _BV(TWEN); 	
 294               	.LM33:
 295 0080 84E8      		ldi r24,lo8(-124)
 296 0082 86BF      		out 86-0x20,r24
  92:main.c        **** 	while ((TWCR & _BV(TWINT)) == 0);

⌨️ 快捷键说明

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