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

📄 main.lst

📁 用来显示LCM103的单片机程序。非常好的例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"main.c"
   2               		.arch atmega16
   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
  12               		.text
  13               	.Ltext0:
  60               	.global	delay
  62               	delay:
   1:main.c        **** #include "./main.h"
   2:main.c        **** 
   3:main.c        **** 
   4:main.c        **** #include <avr/io.h>//define kind of I/O port
   5:main.c        **** #include <avr/delay.h>//define _delay_loop_2
   6:main.c        **** #include <inttypes.h>//define uint16_t and so on
   7:main.c        **** 
   8:main.c        **** void delay(uint16_t ms)
   9:main.c        **** {
  64               	.LM1:
  65               	/* prologue: frame size=0 */
  66               	/* prologue end (size=0) */
  67 0000 AC01      		movw r20,r24
  10:main.c        ****     uint16_t i;
  11:main.c        **** 	for(i=0;i<ms;i++)	_delay_loop_2(2765);//equal mcu freq/4000
  69               	.LM2:
  70               	.LBB2:
  71 0002 20E0      		ldi r18,lo8(0)
  72 0004 30E0      		ldi r19,hi8(0)
  73 0006 2817      		cp r18,r24
  74 0008 3907      		cpc r19,r25
  75 000a 48F4      		brsh .L9
  76               	.L7:
  78               	.Ltext1:
   1:d:/WinAVR/avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
   2:d:/WinAVR/avr/include/avr/delay.h ****    All rights reserved.
   3:d:/WinAVR/avr/include/avr/delay.h **** 
   4:d:/WinAVR/avr/include/avr/delay.h ****    Redistribution and use in source and binary forms, with or without
   5:d:/WinAVR/avr/include/avr/delay.h ****    modification, are permitted provided that the following conditions are met:
   6:d:/WinAVR/avr/include/avr/delay.h **** 
   7:d:/WinAVR/avr/include/avr/delay.h ****    * Redistributions of source code must retain the above copyright
   8:d:/WinAVR/avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer.
   9:d:/WinAVR/avr/include/avr/delay.h ****    * Redistributions in binary form must reproduce the above copyright
  10:d:/WinAVR/avr/include/avr/delay.h ****      notice, this list of conditions and the following disclaimer in
  11:d:/WinAVR/avr/include/avr/delay.h ****      the documentation and/or other materials provided with the
  12:d:/WinAVR/avr/include/avr/delay.h ****      distribution.
  13:d:/WinAVR/avr/include/avr/delay.h **** 
  14:d:/WinAVR/avr/include/avr/delay.h ****   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  15:d:/WinAVR/avr/include/avr/delay.h ****   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  16:d:/WinAVR/avr/include/avr/delay.h ****   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  17:d:/WinAVR/avr/include/avr/delay.h ****   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  18:d:/WinAVR/avr/include/avr/delay.h ****   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  19:d:/WinAVR/avr/include/avr/delay.h ****   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  20:d:/WinAVR/avr/include/avr/delay.h ****   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  21:d:/WinAVR/avr/include/avr/delay.h ****   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  22:d:/WinAVR/avr/include/avr/delay.h ****   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  23:d:/WinAVR/avr/include/avr/delay.h ****   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  24:d:/WinAVR/avr/include/avr/delay.h ****   POSSIBILITY OF SUCH DAMAGE. */
  25:d:/WinAVR/avr/include/avr/delay.h **** 
  26:d:/WinAVR/avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2 2002/12/12 11:41:01 joerg_wunsch Exp $ */
  27:d:/WinAVR/avr/include/avr/delay.h **** 
  28:d:/WinAVR/avr/include/avr/delay.h **** /*
  29:d:/WinAVR/avr/include/avr/delay.h ****    avr/delay.h - loops for small accurate delays
  30:d:/WinAVR/avr/include/avr/delay.h ****  */
  31:d:/WinAVR/avr/include/avr/delay.h **** 
  32:d:/WinAVR/avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
  33:d:/WinAVR/avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
  34:d:/WinAVR/avr/include/avr/delay.h **** 
  35:d:/WinAVR/avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
  36:d:/WinAVR/avr/include/avr/delay.h **** static inline void
  37:d:/WinAVR/avr/include/avr/delay.h **** _delay_loop_1(unsigned char __count)
  38:d:/WinAVR/avr/include/avr/delay.h **** {
  39:d:/WinAVR/avr/include/avr/delay.h **** 	asm volatile (
  40:d:/WinAVR/avr/include/avr/delay.h **** 		"1: dec %0" "\n\t"
  41:d:/WinAVR/avr/include/avr/delay.h **** 		"brne 1b"
  42:d:/WinAVR/avr/include/avr/delay.h **** 		: "=r" (__count)
  43:d:/WinAVR/avr/include/avr/delay.h **** 		: "0" (__count)
  44:d:/WinAVR/avr/include/avr/delay.h **** 	);
  45:d:/WinAVR/avr/include/avr/delay.h **** }
  46:d:/WinAVR/avr/include/avr/delay.h **** 
  47:d:/WinAVR/avr/include/avr/delay.h **** /* 16-bit count, 4 cycles/loop */
  48:d:/WinAVR/avr/include/avr/delay.h **** static inline void
  49:d:/WinAVR/avr/include/avr/delay.h **** _delay_loop_2(unsigned int __count)
  50:d:/WinAVR/avr/include/avr/delay.h **** {
  80               	.LM3:
  81               	.LBB3:
  82 000c 8DEC      		ldi r24,lo8(2765)
  83 000e 9AE0      		ldi r25,hi8(2765)
  51:d:/WinAVR/avr/include/avr/delay.h **** 	asm volatile (
  85               	.LM4:
  86               	/* #APP */
  87 0010 0197      		1: sbiw r24,1
  88 0012 F1F7      		brne 1b
  90               	.Ltext2:
  92               	.LM5:
  93               	/* #NOAPP */
  94               	.LBE3:
  95 0014 2F5F      		subi r18,lo8(-(1))
  96 0016 3F4F      		sbci r19,hi8(-(1))
  97 0018 2417      		cp r18,r20
  98 001a 3507      		cpc r19,r21
  99 001c B8F3      		brlo .L7
 100               	.L9:
  12:main.c        **** }
 102               	.LM6:
 103 001e 0895      		ret
 104               	.LBE2:
 105               	/* epilogue: frame size=0 */
 106               	/* epilogue: noreturn */
 107               	/* epilogue end (size=0) */
 108               	/* function delay size 18 (18) */
 116               	.Lscope0:
 119               	.global	beep
 121               	beep:
  13:main.c        **** 
  14:main.c        **** void beep(void)
  15:main.c        **** {
 123               	.LM7:
 124               	/* prologue: frame size=0 */
 125               	/* prologue end (size=0) */
  16:main.c        **** uint16_t lasting=1500;
  17:main.c        **** while(lasting--)
 127               	.LM8:
 128               	.LBB4:
 129 0020 2BED      		ldi r18,lo8(1499)
 130 0022 35E0      		ldi r19,hi8(1499)
 131               	.L15:
  18:main.c        **** {
  19:main.c        ****    PORTC ^= _BV(7); //取反
 133               	.LM9:
 134 0024 85B3      		in r24,53-0x20
 135 0026 90E8      		ldi r25,lo8(-128)
 136 0028 8927      		eor r24,r25
 137 002a 85BB      		out 53-0x20,r24
  20:main.c        ****    _delay_loop_2(130);
 139               	.LM10:
 141               	.Ltext3:
 143               	.LM11:
 144               	.LBB5:
 145 002c 82E8      		ldi r24,lo8(130)
 146 002e 90E0      		ldi r25,hi8(130)
 148               	.LM12:
 149               	/* #APP */
 150 0030 0197      		1: sbiw r24,1
 151 0032 F1F7      		brne 1b
 152               	/* #NOAPP */
 153               	.LBE5:
 154 0034 2150      		subi r18,lo8(-(-1))
 155 0036 3040      		sbci r19,hi8(-(-1))
 156 0038 8FEF      		ldi r24,hi8(-1)
 157 003a 2F3F      		cpi r18,lo8(-1)
 158 003c 3807      		cpc r19,r24
 159 003e 91F7      		brne .L15
 161               	.Ltext4:
  21:main.c        **** }
  22:main.c        **** }
 163               	.LM13:
 164               	.LBE4:
 165               	/* epilogue: frame size=0 */
 166 0040 0895      		ret
 167               	/* epilogue end (size=1) */
 168               	/* function beep size 19 (18) */
 176               	.Lscope1:
 181               	.global	send
 183               	send:
  23:main.c        **** 
  24:main.c        **** #define CS0 do{(PORTA &= ~(_BV(7)));}while(0)//is better than (PORTA &= ~(_BV(7)))
  25:main.c        **** #define CS1 do{(PORTA |= (_BV(7)));}while(0)
  26:main.c        **** #define RD0 do{(PORTA &= ~(_BV(6)));}while(0)
  27:main.c        **** #define RD1 do{(PORTA |= (_BV(6)));}while(0)
  28:main.c        **** #define WR0 do{(PORTA &= ~(_BV(5)));}while(0)
  29:main.c        **** #define WR1 do{(PORTA |= (_BV(5)));}while(0)
  30:main.c        **** #define SEND0 do{(PORTA &= ~(_BV(4)));}while(0)
  31:main.c        **** #define SEND1 do{(PORTA |= (_BV(4)));}while(0)
  32:main.c        **** 
  33:main.c        **** 
  34:main.c        **** void send(uint16_t senddata,uint8_t num)
  35:main.c        **** {
 185               	.LM14:
 186               	/* prologue: frame size=0 */
 187 0042 FF92      		push r15
 188 0044 0F93      		push r16
 189 0046 1F93      		push r17
 190 0048 CF93      		push r28
 191               	/* prologue end (size=4) */
 192 004a 8C01      		movw r16,r24
 193 004c F62E      		mov r15,r22
  36:main.c        ****   uint8_t i;
  37:main.c        ****   
  38:main.c        ****   CS1;
 195               	.LM15:
 196               	.LBB6:
 197 004e DF9A      		sbi 59-0x20,7
  39:main.c        ****   delay(10);
 199               	.LM16:
 200 0050 8AE0      		ldi r24,lo8(10)
 201 0052 90E0      		ldi r25,hi8(10)
 202 0054 0E94 0000 		call delay
  40:main.c        ****   CS0;
 204               	.LM17:
 205 0058 DF98      		cbi 59-0x20,7
  41:main.c        ****   delay(5);
 207               	.LM18:
 208 005a 85E0      		ldi r24,lo8(5)
 209 005c 90E0      		ldi r25,hi8(5)
 210 005e 0E94 0000 		call delay
  42:main.c        ****   
  43:main.c        ****   for(i=0;i<num;i++)
 212               	.LM19:
 213 0062 C0E0      		ldi r28,lo8(0)
 214 0064 CF15      		cp r28,r15
 215 0066 00F5      		brsh .L35
 216               	.L31:
  44:main.c        ****   { 
  45:main.c        **** 	WR0;
 218               	.LM20:
 219 0068 DD98      		cbi 59-0x20,5
  46:main.c        **** 	delay(5);
 221               	.LM21:
 222 006a 85E0      		ldi r24,lo8(5)
 223 006c 90E0      		ldi r25,hi8(5)
 224 006e 0E94 0000 		call delay
  47:main.c        ****     if(senddata & _BV(i)) 
 226               	.LM22:
 227 0072 81E0      		ldi r24,lo8(1)
 228 0074 90E0      		ldi r25,hi8(1)
 229 0076 0C2E      		mov r0,r28
 230 0078 02C0      		rjmp 2f
 231 007a 880F      	1:	lsl r24
 232 007c 991F      		rol r25
 233 007e 0A94      	2:	dec r0
 234 0080 E2F7      		brpl 1b
 235 0082 8023      		and r24,r16
 236 0084 9123      		and r25,r17
 237 0086 892B      		or r24,r25
 238 0088 11F0      		breq .L26
  48:main.c        **** 		SEND1;
 240               	.LM23:
 241 008a DC9A      		sbi 59-0x20,4
 242 008c 01C0      		rjmp .L28
 243               	.L26:
  49:main.c        **** 	else 
  50:main.c        **** 		SEND0;	
 245               	.LM24:
 246 008e DC98      		cbi 59-0x20,4
 247               	.L28:
  51:main.c        ****     delay(10);	
 249               	.LM25:
 250 0090 8AE0      		ldi r24,lo8(10)
 251 0092 90E0      		ldi r25,hi8(10)
 252 0094 0E94 0000 		call delay
  52:main.c        ****     WR1;
 254               	.LM26:
 255 0098 DD9A      		sbi 59-0x20,5
  53:main.c        **** 	delay(10);
 257               	.LM27:
 258 009a 8AE0      		ldi r24,lo8(10)
 259 009c 90E0      		ldi r25,hi8(10)
 260 009e 0E94 0000 		call delay
 262               	.LM28:
 263 00a2 CF5F      		subi r28,lo8(-(1))
 264 00a4 CF15      		cp r28,r15
 265 00a6 00F3      		brlo .L31
 266               	.L35:
  54:main.c        ****   }
  55:main.c        ****   SEND1;
 268               	.LM29:
 269 00a8 DC9A      		sbi 59-0x20,4
  56:main.c        ****   CS1;
 271               	.LM30:
 272 00aa DF9A      		sbi 59-0x20,7
  57:main.c        **** }
 274               	.LM31:
 275               	.LBE6:
 276               	/* epilogue: frame size=0 */
 277 00ac CF91      		pop r28
 278 00ae 1F91      		pop r17
 279 00b0 0F91      		pop r16
 280 00b2 FF90      		pop r15
 281 00b4 0895      		ret
 282               	/* epilogue end (size=5) */
 283               	/* function send size 58 (49) */
 288               	.Lscope2:
 292               	.global	lcd_send_bit
 294               	lcd_send_bit:
  58:main.c        **** 
  59:main.c        **** #define LCD_CMD_INITIAL 0x29
  60:main.c        **** #define LCD_CMD_SEL_RC	0x18
  61:main.c        **** #define LCD_CMD_OP_RC	0x01
  62:main.c        **** #define LCD_CMD_OP_LCD	0x03
  63:main.c        **** #define LCD_CMD_CL_LCD	0x02
  64:main.c        **** void lcd_send_bit(uint8_t flag)
  65:main.c        **** {
 296               	.LM32:
 297               	/* prologue: frame size=0 */
 298 00b6 1F93      		push r17
 299               	/* prologue end (size=1) */
 300 00b8 182F      		mov r17,r24
  66:main.c        **** 	WR0;
 302               	.LM33:
 303 00ba DD98      		cbi 59-0x20,5
  67:main.c        **** 	delay(1);
 305               	.LM34:
 306 00bc 81E0      		ldi r24,lo8(1)
 307 00be 90E0      		ldi r25,hi8(1)
 308 00c0 0E94 0000 		call delay
  68:main.c        **** 	if(flag)
 310               	.LM35:
 311 00c4 1123      		tst r17
 312 00c6 11F0      		breq .L38
  69:main.c        **** 		SEND1;
 314               	.LM36:
 315 00c8 DC9A      		sbi 59-0x20,4
 316 00ca 01C0      		rjmp .L40
 317               	.L38:
  70:main.c        **** 	else
  71:main.c        **** 		SEND0;
 319               	.LM37:
 320 00cc DC98      		cbi 59-0x20,4
 321               	.L40:
  72:main.c        **** 	WR1;
 323               	.LM38:
 324 00ce DD9A      		sbi 59-0x20,5
  73:main.c        **** 	delay(1);
 326               	.LM39:
 327 00d0 81E0      		ldi r24,lo8(1)
 328 00d2 90E0      		ldi r25,hi8(1)
 329 00d4 0E94 0000 		call delay
  74:main.c        **** }
 331               	.LM40:
 332               	/* epilogue: frame size=0 */
 333 00d8 1F91      		pop r17
 334 00da 0895      		ret
 335               	/* epilogue end (size=2) */
 336               	/* function lcd_send_bit size 19 (16) */
 338               	.Lscope3:
 343               	.global	lcd_send_data
 345               	lcd_send_data:
  75:main.c        **** void lcd_send_data(uint8_t addr,uint8_t data)
  76:main.c        **** {
 347               	.LM41:
 348               	/* prologue: frame size=0 */
 349 00dc FF92      		push r15
 350 00de 0F93      		push r16
 351 00e0 1F93      		push r17
 352 00e2 CF93      		push r28
 353 00e4 DF93      		push r29
 354               	/* prologue end (size=5) */
 355 00e6 082F      		mov r16,r24
 356 00e8 F62E      		mov r15,r22
  77:main.c        **** 	uint8_t i;
  78:main.c        **** 	CS1;
 358               	.LM42:
 359               	.LBB7:
 360 00ea DF9A      		sbi 59-0x20,7
  79:main.c        **** 	delay(1);
 362               	.LM43:
 363 00ec 81E0      		ldi r24,lo8(1)
 364 00ee 90E0      		ldi r25,hi8(1)
 365 00f0 0E94 0000 		call delay
  80:main.c        **** 	CS0;
 367               	.LM44:
 368 00f4 DF98      		cbi 59-0x20,7
  81:main.c        **** 	delay(1);
 370               	.LM45:
 371 00f6 81E0      		ldi r24,lo8(1)
 372 00f8 90E0      		ldi r25,hi8(1)
 373 00fa 0E94 0000 		call delay
  82:main.c        **** 	lcd_send_bit(1);
 375               	.LM46:
 376 00fe 81E0      		ldi r24,lo8(1)
 377 0100 0E94 0000 		call lcd_send_bit
  83:main.c        **** 	lcd_send_bit(0);
 379               	.LM47:
 380 0104 80E0      		ldi r24,lo8(0)
 381 0106 0E94 0000 		call lcd_send_bit
  84:main.c        **** 	lcd_send_bit(1);
 383               	.LM48:
 384 010a 81E0      		ldi r24,lo8(1)
 385 010c 0E94 0000 		call lcd_send_bit

⌨️ 快捷键说明

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