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

📄 demo.lst

📁 avr单片机的一些实际应用源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"demo.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:
  67               	.global	reset
  68               	.global	reset
  69               		.section .bss
  72               	reset:
  73 0000 0000      		.skip 2,0
  74               	.global	g_wPageIndex
  75               	.global	g_wPageIndex
  78               	g_wPageIndex:
  79 0002 0000      		.skip 2,0
  80               		.text
  83               	.global	uart_putc
  85               	uart_putc:
   1:demo.c        **** /*
   2:demo.c        **** 	LuckyProg Mega8 BootLoader 引导程序 V1.0	
   3:demo.c        **** 		
   4:demo.c        **** 	文件名	:	demo.c
   5:demo.c        **** 	作    者: 	芯 艺
   6:demo.c        **** 	更新时间:	2004-08-30
   7:demo.c        **** 	
   8:demo.c        **** 	CPU 	:	ATMEGA8
   9:demo.c        **** 	时    钟:	4MHz
  10:demo.c        **** 	编    译:	WinAVR-20040720	
  11:demo.c        **** 	
  12:demo.c        **** 	E-mail	:	changfutong@sina.com
  13:demo.c        **** 	MSN		:	changfutong@hotmail.com
  14:demo.c        **** 	OICQ	:	27796915
  15:demo.c        **** 	欢迎访问: http://BitFu.yeah.net
  16:demo.c        **** 	
  17:demo.c        **** 
  18:demo.c        **** 	注:本程序在硬件上调试通过,
  19:demo.c        **** 	与计算机程序LuckyProg Mega8 BootLoader(LuckyProg M8BL)配合使用。
  20:demo.c        **** 
  21:demo.c        **** */
  22:demo.c        **** 
  23:demo.c        **** #include <avr/io.h>
  24:demo.c        **** #include <avr/pgmspace.h>
  25:demo.c        **** #include <avr/boot.h>
  26:demo.c        **** 
  27:demo.c        **** #define uchar unsigned char
  28:demo.c        **** #define uint unsigned int
  29:demo.c        **** 
  30:demo.c        **** #define FREQ 4
  31:demo.c        **** #define UART_ACK 0XAA
  32:demo.c        **** 
  33:demo.c        **** #define PAGE_SIZE 64
  34:demo.c        **** 
  35:demo.c        **** uint g_wPageIndex=0;
  36:demo.c        **** uchar g_aPageTemp[PAGE_SIZE];
  37:demo.c        **** 
  38:demo.c        **** void (*reset)(void)=0x0000;
  39:demo.c        **** 
  40:demo.c        **** void uart_putc(uchar c)
  41:demo.c        **** {
  87               	.LM1:
  88               	/* prologue: frame size=0 */
  89               	/* prologue end (size=0) */
  90               	.L2:
  42:demo.c        **** 	while( !(UCSRA & (1<<UDRE)) );
  92               	.LM2:
  93 0000 5D9B      		sbis 43-0x20,5
  94 0002 FECF      		rjmp .L2
  43:demo.c        **** 	UDR=c;
  96               	.LM3:
  97 0004 8CB9      		out 44-0x20,r24
  98               	/* epilogue: frame size=0 */
  99 0006 0895      		ret
 100               	/* epilogue end (size=1) */
 101               	/* function uart_putc size 4 (3) */
 104               	.global	uart_getc
 106               	uart_getc:
  44:demo.c        **** }
  45:demo.c        **** 
  46:demo.c        **** uchar uart_getc(void)
  47:demo.c        **** {
 108               	.LM4:
 109               	/* prologue: frame size=0 */
 110               	/* prologue end (size=0) */
 111               	.L6:
  48:demo.c        **** 	while( !(UCSRA & (1<<RXC)) );	
 113               	.LM5:
 114 0008 5F9B      		sbis 43-0x20,7
 115 000a FECF      		rjmp .L6
  49:demo.c        **** 	return UDR;
 117               	.LM6:
 118 000c 8CB1      		in r24,44-0x20
  50:demo.c        **** }
 120               	.LM7:
 121 000e 9927      		clr r25
 122               	/* epilogue: frame size=0 */
 123 0010 0895      		ret
 124               	/* epilogue end (size=1) */
 125               	/* function uart_getc size 5 (4) */
 128               	.global	WritePage
 130               	WritePage:
  51:demo.c        **** 
  52:demo.c        **** void WritePage(void)
  53:demo.c        **** {
 132               	.LM8:
 133               	/* prologue: frame size=0 */
 134 0012 0F93      		push r16
 135 0014 1F93      		push r17
 136 0016 CF93      		push r28
 137               	/* prologue end (size=3) */
 138 0018 00E0      		ldi r16,lo8(g_aPageTemp)
 139 001a 10E0      		ldi r17,hi8(g_aPageTemp)
 140 001c CFE3      		ldi r28,lo8(63)
 141               	.L13:
  54:demo.c        **** 	uchar i;
  55:demo.c        **** 	
  56:demo.c        **** 	//	接收当前页面数据
  57:demo.c        **** 	for(i=0;i<PAGE_SIZE;i++)
  58:demo.c        **** 		g_aPageTemp[i]=uart_getc();
 143               	.LM9:
 144 001e F4DF      		rcall uart_getc
 145 0020 F801      		movw r30,r16
 146 0022 8193      		st Z+,r24
 147 0024 8F01      		movw r16,r30
 149               	.LM10:
 150 0026 C150      		subi r28,lo8(-(-1))
 151 0028 C7FF      		sbrs r28,7
 152 002a F9CF      		rjmp .L13
 153               	.L14:
 154               	.LBB2:
  59:demo.c        **** 	
  60:demo.c        **** 	//	页擦除操作
  61:demo.c        ****     boot_page_erase(g_wPageIndex<<6);
 156               	.LM11:
 157 002c 07B6      		in __tmp_reg__,87-0x20
 158 002e 00FC      		sbrc __tmp_reg__,0
 159 0030 FDCF      		rjmp .L14
 160               	.L17:
 161 0032 E199      		sbic 60-0x20,1
 162 0034 FECF      		rjmp .L17
 163 0036 23E0      		ldi r18,lo8(3)
 164 0038 4091 0000 		lds r20,g_wPageIndex
 165 003c 5091 0000 		lds r21,(g_wPageIndex)+1
 166 0040 CA01      		movw r24,r20
 167 0042 66E0      		ldi r22,6
 168 0044 880F      	1:	lsl r24
 169 0046 991F      		rol r25
 170 0048 6A95      		dec r22
 171 004a E1F7      		brne 1b
 172               	/* #APP */
 173 004c FC01      		movw r30, r24
 174 004e 2093 5700 		sts 87, r18
 175 0052 E895      		spm
 176               		
 177               	/* #NOAPP */
 178               	.LBE2:
  62:demo.c        ****     while(boot_rww_busy())
  63:demo.c        ****         boot_rww_enable();
 180               	.LM12:
 181 0054 07B6      		in __tmp_reg__,87-0x20
 182 0056 06FE      		sbrs __tmp_reg__,6
 183 0058 0CC0      		rjmp .L56
 184 005a 81E1      		ldi r24,lo8(17)
 185               	.L69:
 186               	.LBB3:
 187 005c 07B6      		in __tmp_reg__,87-0x20
 188 005e 00FC      		sbrc __tmp_reg__,0
 189 0060 FDCF      		rjmp .L69
 190               	.L25:
 191 0062 E199      		sbic 60-0x20,1
 192 0064 FECF      		rjmp .L25
 193               	/* #APP */
 194 0066 8093 5700 		sts 87, r24
 195 006a E895      		spm
 196               		
 197               	/* #NOAPP */
 198               	.LBE3:
 199 006c 07B6      		in __tmp_reg__,87-0x20
 200 006e 06FC      		sbrc __tmp_reg__,6
 201 0070 F5CF      		rjmp .L69
 202               	.L56:
  64:demo.c        **** 
  65:demo.c        **** 	//	填充缓冲页
  66:demo.c        ****     for(i = 0; i < PAGE_SIZE; i += 2)
 204               	.LM13:
 205 0072 C0E0      		ldi r28,lo8(0)
 206 0074 61E0      		ldi r22,lo8(1)
 207               	.L70:
 208               	.LBB4:
  67:demo.c        ****         boot_page_fill((unsigned long)i,*((uint *)(g_aPageTemp +i)));
 210               	.LM14:
 211 0076 07B6      		in __tmp_reg__,87-0x20
 212 0078 00FC      		sbrc __tmp_reg__,0
 213 007a FDCF      		rjmp .L70
 214               	.L35:
 215 007c E199      		sbic 60-0x20,1
 216 007e FECF      		rjmp .L35
 217 0080 8C2F      		mov r24,r28
 218 0082 9927      		clr r25
 219 0084 FC01      		movw r30,r24
 220 0086 E050      		subi r30,lo8(-(g_aPageTemp))
 221 0088 F040      		sbci r31,hi8(-(g_aPageTemp))
 222 008a 2081      		ld r18,Z
 223 008c 3181      		ldd r19,Z+1
 224               	/* #APP */
 225 008e 0901      		movw  r0, r18
 226 0090 FC01      		movw r30, r24
 227 0092 6093 5700 		sts 87, r22
 228 0096 E895      		spm
 229 0098 1124      		clr  r1
 230               		
 231               	/* #NOAPP */
 232               	.LBE4:
 234               	.LM15:
 235 009a CE5F      		subi r28,lo8(-(2))
 236 009c C034      		cpi r28,lo8(64)
 237 009e 58F3      		brlo .L70
 238               	.L39:
 239               	.LBB5:
  68:demo.c        **** 
  69:demo.c        ****     //	页写入操作
  70:demo.c        ****     boot_page_write(g_wPageIndex<<6);
 241               	.LM16:
 242 00a0 07B6      		in __tmp_reg__,87-0x20
 243 00a2 00FC      		sbrc __tmp_reg__,0
 244 00a4 FDCF      		rjmp .L39
 245               	.L42:
 246 00a6 E199      		sbic 60-0x20,1
 247 00a8 FECF      		rjmp .L42
 248 00aa 25E0      		ldi r18,lo8(5)
 249 00ac CA01      		movw r24,r20
 250 00ae 36E0      		ldi r19,6
 251 00b0 880F      	1:	lsl r24
 252 00b2 991F      		rol r25
 253 00b4 3A95      		dec r19
 254 00b6 E1F7      		brne 1b
 255               	/* #APP */
 256 00b8 FC01      		movw r30, r24
 257 00ba 2093 5700 		sts 87, r18
 258 00be E895      		spm

⌨️ 快捷键说明

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