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

📄 main.lst

📁 DS18B20做的温度计
💻 LST
📖 第 1 页 / 共 4 页
字号:
   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
  11               		.text
  12               	.Ltext0:
  93               	.global	delay
  95               	delay:
  97               	.Ltext1:
   1:./LCD1602.c   **** #define uchar unsigned char
   2:./LCD1602.c   **** #define uint unsigned int
   3:./LCD1602.c   **** #define ulong unsigned long
   4:./LCD1602.c   **** #define dat 1
   5:./LCD1602.c   **** #define com 0	
   6:./LCD1602.c   **** #include <avr/io.h>
   7:./LCD1602.c   **** #define DP PORTB		//模拟数居据总线
   8:./LCD1602.c   **** #define DR DDRB	
   9:./LCD1602.c   **** #define PP PINB
  10:./LCD1602.c   **** #define e_s PORTA|=0x20
  11:./LCD1602.c   **** #define e_c PORTA&=~0x20
  12:./LCD1602.c   **** #define rw_s PORTA|=0x40
  13:./LCD1602.c   **** #define rw_c PORTA&=~0x40
  14:./LCD1602.c   **** #define rs_s PORTA|=0x80
  15:./LCD1602.c   **** #define rs_c PORTA&=~0x80
  16:./LCD1602.c   **** 
  17:./LCD1602.c   **** void delay(uint t)  		//1mS延时7.3728M
  18:./LCD1602.c   **** {ulong i;
  99               	.LM1:
 100               	/* prologue: frame size=0 */
 101               	/* prologue end (size=0) */
 102               	.L113:
  19:./LCD1602.c   ****   while(t--)
  20:./LCD1602.c   ****    {for(i=0;i<50000;i++)
 104               	.LM2:
 105 0000 0197      		sbiw r24,1
 106 0002 2FEF      		ldi r18,hi8(-1)
 107 0004 8F3F      		cpi r24,lo8(-1)
 108 0006 9207      		cpc r25,r18
 109 0008 59F0      		breq .L10
 110 000a 2FE4      		ldi r18,lo8(49999)
 111 000c 33EC      		ldi r19,hi8(49999)
 112 000e 40E0      		ldi r20,hlo8(49999)
 113 0010 50E0      		ldi r21,hhi8(49999)
 114               	.L7:
 116               	.LM3:
 117 0012 2253      		subi r18,lo8(-(-50))
 118 0014 3040      		sbci r19,hi8(-(-50))
 119 0016 4040      		sbci r20,hlo8(-(-50))
 120 0018 5040      		sbci r21,hhi8(-(-50))
 121 001a 57FF      		sbrs r21,7
 122 001c FACF      		rjmp .L7
 123 001e F0CF      		rjmp .L113
 124               	.L10:
 125 0020 0895      		ret
 126               	/* epilogue: frame size=0 */
 127               	/* epilogue: noreturn */
 128               	/* epilogue end (size=0) */
 129               	/* function delay size 17 (17) */
 134               	.Lscope0:
 136               	.global	busy
 138               	busy:
  21:./LCD1602.c   ****      ;}
  22:./LCD1602.c   **** }
  23:./LCD1602.c   **** 
  24:./LCD1602.c   **** void busy(void)		//检查BF信号
  25:./LCD1602.c   **** {DR=0x00;			//设置为输入	
 140               	.LM4:
 141               	/* prologue: frame size=0 */
 142               	/* prologue end (size=0) */
 143 0022 17BA      		out 55-0x20,__zero_reg__
 144               	.L115:
  26:./LCD1602.c   ****  do
  27:./LCD1602.c   ****    {rs_c;rw_s;e_s;}
 146               	.LM5:
 147 0024 DF98      		cbi 59-0x20,7
 148 0026 DE9A      		sbi 59-0x20,6
 149 0028 DD9A      		sbi 59-0x20,5
 150 002a B799      		sbic 54-0x20,7
 151 002c FBCF      		rjmp .L115
  28:./LCD1602.c   ****  while((PP&0x80)!=0);					   //BUSY
  29:./LCD1602.c   ****  e_c;
 153               	.LM6:
 154 002e DD98      		cbi 59-0x20,5
  30:./LCD1602.c   ****  delay(3);
 156               	.LM7:
 157 0030 83E0      		ldi r24,lo8(3)
 158 0032 90E0      		ldi r25,hi8(3)
 159 0034 0E94 0000 		call delay
  31:./LCD1602.c   ****  DR=0xff;
 161               	.LM8:
 162 0038 8FEF      		ldi r24,lo8(-1)
 163 003a 87BB      		out 55-0x20,r24
 164               	/* epilogue: frame size=0 */
 165 003c 0895      		ret
 166               	/* epilogue end (size=1) */
 167               	/* function busy size 14 (13) */
 169               	.Lscope1:
 173               	.global	w_lcd
 175               	w_lcd:
  32:./LCD1602.c   **** }
  33:./LCD1602.c   **** 
  34:./LCD1602.c   **** void w_lcd(uchar a,uchar dat_com)		//向LCD写命令或数据,由dat_com决定
  35:./LCD1602.c   ****  {busy();
 177               	.LM9:
 178               	/* prologue: frame size=0 */
 179 003e 1F93      		push r17
 180 0040 CF93      		push r28
 181               	/* prologue end (size=2) */
 182 0042 C82F      		mov r28,r24
 183 0044 162F      		mov r17,r22
 184 0046 0E94 0000 		call busy
  36:./LCD1602.c   ****   if(dat_com==0)
 186               	.LM10:
 187 004a 1123      		tst r17
 188 004c 11F4      		brne .L119
  37:./LCD1602.c   ****      rs_c;
 190               	.LM11:
 191 004e DF98      		cbi 59-0x20,7
 192 0050 01C0      		rjmp .L120
 193               	.L119:
  38:./LCD1602.c   ****   else rs_s;
 195               	.LM12:
 196 0052 DF9A      		sbi 59-0x20,7
 197               	.L120:
  39:./LCD1602.c   ****   rw_c;
 199               	.LM13:
 200 0054 DE98      		cbi 59-0x20,6
  40:./LCD1602.c   ****   DP=a;
 202               	.LM14:
 203 0056 C8BB      		out 56-0x20,r28
  41:./LCD1602.c   ****   e_s;
 205               	.LM15:
 206 0058 DD9A      		sbi 59-0x20,5
  42:./LCD1602.c   ****   e_c;
 208               	.LM16:
 209 005a DD98      		cbi 59-0x20,5
 210               	/* epilogue: frame size=0 */
 211 005c CF91      		pop r28
 212 005e 1F91      		pop r17
 213 0060 0895      		ret
 214               	/* epilogue end (size=3) */
 215               	/* function w_lcd size 18 (13) */
 217               	.Lscope2:
 220               	.global	ww
 222               	ww:
  43:./LCD1602.c   **** }
  44:./LCD1602.c   **** 
  45:./LCD1602.c   **** void ww(uchar word[16])				//写n个字符
  46:./LCD1602.c   **** {uchar i;
 224               	.LM17:
 225               	/* prologue: frame size=0 */
 226 0062 1F93      		push r17
 227 0064 CF93      		push r28
 228 0066 DF93      		push r29
 229               	/* prologue end (size=3) */
 230 0068 EC01      		movw r28,r24
  47:./LCD1602.c   ****  for(i=0;word[i]!='\0';i++)
 232               	.LM18:
 233 006a 10E0      		ldi r17,lo8(0)
 234 006c 8881      		ld r24,Y
 235 006e 8823      		tst r24
 236 0070 71F0      		breq .L127
 237               	.L125:
  48:./LCD1602.c   ****    w_lcd(word[i],dat);
 239               	.LM19:
 240 0072 FE01      		movw r30,r28
 241 0074 E10F      		add r30,r17
 242 0076 F11D      		adc r31,__zero_reg__
 243 0078 61E0      		ldi r22,lo8(1)
 244 007a 8081      		ld r24,Z
 245 007c 0E94 0000 		call w_lcd
 247               	.LM20:
 248 0080 1F5F      		subi r17,lo8(-(1))
 249 0082 FE01      		movw r30,r28
 250 0084 E10F      		add r30,r17
 251 0086 F11D      		adc r31,__zero_reg__
 252 0088 8081      		ld r24,Z
 253 008a 8823      		tst r24
 254 008c 91F7      		brne .L125
 255               	.L127:
 256               	/* epilogue: frame size=0 */
 257 008e DF91      		pop r29
 258 0090 CF91      		pop r28
 259 0092 1F91      		pop r17
 260 0094 0895      		ret
 261               	/* epilogue end (size=4) */
 262               	/* function ww size 26 (19) */
 267               	.Lscope3:
 270               	.global	wn
 272               	wn:
  49:./LCD1602.c   **** }
  50:./LCD1602.c   **** 
  51:./LCD1602.c   **** void wn(uchar num)				//写数字
  52:./LCD1602.c   **** {w_lcd(num+0x30,dat);
 274               	.LM21:
 275               	/* prologue: frame size=0 */
 276               	/* prologue end (size=0) */
 277 0096 61E0      		ldi r22,lo8(1)
 278 0098 805D      		subi r24,lo8(-(48))
 279 009a 0E94 0000 		call w_lcd
 280               	/* epilogue: frame size=0 */
 281 009e 0895      		ret
 282               	/* epilogue end (size=1) */
 283               	/* function wn size 5 (4) */
 285               	.Lscope4:
 289               	.global	go
 291               	go:
  53:./LCD1602.c   **** }
  54:./LCD1602.c   **** 
  55:./LCD1602.c   **** void go(uchar xxx,uchar yyy)				//光标移到(xxxx,yyy)
  56:./LCD1602.c   **** { uchar tmp;
 293               	.LM22:
 294               	/* prologue: frame size=0 */
 295               	/* prologue end (size=0) */
 296 00a0 982F      		mov r25,r24
  57:./LCD1602.c   ****   if(yyy==0)
 298               	.LM23:
 299 00a2 6623      		tst r22
 300 00a4 19F4      		brne .L130
  58:./LCD1602.c   ****     tmp=0x80+xxx;
 302               	.LM24:
 303 00a6 892F      		mov r24,r25
 304 00a8 8058      		subi r24,lo8(-(-128))
 305 00aa 02C0      		rjmp .L131
 306               	.L130:
  59:./LCD1602.c   ****   else
  60:./LCD1602.c   ****     tmp=0xc0+xxx;
 308               	.LM25:
 309 00ac 892F      		mov r24,r25
 310 00ae 8054      		subi r24,lo8(-(-64))
 311               	.L131:
  61:./LCD1602.c   ****   w_lcd(tmp,com);
 313               	.LM26:
 314 00b0 60E0      		ldi r22,lo8(0)
 315 00b2 0E94 0000 		call w_lcd
 316               	/* epilogue: frame size=0 */
 317 00b6 0895      		ret
 318               	/* epilogue end (size=1) */
 319               	/* function go size 12 (11) */
 324               	.Lscope5:
 326               	.global	ini
 328               	ini:
  62:./LCD1602.c   **** }
  63:./LCD1602.c   **** 
  64:./LCD1602.c   **** void ini(void)							//初始化
  65:./LCD1602.c   **** { delay(15);
 330               	.LM27:
 331               	/* prologue: frame size=0 */
 332               	/* prologue end (size=0) */
 333 00b8 8FE0      		ldi r24,lo8(15)
 334 00ba 90E0      		ldi r25,hi8(15)
 335 00bc 0E94 0000 		call delay
  66:./LCD1602.c   ****   w_lcd(0x38,com);
 337               	.LM28:
 338 00c0 60E0      		ldi r22,lo8(0)
 339 00c2 88E3      		ldi r24,lo8(56)
 340 00c4 0E94 0000 		call w_lcd
  67:./LCD1602.c   ****   delay(5);
 342               	.LM29:
 343 00c8 85E0      		ldi r24,lo8(5)
 344 00ca 90E0      		ldi r25,hi8(5)
 345 00cc 0E94 0000 		call delay
  68:./LCD1602.c   ****   w_lcd(0x38,com);
 347               	.LM30:
 348 00d0 60E0      		ldi r22,lo8(0)
 349 00d2 88E3      		ldi r24,lo8(56)
 350 00d4 0E94 0000 		call w_lcd
  69:./LCD1602.c   ****   delay(5);
 352               	.LM31:
 353 00d8 85E0      		ldi r24,lo8(5)
 354 00da 90E0      		ldi r25,hi8(5)
 355 00dc 0E94 0000 		call delay
  70:./LCD1602.c   ****   w_lcd(0x38,com);
 357               	.LM32:
 358 00e0 60E0      		ldi r22,lo8(0)
 359 00e2 88E3      		ldi r24,lo8(56)
 360 00e4 0E94 0000 		call w_lcd
  71:./LCD1602.c   ****   delay(10);
 362               	.LM33:
 363 00e8 8AE0      		ldi r24,lo8(10)
 364 00ea 90E0      		ldi r25,hi8(10)
 365 00ec 0E94 0000 		call delay
  72:./LCD1602.c   ****   w_lcd(0x01,com);					//显示清0
 367               	.LM34:
 368 00f0 60E0      		ldi r22,lo8(0)
 369 00f2 81E0      		ldi r24,lo8(1)
 370 00f4 0E94 0000 		call w_lcd
 371               	/* epilogue: frame size=0 */
 372 00f8 0895      		ret
 373               	/* epilogue end (size=1) */
 374               	/* function ini size 33 (32) */
 376               	.Lscope6:
 379               	.global	set
 381               	set:
  73:./LCD1602.c   ****   
  74:./LCD1602.c   **** }
  75:./LCD1602.c   **** /*显视方式参数说明:
  76:./LCD1602.c   ****   0:关显视
  77:./LCD1602.c   ****   1:不显示光标,写一个字符光标加1,指针加1
  78:./LCD1602.c   ****   2:显示光标,写一个字符光标加1,指针加1
  79:./LCD1602.c   ****   3:不显示光标,写一个字符光标不变,指针加1,整屏显视左移
  80:./LCD1602.c   ****   4:显示光标,写一个字符光标不变,指针加1,整屏显视左移
  81:./LCD1602.c   **** */
  82:./LCD1602.c   **** void set(uchar way)					//显视方式设置,其中way是方式参数
  83:./LCD1602.c   **** {if(way==0)							//关显视
 383               	.LM35:
 384               	/* prologue: frame size=0 */
 385               	/* prologue end (size=0) */
 386 00fa 682F      		mov r22,r24
 387 00fc 8823      		tst r24
 388 00fe 11F4      		brne .L134
  84:./LCD1602.c   ****    w_lcd(0x08,com);
 390               	.LM36:
 391 0100 88E0      		ldi r24,lo8(8)
 392 0102 08C0      		rjmp .L143
 393               	.L134:
  85:./LCD1602.c   ****  else if(way==1)							//不显视光标,光标、数据指针加1
 395               	.LM37:
 396 0104 8130      		cpi r24,lo8(1)
 397 0106 49F4      		brne .L136
  86:./LCD1602.c   ****    w_lcd(0x0c,com),
 399               	.LM38:

⌨️ 快捷键说明

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