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

📄 disp.lst

📁 winAVR编写的MEGA16内部EEPROM读写程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"disp.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:
  79               	.global	NumTab
  80               		.data
  83               	NumTab:
  84 0000 C0        		.byte	-64
  85 0001 F9        		.byte	-7
  86 0002 A4        		.byte	-92
  87 0003 B0        		.byte	-80
  88 0004 99        		.byte	-103
  89 0005 92        		.byte	-110
  90 0006 82        		.byte	-126
  91 0007 F8        		.byte	-8
  92 0008 80        		.byte	-128
  93 0009 90        		.byte	-112
  94 000a 88        		.byte	-120
  95 000b 83        		.byte	-125
  96 000c C6        		.byte	-58
  97 000d A1        		.byte	-95
  98 000e 86        		.byte	-122
  99 000f 8E        		.byte	-114
 100 0010 7F        		.byte	127
 101 0011 FF        		.byte	-1
 102 0012 00        		.skip 1,0
 103               		.text
 106               	.global	DispData
 108               	DispData:
   1:disp.c        **** #include <inttypes.h>
   2:disp.c        **** #include <util/delay.h>
   3:disp.c        **** #include <avr/io.h>
   4:disp.c        **** #include <avr/interrupt.h>
   5:disp.c        **** #include <stdio.h>
   6:disp.c        **** //#include "type.h"
   7:disp.c        **** #include "disp.h"
   8:disp.c        **** /*
   9:disp.c        ****  * 74HC138  INPUT  A B C : PA5  PA6  PA7
  10:disp.c        ****  * Data PORT:  74HC595的ST对应NCS :PA2 
  11:disp.c        ****  *                      SH对应SCK :PA3
  12:disp.c        ****  *                      DS对应MOSI:PA4
  13:disp.c        ****  *
  14:disp.c        **** */ 
  15:disp.c        **** #define DispSel(x)   (PORTA=((PORTA&0x1f)|(x<<5)))
  16:disp.c        **** 
  17:disp.c        **** #define NCS_PIN  PA2
  18:disp.c        **** #define NCS_DDR  DDRA
  19:disp.c        **** #define NCS_PORT  PORTA
  20:disp.c        **** 
  21:disp.c        **** #define SCK_PIN PA3
  22:disp.c        **** #define SCK_DDR DDRA
  23:disp.c        **** #define SCK_PORT PORTA
  24:disp.c        **** 
  25:disp.c        **** #define MOSI_PIN PA4
  26:disp.c        **** #define MOSI_DDR DDRA
  27:disp.c        **** #define MOSI_PORT PORTA
  28:disp.c        **** 
  29:disp.c        **** 
  30:disp.c        **** #define NCS_SET  (NCS_PORT|=(1<<NCS_PIN))
  31:disp.c        **** #define NCS_CLR  (NCS_PORT&=~(1<<NCS_PIN))
  32:disp.c        **** 
  33:disp.c        **** #define SCK_SET  (SCK_PORT|=(1<<SCK_PIN))
  34:disp.c        **** #define SCK_CLR  (SCK_PORT&=~(1<<SCK_PIN))
  35:disp.c        **** 
  36:disp.c        **** #define MOSI_SET  (MOSI_PORT|=(1<<MOSI_PIN))
  37:disp.c        **** #define MOSI_CLR  (MOSI_PORT&=~(1<<MOSI_PIN))
  38:disp.c        **** 
  39:disp.c        **** //四位共阳数码管码
  40:disp.c        **** //PB 0 1 2 3 4 5 6 7
  41:disp.c        **** //   a b c d e f g h
  42:disp.c        **** //                    0,   1,   2,   3,   4,   5,   6,   7,   8,   9,    a,   b,   c,   d,   e,   f
  43:disp.c        **** const uint8_t NumTab[19]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x8
  44:disp.c        **** //uint8_t DispBuf[8];
  45:disp.c        **** 
  46:disp.c        **** /*
  47:disp.c        **** #define DispPortInit()  do{\
  48:disp.c        **** NCS_DDR|=(1<<NCS_PIN);\
  49:disp.c        **** SCK_DDR|=(1<<SCK_PIN);\
  50:disp.c        **** MOSI_DDR|=(1<<MOSI_PIN);\
  51:disp.c        **** DispData(0xff);\
  52:disp.c        **** DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);\
  53:disp.c        **** }while(0)
  54:disp.c        **** */
  55:disp.c        **** void DispData(uint8_t x)
  56:disp.c        **** {
 110               	.LM1:
 111               	/* prologue: frame size=2 */
 112 0000 CF93      		push r28
 113 0002 DF93      		push r29
 114 0004 CDB7      		in r28,__SP_L__
 115 0006 DEB7      		in r29,__SP_H__
 116 0008 2297      		sbiw r28,2
 117 000a 0FB6      		in __tmp_reg__,__SREG__
 118 000c F894      		cli
 119 000e DEBF      		out __SP_H__,r29
 120 0010 0FBE      		out __SREG__,__tmp_reg__
 121 0012 CDBF      		out __SP_L__,r28
 122               	/* prologue end (size=10) */
 123 0014 8983      		std Y+1,r24
  57:disp.c        **** 	uint8_t i;
  58:disp.c        **** 	NCS_CLR;
 125               	.LM2:
 126 0016 8091 3B00 		lds r24,59
 127 001a 8B7F      		andi r24,lo8(-5)
 128 001c 8093 3B00 		sts 59,r24
  59:disp.c        **** 	SCK_CLR;
 130               	.LM3:
 131 0020 8091 3B00 		lds r24,59
 132 0024 877F      		andi r24,lo8(-9)
 133 0026 8093 3B00 		sts 59,r24
  60:disp.c        **** 	for(i=0;i<8;i++)
 135               	.LM4:
 136 002a 1A82      		std Y+2,__zero_reg__
 137               	.L2:
 139               	.LM5:
 140 002c 8A81      		ldd r24,Y+2
 141 002e 8830      		cpi r24,lo8(8)
 142 0030 F8F4      		brsh .L3
  61:disp.c        **** 	{
  62:disp.c        **** 		if(x&0x80)            //一位一位数据通过MOSI(PA4)输出,先输出高位
 144               	.LM6:
 145 0032 8981      		ldd r24,Y+1
 146 0034 8823      		tst r24
 147 0036 34F4      		brge .L5
  63:disp.c        **** 		MOSI_SET;
 149               	.LM7:
 150 0038 8091 3B00 		lds r24,59
 151 003c 8061      		ori r24,lo8(16)
 152 003e 8093 3B00 		sts 59,r24
 153 0042 05C0      		rjmp .L6
 154               	.L5:
  64:disp.c        **** 		else MOSI_CLR;
 156               	.LM8:
 157 0044 8091 3B00 		lds r24,59
 158 0048 8F7E      		andi r24,lo8(-17)
 159 004a 8093 3B00 		sts 59,r24
 160               	.L6:
  65:disp.c        **** 		SCK_SET;              //上升沿有效,SCK对应74HC595的ST_CP,逐位移位输入,但Qn引脚不改变
 162               	.LM9:
 163 004e 8091 3B00 		lds r24,59
 164 0052 8860      		ori r24,lo8(8)
 165 0054 8093 3B00 		sts 59,r24
  66:disp.c        **** 		SCK_CLR;
 167               	.LM10:
 168 0058 8091 3B00 		lds r24,59
 169 005c 877F      		andi r24,lo8(-9)
 170 005e 8093 3B00 		sts 59,r24
  67:disp.c        **** 		x<<=1;
 172               	.LM11:
 173 0062 8981      		ldd r24,Y+1
 174 0064 880F      		lsl r24
 175 0066 8983      		std Y+1,r24
 177               	.LM12:
 178 0068 8A81      		ldd r24,Y+2
 179 006a 8F5F      		subi r24,lo8(-(1))
 180 006c 8A83      		std Y+2,r24
 181 006e DECF      		rjmp .L2
 182               	.L3:
  68:disp.c        **** 	}
  69:disp.c        **** 	NCS_SET;                //上升沿有效,NSC对应74HC595的SH_CP,当8位数据均移入后,才改变Qn的引脚电平
 184               	.LM13:
 185 0070 8091 3B00 		lds r24,59
 186 0074 8460      		ori r24,lo8(4)
 187 0076 8093 3B00 		sts 59,r24
 188               	/* epilogue: frame size=2 */
 189 007a 2296      		adiw r28,2
 190 007c 0FB6      		in __tmp_reg__,__SREG__
 191 007e F894      		cli
 192 0080 DEBF      		out __SP_H__,r29
 193 0082 0FBE      		out __SREG__,__tmp_reg__
 194 0084 CDBF      		out __SP_L__,r28
 195 0086 DF91      		pop r29
 196 0088 CF91      		pop r28
 197 008a 0895      		ret
 198               	/* epilogue end (size=9) */
 199               	/* function DispData size 70 (51) */
 204               	.Lscope0:
 206               	.global	DispPortInit
 208               	DispPortInit:
  70:disp.c        **** }
  71:disp.c        **** 
  72:disp.c        **** void DispPortInit(void)
  73:disp.c        **** {
 210               	.LM14:
 211               	/* prologue: frame size=0 */
 212 008c CF93      		push r28
 213 008e DF93      		push r29
 214 0090 CDB7      		in r28,__SP_L__
 215 0092 DEB7      		in r29,__SP_H__
 216               	/* prologue end (size=4) */
  74:disp.c        **** 	NCS_DDR|=(1<<NCS_PIN);
 218               	.LM15:
 219 0094 8091 3A00 		lds r24,58
 220 0098 8460      		ori r24,lo8(4)
 221 009a 8093 3A00 		sts 58,r24
  75:disp.c        **** 	SCK_DDR|=(1<<SCK_PIN);
 223               	.LM16:
 224 009e 8091 3A00 		lds r24,58
 225 00a2 8860      		ori r24,lo8(8)
 226 00a4 8093 3A00 		sts 58,r24
  76:disp.c        **** 	MOSI_DDR|=(1<<MOSI_PIN);
 228               	.LM17:
 229 00a8 8091 3A00 		lds r24,58
 230 00ac 8061      		ori r24,lo8(16)
 231 00ae 8093 3A00 		sts 58,r24
  77:disp.c        **** 	DispData(NumTab[17]);
 233               	.LM18:
 234 00b2 8091 0000 		lds r24,NumTab+17
 235 00b6 0E94 0000 		call DispData
  78:disp.c        **** 	DDRA|=(1<<PA5)|(1<<PA6)|(1<<PA7);
 237               	.LM19:
 238 00ba 8091 3A00 		lds r24,58
 239 00be 806E      		ori r24,lo8(-32)
 240 00c0 8093 3A00 		sts 58,r24
 241               	/* epilogue: frame size=0 */
 242 00c4 DF91      		pop r29
 243 00c6 CF91      		pop r28
 244 00c8 0895      		ret
 245               	/* epilogue end (size=3) */
 246               	/* function DispPortInit size 31 (24) */
 248               	.Lscope1:
 251               	.global	Disp
 253               	Disp:
  79:disp.c        **** }
  80:disp.c        **** 
  81:disp.c        **** void Disp(uint8_t  *p)
  82:disp.c        **** {
 255               	.LM20:
 256               	/* prologue: frame size=15 */
 257 00ca CF93      		push r28
 258 00cc DF93      		push r29
 259 00ce CDB7      		in r28,__SP_L__
 260 00d0 DEB7      		in r29,__SP_H__
 261 00d2 2F97      		sbiw r28,15
 262 00d4 0FB6      		in __tmp_reg__,__SREG__
 263 00d6 F894      		cli
 264 00d8 DEBF      		out __SP_H__,r29
 265 00da 0FBE      		out __SREG__,__tmp_reg__

⌨️ 快捷键说明

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