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

📄 main.lst

📁 我学习AVR的代码例子
💻 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:
  92               	.global	date
  93               		.data
  96               	date:
  97 0000 0100      		.word	1
  98               	.global	month
 101               	month:
 102 0002 0100      		.word	1
 103               	.global	S
 104               		.section	.progmem.data,"a",@progbits
 107               	S:
 108 0000 AF        		.byte	-81
 109 0001 06        		.byte	6
 110 0002 6D        		.byte	109
 111 0003 4F        		.byte	79
 112 0004 C6        		.byte	-58
 113 0005 CB        		.byte	-53
 114 0006 EB        		.byte	-21
 115 0007 0E        		.byte	14
 116 0008 EF        		.byte	-17
 117 0009 CF        		.byte	-49
 118 000a 00        		.byte	0
 119               		.text
 121               	.global	port_init
 123               	port_init:
   1:main.c        **** //编译gccavr
   2:main.c        **** //m16
   3:main.c        **** #include <avr/io.h>
   4:main.c        **** //#include <avr/signal.h>
   5:main.c        **** #include <avr/interrupt.h>
   6:main.c        **** #include <util/delay.h>
   7:main.c        **** #include <avr/pgmspace.h>
   8:main.c        **** //#include <avr/twi.h>
   9:main.c        **** //#include <compat/twi.h>
  10:main.c        **** //#include <stdio.h>
  11:main.c        **** 
  12:main.c        **** #define LOBYTE(a) ((BYTE)(a&0X0f))
  13:main.c        **** #define HIBYTE(a) ((BYTE)((a)>>4))
  14:main.c        **** /*
  15:main.c        **** #define LOBCD(b) (b%10)
  16:main.c        **** #define HIBCD(b) (b/10)
  17:main.c        **** #define BCD(c) (((c/10)<<4)|LOBYTE(c%10))
  18:main.c        **** #define DEC(d) (HIBYTE(d)*10+LOBYTE(d))
  19:main.c        **** 
  20:main.c        **** 
  21:main.c        **** #define down() (MCUCR =0x60)
  22:main.c        **** #define int1() (GICR =0x80)
  23:main.c        **** #define int1_off() (GICR =0x00)
  24:main.c        **** */
  25:main.c        **** 
  26:main.c        **** //TWI状态定义
  27:main.c        **** //MT 主方式传输  MR 主方式接收
  28:main.c        **** #define START 0x08
  29:main.c        **** #define RE_START 0x10
  30:main.c        **** #define MT_SLA_ACK 0x18
  31:main.c        **** #define MT_SLA_NOACK 0x20
  32:main.c        **** #define MT_DATA_ACK  0x28
  33:main.c        **** #define MT_DATA_NOACK 0x30
  34:main.c        **** #define MR_SLA_ACK  0x40
  35:main.c        **** #define MR_SLA_NOACK 0x48
  36:main.c        **** #define MR_DATA_ACK 0x50
  37:main.c        **** #define MR_DATA_NOACK 0x58
  38:main.c        **** 
  39:main.c        **** #define rd_device_add 0xd1
  40:main.c        **** #define wr_device_add 0xd0
  41:main.c        **** //常用TWI操作(主模式写和主模式读)
  42:main.c        **** #define Start()    	  (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
  43:main.c        **** #define Stop()     	  (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
  44:main.c        **** #define Wait()	   	  {while(!(TWCR&(1<<TWINT)));}
  45:main.c        **** #define TestAck() 	  (TWSR&0xf8)
  46:main.c        **** #define SetAck()	  (TWCR|=(1<<TWEA))
  47:main.c        **** #define SetNoAck()        (TWCR&=~(1<<TWEA))
  48:main.c        **** #define Twi()	  	  (TWCR=(1<<TWINT)|(1<<TWEN))
  49:main.c        **** #define Write8Bit(x)      {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
  50:main.c        **** 
  51:main.c        **** #define SS PB4
  52:main.c        **** #define MOSI PB5
  53:main.c        **** #define SCK PB7
  54:main.c        **** 
  55:main.c        **** typedef unsigned char BYTE;
  56:main.c        **** typedef unsigned int WORD;
  57:main.c        **** typedef unsigned long DWORD;
  58:main.c        **** //prog_uchar
  59:main.c        **** const unsigned char S[11]  PROGMEM={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
  60:main.c        **** 
  61:main.c        **** volatile int month=1;//1~12
  62:main.c        **** volatile int date=1;//1~31
  63:main.c        **** volatile int hours;//0~23
  64:main.c        **** volatile int minutes;//0~59
  65:main.c        **** volatile BYTE senconds;//0~59
  66:main.c        **** 
  67:main.c        **** 
  68:main.c        **** volatile BYTE a,b,c;
  69:main.c        **** 
  70:main.c        **** void port_init(void)//口方向设置
  71:main.c        **** {
 125               	.LM1:
 126               	/* prologue: frame size=0 */
 127               	/* prologue end (size=0) */
  72:main.c        **** 	DDRA  = 0x00;
 129               	.LM2:
 130 0000 1ABA      		out 58-0x20,__zero_reg__
  73:main.c        **** 	PORTA = 0x00;
 132               	.LM3:
 133 0002 1BBA      		out 59-0x20,__zero_reg__
  74:main.c        **** 	DDRB  = 0xff;
 135               	.LM4:
 136 0004 8FEF      		ldi r24,lo8(-1)
 137 0006 87BB      		out 55-0x20,r24
  75:main.c        **** 	DDRC = 0XFC;
 139               	.LM5:
 140 0008 8CEF      		ldi r24,lo8(-4)
 141 000a 84BB      		out 52-0x20,r24
  76:main.c        **** 	DDRD  = 0xF0;
 143               	.LM6:
 144 000c 80EF      		ldi r24,lo8(-16)
 145 000e 81BB      		out 49-0x20,r24
 146               	/* epilogue: frame size=0 */
 147 0010 0895      		ret
 148               	/* epilogue end (size=1) */
 149               	/* function port_init size 9 (8) */
 151               	.Lscope0:
 154               	.global	delay_us
 156               	delay_us:
  77:main.c        **** }
  78:main.c        **** 
  79:main.c        **** void delay_us(int time)//微秒级延时程序
  80:main.c        ****  {     
 158               	.LM7:
 159               	/* prologue: frame size=0 */
 160               	/* prologue end (size=0) */
 161               	.L3:
  81:main.c        ****    do
  82:main.c        **** 	 {
  83:main.c        **** 	   time--;
 163               	.LM8:
 164 0012 0197      		sbiw r24,1
  84:main.c        **** 	 }	
 166               	.LM9:
 167 0014 8230      		cpi r24,2
 168 0016 9105      		cpc r25,__zero_reg__
 169 0018 E4F7      		brge .L3
 170               	/* epilogue: frame size=0 */
 171 001a 0895      		ret
 172               	/* epilogue end (size=1) */
 173               	/* function delay_us size 5 (4) */
 175               	.Lscope1:
 178               	.global	delay_ms
 180               	delay_ms:
  85:main.c        ****    while (time>1);
  86:main.c        ****  }	   
  87:main.c        **** void delay_ms(unsigned int time)//毫秒级延时程序
  88:main.c        ****  {
 182               	.LM10:
 183               	/* prologue: frame size=0 */
 184 001c CF93      		push r28
 185 001e DF93      		push r29
 186               	/* prologue end (size=2) */
 187 0020 EC01      		movw r28,r24
  89:main.c        ****    while(time!=0)
  90:main.c        **** 	 {
  91:main.c        **** 	   delay_us(1000);
  92:main.c        **** 	   time--;
 189               	.LM11:
 190 0022 892B      		or r24,r25
 191 0024 31F0      		breq .L11
 192               	.L9:
 194               	.LM12:
 195 0026 88EE      		ldi r24,lo8(1000)
 196 0028 93E0      		ldi r25,hi8(1000)
 197 002a 0E94 0000 		call delay_us
 199               	.LM13:
 200 002e 2197      		sbiw r28,1
 201 0030 D1F7      		brne .L9
 202               	.L11:
 203               	/* epilogue: frame size=0 */
 204 0032 DF91      		pop r29
 205 0034 CF91      		pop r28
 206 0036 0895      		ret
 207               	/* epilogue end (size=3) */
 208               	/* function delay_ms size 15 (10) */
 210               	.Lscope2:
 212               	.global	Delay
 214               	Delay:
  93:main.c        **** 	 }
  94:main.c        ****  }
  95:main.c        **** /**/
  96:main.c        **** void Delay(void)
  97:main.c        **** {
 216               	.LM14:
 217               	/* prologue: frame size=1 */
 218 0038 CF93      		push r28
 219 003a DF93      		push r29
 220 003c CDB7      		in r28,__SP_L__
 221 003e DEB7      		in r29,__SP_H__
 222 0040 2197      		sbiw r28,1
 223 0042 0FB6      		in __tmp_reg__,__SREG__
 224 0044 F894      		cli
 225 0046 DEBF      		out __SP_H__,r29
 226 0048 0FBE      		out __SREG__,__tmp_reg__
 227 004a CDBF      		out __SP_L__,r28
 228               	/* prologue end (size=10) */
  98:main.c        **** 	volatile unsigned char i;
  99:main.c        **** 	for(i=0;i<10;i++); //用于调整CLK 脉冲宽度
 230               	.LM15:
 231 004c 1982      		std Y+1,__zero_reg__
 232 004e 8981      		ldd r24,Y+1
 233 0050 8A30      		cpi r24,lo8(10)
 234 0052 30F4      		brsh .L18
 235               	.L16:
 237               	.LM16:
 238 0054 8981      		ldd r24,Y+1
 239 0056 8F5F      		subi r24,lo8(-(1))
 240 0058 8983      		std Y+1,r24
 241 005a 8981      		ldd r24,Y+1
 242 005c 8A30      		cpi r24,lo8(10)
 243 005e D0F3      		brlo .L16
 244               	.L18:
 245               	/* epilogue: frame size=1 */
 246 0060 2196      		adiw r28,1
 247 0062 0FB6      		in __tmp_reg__,__SREG__
 248 0064 F894      		cli
 249 0066 DEBF      		out __SP_H__,r29
 250 0068 0FBE      		out __SREG__,__tmp_reg__
 251 006a CDBF      		out __SP_L__,r28
 252 006c DF91      		pop r29
 253 006e CF91      		pop r28
 254 0070 0895      		ret
 255               	/* epilogue end (size=9) */
 256               	/* function Delay size 29 (10) */
 261               	.Lscope3:
 265               	.global	SendBit
 267               	SendBit:
 100:main.c        **** }
 101:main.c        **** void SendBit(unsigned char dat,unsigned char bitcnt)
 102:main.c        ****  {
 269               	.LM17:
 270               	/* prologue: frame size=0 */
 271 0072 1F93      		push r17
 272 0074 CF93      		push r28
 273               	/* prologue end (size=2) */
 274 0076 182F      		mov r17,r24
 103:main.c        ****    unsigned char i;
 104:main.c        ****    cli();
 276               	.LM18:
 277               	/* #APP */
 278 0078 F894      		cli
 105:main.c        ****    for(i=0;i<bitcnt;i++)
 280               	.LM19:
 281               	/* #NOAPP */
 282 007a 6623      		tst r22
 283 007c 79F0      		breq .L27
 284 007e C62F      		mov r28,r22
 285               	.L25:
 106:main.c        ****      {
 107:main.c        ****        if(( dat & 0X80 ) == 0)
 287               	.LM20:
 288 0080 17FD      		sbrc r17,7
 289 0082 02C0      		rjmp .L23
 108:main.c        ****        PORTB &=(~(1<<MOSI));
 291               	.LM21:
 292 0084 C598      		cbi 56-0x20,5
 293 0086 01C0      		rjmp .L24
 294               	.L23:
 109:main.c        ****        else
 110:main.c        ****        PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
 296               	.LM22:
 297 0088 C59A      		sbi 56-0x20,5
 298               	.L24:
 111:main.c        ****        Delay();
 300               	.LM23:
 301 008a 0E94 0000 		call Delay
 112:main.c        **** 	   //delay_us(10);
 113:main.c        ****        PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
 303               	.LM24:
 304 008e C79A      		sbi 56-0x20,7
 114:main.c        ****        Delay();
 306               	.LM25:
 307 0090 0E94 0000 		call Delay
 115:main.c        **** 	   //delay_us(10);
 116:main.c        ****        PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
 309               	.LM26:
 310 0094 C798      		cbi 56-0x20,7
 117:main.c        ****        dat=dat<<1; /*发送数据左移一位*/
 312               	.LM27:
 313 0096 110F      		lsl r17
 315               	.LM28:
 316 0098 C150      		subi r28,lo8(-(-1))
 317 009a 91F7      		brne .L25
 318               	.L27:
 118:main.c        ****      }
 119:main.c        ****    sei();
 320               	.LM29:
 321               	/* #APP */
 322 009c 7894      		sei
 323               	/* #NOAPP */
 324               	/* epilogue: frame size=0 */
 325 009e CF91      		pop r28
 326 00a0 1F91      		pop r17
 327 00a2 0895      		ret
 328               	/* epilogue end (size=3) */
 329               	/* function SendBit size 28 (23) */
 334               	.Lscope4:
 336               	.global	Start_spi
 338               	Start_spi:
 120:main.c        ****  }
 121:main.c        **** 
 122:main.c        **** void Start_spi(void)

⌨️ 快捷键说明

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