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

📄 softuart.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"softuart.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__CCP__  = 0x34
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  90               	.global	softuart_putc
  92               	softuart_putc:
   1:io/softuart.c **** /*
   2:io/softuart.c **** ,-----------------------------------------------------------------------------------------.
   3:io/softuart.c **** | io/softuart
   4:io/softuart.c **** |-----------------------------------------------------------------------------------------
   5:io/softuart.c **** | this file implements a very basic 19200baud software uart
   6:io/softuart.c **** | - USE AN 7.3728MHz OSC !
   7:io/softuart.c **** | - does NOT use any timer
   8:io/softuart.c **** | - might not work with every uart
   9:io/softuart.c **** | - if interrupted by timer interrupt there might be some garbage
  10:io/softuart.c **** |
  11:io/softuart.c **** | Author   : {{removed according to contest rules}}
  12:io/softuart.c **** |            -> circuitcellar.com avr design contest 2006
  13:io/softuart.c **** |            -> Entry #AT2616
  14:io/softuart.c **** |
  15:io/softuart.c **** |-----------------------------------------------------------------------------------------
  16:io/softuart.c **** | License:
  17:io/softuart.c **** | This program is free software; you can redistribute it and/or modify it under
  18:io/softuart.c **** | the terms of the GNU General Public License as published by the Free Software
  19:io/softuart.c **** | Foundation; either version 2 of the License, or (at your option) any later
  20:io/softuart.c **** | version.
  21:io/softuart.c **** | This program is distributed in the hope that it will be useful, but
  22:io/softuart.c **** |
  23:io/softuart.c **** | WITHOUT ANY WARRANTY;
  24:io/softuart.c **** |
  25:io/softuart.c **** | without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  26:io/softuart.c **** | PURPOSE. See the GNU General Public License for more details.
  27:io/softuart.c **** |
  28:io/softuart.c **** | You should have received a copy of the GNU General Public License along with
  29:io/softuart.c **** | this program; if not, write to the Free Software Foundation, Inc., 51
  30:io/softuart.c **** | Franklin St, Fifth Floor, Boston, MA 02110, USA
  31:io/softuart.c **** |
  32:io/softuart.c **** | http://www.gnu.de/gpl-ger.html
  33:io/softuart.c **** `-----------------------------------------------------------------------------------------*/
  34:io/softuart.c **** #include "softuart.h"
  35:io/softuart.c **** 
  36:io/softuart.c **** void softuart_put_ip(uint32_t ip){
  37:io/softuart.c **** 	softuart_put_uint8(ip>>24); softuart_putc('.');
  38:io/softuart.c **** 	softuart_put_uint8(ip>>16); softuart_putc('.');
  39:io/softuart.c **** 	softuart_put_uint8(ip>> 8); softuart_putc('.');
  40:io/softuart.c **** 	softuart_put_uint8(ip); 
  41:io/softuart.c **** }
  42:io/softuart.c **** 
  43:io/softuart.c **** void softuart_put_uint16(unsigned int c){
  44:io/softuart.c **** 	unsigned int tmp;
  45:io/softuart.c **** 	unsigned int mul;
  46:io/softuart.c **** 	unsigned char l;
  47:io/softuart.c **** 	
  48:io/softuart.c **** 	l=0;
  49:io/softuart.c **** 	for(mul=10000; mul>0; mul = mul/10){
  50:io/softuart.c **** 		tmp = '0';
  51:io/softuart.c **** 		while(c>=mul){
  52:io/softuart.c **** 			c -= mul;
  53:io/softuart.c **** 			tmp++;
  54:io/softuart.c **** 			l=1;
  55:io/softuart.c **** 		}
  56:io/softuart.c **** 		if (l==0 && tmp == '0' && mul!=1)
  57:io/softuart.c **** 			softuart_putc(' ');
  58:io/softuart.c **** 		else
  59:io/softuart.c **** 			softuart_putc(tmp);
  60:io/softuart.c **** 	}
  61:io/softuart.c **** }
  62:io/softuart.c **** 
  63:io/softuart.c **** void softuart_put_uint8(unsigned char c){
  64:io/softuart.c **** 	unsigned int tmp;
  65:io/softuart.c **** 	unsigned char mul;
  66:io/softuart.c **** 	unsigned char l;
  67:io/softuart.c **** 	
  68:io/softuart.c **** 	l=0;	
  69:io/softuart.c **** 	for(mul=100; mul>0; mul = mul/10){
  70:io/softuart.c **** 		tmp = '0';
  71:io/softuart.c **** 		while(c>=mul){
  72:io/softuart.c **** 			c -= mul;
  73:io/softuart.c **** 			tmp++;
  74:io/softuart.c **** 			l=1;
  75:io/softuart.c **** 		}
  76:io/softuart.c **** 		if (l==0 && tmp == '0' && mul!=1)
  77:io/softuart.c **** 			softuart_putc(' ');
  78:io/softuart.c **** 		else
  79:io/softuart.c **** 			softuart_putc(tmp);
  80:io/softuart.c **** 	}
  81:io/softuart.c **** }
  82:io/softuart.c **** 
  83:io/softuart.c **** void softuart_putnewline(){
  84:io/softuart.c **** 	softuart_puts_progmem("\r\n");
  85:io/softuart.c **** }
  86:io/softuart.c **** 
  87:io/softuart.c **** void softuart_puts_progmem2(PGM_P pointer){
  88:io/softuart.c **** 	unsigned char c = pgm_read_byte(pointer++);
  89:io/softuart.c **** 	while(c){
  90:io/softuart.c **** 		softuart_putc(c);
  91:io/softuart.c **** 		c = pgm_read_byte(pointer++);
  92:io/softuart.c **** 	}
  93:io/softuart.c **** }
  94:io/softuart.c **** 
  95:io/softuart.c **** void softuart_puts (char *s){
  96:io/softuart.c **** 	while (*s){
  97:io/softuart.c **** 		softuart_putc(*s);
  98:io/softuart.c **** 		s++;
  99:io/softuart.c **** 	}
 100:io/softuart.c **** }
 101:io/softuart.c **** 
 102:io/softuart.c **** void softuart_putc(unsigned char c){
  93               	tabn	68,0,105,.LM1-.LFBB1
  94               	.LM1:
  95               		cbi 35-32,1
  96               	.LBB44:
  97               	.LBB45:
 103:io/softuart.c **** uart_putc(unsigned char c){
 104:io/softuart.c **** 		unsigned char cnt = 8;
 105:io/softuart.c **** 		//send startbit: (=low)
  98               	6:
  99               	.LBB47:
 101               	.Ltext1:
 103               	.LM2:
 104               		ldi r25,lo8(108)
 105               	/* #APP */
 106               	 ;  83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
   1:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    Copyright (c) 2007 Joerg Wunsch
   3:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    All rights reserved.
   4:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
   5:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    Redistribution and use in source and binary forms, with or without
   6:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    modification, are permitted provided that the following conditions are met:
   7:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
   8:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    * Redistributions of source code must retain the above copyright
   9:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer.
  10:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  11:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    * Redistributions in binary form must reproduce the above copyright
  12:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      notice, this list of conditions and the following disclaimer in
  13:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      the documentation and/or other materials provided with the
  14:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      distribution.
  15:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  16:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****    * Neither the name of the copyright holders nor the names of
  17:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      contributors may be used to endorse or promote products derived
  18:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****      from this software without specific prior written permission.
  19:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  20:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  21:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  24:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  25:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  26:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  28:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29:c:/winavr-20081205/lib/gcc/../../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-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****   POSSIBILITY OF SUCH DAMAGE. */
  31:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  32:c:/winavr-20081205/lib/gcc/../../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-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  34:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
  35:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
  36:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  37:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #include <inttypes.h>
  38:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  39:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \file */
  40:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
  41:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     \code
  42:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     #include <util/delay_basic.h>
  43:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     \endcode
  44:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  45:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     The functions in this header file implement simple delay loops
  46:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     that perform a busy-waiting.  They are typically used to
  47:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     facilitate short delays in the program execution.  They are
  48:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     implemented as count-down loops with a well-known CPU cycle
  49:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     count per loop iteration.  As such, no other processing can
  50:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     occur simultaneously.  It should be kept in mind that the
  51:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     functions described here do not disable interrupts.
  52:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  53:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     In general, for long delays, the use of hardware timers is
  54:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     much preferrable, as they free the CPU, and allow for
  55:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     concurrent processing of other events while the timer is
  56:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     running.  However, in particular for very short delays, the
  57:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     overhead of setting up a hardware timer is too much compared
  58:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     to the overall delay time.
  59:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  60:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Two inline functions are provided for the actual delay algorithms.
  61:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  62:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** */
  63:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  64:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
  65:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
  66:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
  67:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #endif
  68:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  69:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
  70:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  71:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Delay loop using an 8-bit counter \c __count, so up to 256
  72:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     iterations are possible.  (The value 256 would have to be passed
  73:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     as 0.)  The loop executes three CPU cycles per iteration, not
  74:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     including the overhead the compiler needs to setup the counter
  75:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     register.
  76:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 
  77:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
  78:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****     can be achieved.
  79:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** */
  80:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** void
  81:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
  82:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** {
  83:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** 	__asm__ volatile (
 107               	25
 108               		brne 1b
 109 0002 9CE6      	 ;  0 "" 2
 110               	/* #NOAPP */
 111               		ldi r18,lo8(8)
 112 0004 9A95      	.LBE47:
 113 0006 01F4      	.LBE46:
 114               	.LBE45:
 115               	.LBE44:
 116 0008 28E0      	.LBB48:
 117               	.LBB49:
 118               	.LBB50:
 119               	.LBB51:
 120               		ldi r19,lo8(108)
 121               	.L5:
 122               	.LBE51:
 123               	.LBE50:
 124               	.LBE49:
 125 000a 3CE6      	.LBE48:
 127               	.Ltext2:
 129               	.LM3:
 130               		sbrs r24,0
 131               		rjmp .L2
 106:io/softuart.c **** 		//send startbit: (=low)
 107:io/softuart.c **** 		SOFTUART_TXPIN_LO();
 108:io/softuart.c **** 		SOFTUART_DELAY();
 109:io/softuart.c **** 		
 133               	L3
 134               	.L2:
 136 000e 00C0      	.LM5:
 110:io/softuart.c **** 		SOFTUART_DELAY();
 137               	 35-32,1
 138               	.L3:
 139 0010 199A      	.LBB55:
 140 0012 00C0      	.LBB54:
 141               	.LBB53:
 111:io/softuart.c **** ();
 112:io/softuart.c **** 		SOFTUART_DELAY();
 142               	2:
 144 0014 1998      	.Ltext3:
 146               	.LM6:
 147               		mov r25,r19
 148               	/* #APP */
 149               	 ;  83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
 150               		1: dec r25
 151               		brne 1b
 152               	 ;  0 "" 2
 153               	/* #NOAPP */
 154 0016 932F      	.LBE52:
 155               	.LBE53:
 156               	.LBE54:
 157 0018 9A95      	.LBE55:
 159               	.Ltext4:
 161               	.LM7:
 162               		subi r18,lo8(-(-1))
 164               	.LM8:
 165               		breq .L4
 113:io/softuart.c **** ();
 114:io/softuart.c **** 		SOFTUART_DELAY();
 115:io/softuart.c **** 		
 116:io/softuart.c **** 		while(cnt > 0){
 117:io/softuart.c **** 			if (c & 0x01)
 118:io/softuart.c **** 				SOFTUART_TXPIN_HI();
 167               	.L4:
 169 001c 2150      	.LM10:
 170               		sbi 35-32,1
 171               	.LBB56:
 172 001e 01F0      	.LBB57:
 173               	.LBB58:
 174               	.LBB59:
 176 0022 00C0      	.Ltext5:
 119:io/softuart.c **** OFTUART_TXPIN_HI();
 120:io/softuart.c **** 			else
 121:io/softuart.c **** 				SOFTUART_TXPIN_LO();
 122:io/softuart.c **** 
 178               	 r24,lo8(108)
 179               	/* #APP */
 180 0024 199A      	 ;  83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
 181               		1: dec r24
 182               		brne 1b
 183               	 ;  0 "" 2
 184               	/* epilogue start */
 185               	/* #NOAPP */
 186               	.LBE59:
 187               	.LBE58:
 188               	.LBE57:
 189 0026 8CE6      	.LBE56:
 191               	.Ltext6:
 193 002a 01F4      	.LM12:
 194               		ret

⌨️ 快捷键说明

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