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

📄 main.lst

📁 我学习AVR的代码例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
   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:
  72               	.global	S
  73               		.section	.progmem.data,"a",@progbits
  76               	S:
  77 0000 AF        		.byte	-81
  78 0001 06        		.byte	6
  79 0002 6D        		.byte	109
  80 0003 4F        		.byte	79
  81 0004 C6        		.byte	-58
  82 0005 CB        		.byte	-53
  83 0006 EB        		.byte	-21
  84 0007 0E        		.byte	14
  85 0008 EF        		.byte	-17
  86 0009 CF        		.byte	-49
  87 000a 00        		.byte	0
  88               	.global	month
  89               		.data
  92               	month:
  93 0000 0100      		.word	1
  94               	.global	date
  97               	date:
  98 0002 0100      		.word	1
  99               	.global	N
 100               	.global	N
 101               		.section .bss
 104               	N:
 105 0000 00        		.skip 1,0
 106               	.global	Old_hours
 107               	.global	Old_hours
 110               	Old_hours:
 111 0001 00        		.skip 1,0
 112               	.global	Old_minutes
 113               	.global	Old_minutes
 116               	Old_minutes:
 117 0002 00        		.skip 1,0
 118               	.global	Old_senconds
 119               	.global	Old_senconds
 122               	Old_senconds:
 123 0003 00        		.skip 1,0
 124               	.global	Sign1
 125               	.global	Sign1
 128               	Sign1:
 129 0004 00        		.skip 1,0
 130               	.global	ADC_ov
 131               	.global	ADC_ov
 134               	ADC_ov:
 135 0005 00        		.skip 1,0
 136               	.global	Tov2
 137               	.global	Tov2
 140               	Tov2:
 141 0006 00        		.skip 1,0
 142               	.global	Tov0
 143               	.global	Tov0
 146               	Tov0:
 147 0007 0000      		.skip 2,0
 148               	.global	Tov1
 149               	.global	Tov1
 152               	Tov1:
 153 0009 00        		.skip 1,0
 154               	.global	Fuse1
 155               		.data
 158               	Fuse1:
 159 0004 01        		.byte	1
 160               	.global	Fuse2
 163               	Fuse2:
 164 0005 01        		.byte	1
 165               	.global	tmp_old
 166               	.global	tmp_old
 167               		.section .bss
 170               	tmp_old:
 171 000a 0000 0000 		.skip 4,0
 172               		.text
 174               	.global	port_init
 176               	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/pgmspace.h>
   6:main.c        **** //#include "avr/wdt.h"
   7:main.c        **** #include "avr/interrupt.h"
   8:main.c        **** #include <avr/sleep.h>
   9:main.c        **** 
  10:main.c        **** #define LOBYTE(a) ((BYTE)(a&0X0f))
  11:main.c        **** #define HIBYTE(a) ((BYTE)((a)>>4))
  12:main.c        **** #define LOBCD(b) (b%10)
  13:main.c        **** #define HIBCD(b) (b/10)
  14:main.c        **** #define BCD(c) (((c/10)<<4)|LOBYTE(c%10))
  15:main.c        **** #define DEC(d) (HIBYTE(d)*10+LOBYTE(d))
  16:main.c        **** 
  17:main.c        **** #define _asm asm
  18:main.c        **** #define WDR() 	asm("wdr")
  19:main.c        **** #define SEI()	asm("sei")
  20:main.c        **** #define CLI()	asm("cli")
  21:main.c        **** //#define NOP()	asm("nop")
  22:main.c        **** #define SLEEP() asm("SLEEP")
  23:main.c        **** #define down() (MCUCR =0x60)
  24:main.c        **** #define int1() (GICR =0x80)
  25:main.c        **** #define int1_off() (GICR =0x00)
  26:main.c        **** 
  27:main.c        **** //TWI状态定义
  28:main.c        **** //MT 主方式传输  MR 主方式接收
  29:main.c        **** #define START 0x08
  30:main.c        **** #define RE_START 0x10
  31:main.c        **** #define MT_SLA_ACK 0x18
  32:main.c        **** #define MT_SLA_NOACK 0x20
  33:main.c        **** #define MT_DATA_ACK  0x28
  34:main.c        **** #define MT_DATA_NOACK 0x30
  35:main.c        **** #define MR_SLA_ACK  0x40
  36:main.c        **** #define MR_SLA_NOACK 0x48
  37:main.c        **** #define MR_DATA_ACK 0x50
  38:main.c        **** #define MR_DATA_NOACK 0x58
  39:main.c        **** 
  40:main.c        **** #define rd_device_add 0xd1
  41:main.c        **** #define wr_device_add 0xd0
  42:main.c        **** //常用TWI操作(主模式写和主模式读)
  43:main.c        **** #define Start()    	  (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
  44:main.c        **** #define Stop()     	  (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
  45:main.c        **** #define Wait()	   	  {while(!(TWCR&(1<<TWINT)));}
  46:main.c        **** #define TestAck() 	  (TWSR&0xf8)
  47:main.c        **** #define SetAck()	  (TWCR|=(1<<TWEA))
  48:main.c        **** #define SetNoAck()    (TWCR&=~(1<<TWEA))
  49:main.c        **** #define Twi()	  	  (TWCR=(1<<TWINT)|(1<<TWEN))
  50:main.c        **** #define Write8Bit(x)  {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}
  51:main.c        **** 
  52:main.c        **** #define SS PB4
  53:main.c        **** #define MOSI PB5
  54:main.c        **** #define SCK PB7
  55:main.c        **** 
  56:main.c        **** typedef unsigned char BYTE;
  57:main.c        **** typedef unsigned int WORD;
  58:main.c        **** typedef unsigned long DWORD;
  59:main.c        **** //prog_uchar
  60:main.c        **** const BYTE S[]  PROGMEM={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
  61:main.c        **** 
  62:main.c        **** int month=1;//1~12
  63:main.c        **** int date=1;//1~31
  64:main.c        **** int hours;//0~23
  65:main.c        **** int minutes;//0~59
  66:main.c        **** BYTE senconds;//0~59
  67:main.c        **** 
  68:main.c        **** BYTE N=0;//0~3
  69:main.c        **** BYTE M[2];//0~4
  70:main.c        **** WORD T;                         //灯丝状态判断等待次数
  71:main.c        **** BYTE Old_hours=0;               //预存时间
  72:main.c        **** BYTE Old_minutes=0;
  73:main.c        **** BYTE Old_senconds=0;//0~59
  74:main.c        **** BYTE Sign1=0;                   //计时标志
  75:main.c        **** BYTE ADC_ov=0;
  76:main.c        **** BYTE Tov2=0;
  77:main.c        **** WORD Tov0=0;
  78:main.c        **** BYTE Tov1=0;                    //定时器溢出
  79:main.c        **** BYTE Fuse1=1;                   //灯丝1状态
  80:main.c        **** BYTE Fuse2=1;                   //灯丝2状态
  81:main.c        **** WORD tmp_old[2]={0,0};
  82:main.c        **** WORD tmp_rel[2];
  83:main.c        **** BYTE sign2;                     //极性
  84:main.c        **** BYTE Close[4];                  //门状态
  85:main.c        **** BYTE ADC_mux;
  86:main.c        **** WORD ADC_rel;
  87:main.c        **** BYTE a,b,c;
  88:main.c        **** void port_init(void)//口方向设置
  89:main.c        ****  {  
 178               	.LM1:
 179               	/* prologue: frame size=0 */
 180               	/* prologue end (size=0) */
  90:main.c        ****    DDRA  = 0x00;
 182               	.LM2:
 183 0000 1ABA      		out 58-0x20,__zero_reg__
  91:main.c        ****    PORTA = 0x00;
 185               	.LM3:
 186 0002 1BBA      		out 59-0x20,__zero_reg__
  92:main.c        ****    DDRB  = 0xff;
 188               	.LM4:
 189 0004 8FEF      		ldi r24,lo8(-1)
 190 0006 87BB      		out 55-0x20,r24
  93:main.c        ****    DDRC = 0XFC;
 192               	.LM5:
 193 0008 8CEF      		ldi r24,lo8(-4)
 194 000a 84BB      		out 52-0x20,r24
  94:main.c        ****    DDRD  = 0xF0;
 196               	.LM6:
 197 000c 80EF      		ldi r24,lo8(-16)
 198 000e 81BB      		out 49-0x20,r24
 199               	/* epilogue: frame size=0 */
 200 0010 0895      		ret
 201               	/* epilogue end (size=1) */
 202               	/* function port_init size 9 (8) */
 204               	.Lscope0:
 206               	.global	T_init
 208               	T_init:
  95:main.c        ****  }
  96:main.c        **** void T_init(void)
  97:main.c        ****  {
 210               	.LM7:
 211               	/* prologue: frame size=0 */
 212               	/* prologue end (size=0) */
  98:main.c        ****    TCCR2=0x00;        //停止定时器2
 214               	.LM8:
 215 0012 15BC      		out 69-0x20,__zero_reg__
  99:main.c        ****    TCCR1B=0x00;       //停止定时器1
 217               	.LM9:
 218 0014 1EBC      		out 78-0x20,__zero_reg__
 100:main.c        ****    TCCR0=0x00;        //停止定时器0
 220               	.LM10:
 221 0016 13BE      		out 83-0x20,__zero_reg__
 101:main.c        ****    TCNT2=0X64;        //定时~20ms
 223               	.LM11:
 224 0018 84E6      		ldi r24,lo8(100)
 225 001a 84BD      		out 68-0x20,r24
 102:main.c        ****    TCNT1H=0xc2;
 227               	.LM12:
 228 001c 82EC      		ldi r24,lo8(-62)
 229 001e 8DBD      		out 77-0x20,r24
 103:main.c        ****    TCNT1L=0xf7;       //定时0.5s
 231               	.LM13:
 232 0020 87EF      		ldi r24,lo8(-9)
 233 0022 8CBD      		out 76-0x20,r24
 104:main.c        ****    TCNT0=6;           //定时32ms
 235               	.LM14:
 236 0024 86E0      		ldi r24,lo8(6)
 237 0026 82BF      		out 82-0x20,r24
 105:main.c        ****    TCCR2=0x05;        //1024分频
 239               	.LM15:
 240 0028 95E0      		ldi r25,lo8(5)
 241 002a 95BD      		out 69-0x20,r25
 106:main.c        ****    TCCR1B=0x04;       //256分频
 243               	.LM16:
 244 002c 84E0      		ldi r24,lo8(4)
 245 002e 8EBD      		out 78-0x20,r24
 107:main.c        ****    TCCR0=0x05;        //1024分频
 247               	.LM17:
 248 0030 93BF      		out 83-0x20,r25
 249               	/* epilogue: frame size=0 */
 250 0032 0895      		ret
 251               	/* epilogue end (size=1) */
 252               	/* function T_init size 17 (16) */
 254               	.Lscope1:
 256               	.global	Delay
 258               	Delay:
 108:main.c        ****  }
 109:main.c        **** void Delay(void)
 110:main.c        ****  {
 260               	.LM18:
 261               	/* prologue: frame size=0 */
 262               	/* prologue end (size=0) */
 111:main.c        ****    unsigned char i;
 112:main.c        ****    for(i=0;i<10;i++); /*用于调整CLK 脉冲宽度*/
 264               	.LM19:
 265 0034 80E0      		ldi r24,lo8(0)
 266               	.L7:
 268               	.LM20:
 269 0036 8F5F      		subi r24,lo8(-(1))
 270 0038 8A30      		cpi r24,lo8(10)
 271 003a E8F3      		brlo .L7
 272               	/* epilogue: frame size=0 */
 273 003c 0895      		ret
 274               	/* epilogue end (size=1) */
 275               	/* function Delay size 5 (4) */
 280               	.Lscope2:
 284               	.global	SendBit
 286               	SendBit:
 113:main.c        ****  }
 114:main.c        **** void SendBit(unsigned char dat,unsigned char bitcnt)
 115:main.c        ****  {
 288               	.LM21:
 289               	/* prologue: frame size=0 */
 290 003e 0F93      		push r16
 291 0040 1F93      		push r17
 292 0042 CF93      		push r28
 293               	/* prologue end (size=3) */
 294 0044 C82F      		mov r28,r24
 295 0046 062F      		mov r16,r22
 116:main.c        ****    unsigned char i;
 117:main.c        ****    cli();
 297               	.LM22:
 298               	/* #APP */
 299 0048 F894      		cli
 118:main.c        ****    for(i=0;i<bitcnt;i++)
 301               	.LM23:
 302               	/* #NOAPP */
 303 004a 10E0      		ldi r17,lo8(0)
 304 004c 1617      		cp r17,r22
 305 004e 78F4      		brsh .L18
 306               	.L16:
 119:main.c        ****      {
 120:main.c        ****        if(( dat & 0X80 ) == 0)
 308               	.LM24:
 309 0050 CC23      		tst r28
 310 0052 14F0      		brlt .L14
 121:main.c        ****        PORTB &=(~(1<<MOSI));
 312               	.LM25:
 313 0054 C598      		cbi 56-0x20,5
 314 0056 01C0      		rjmp .L15
 315               	.L14:
 122:main.c        ****        else
 123:main.c        ****        PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
 317               	.LM26:
 318 0058 C59A      		sbi 56-0x20,5
 319               	.L15:
 124:main.c        ****        Delay();
 321               	.LM27:
 322 005a 0E94 0000 		call Delay
 125:main.c        ****        PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
 324               	.LM28:
 325 005e C79A      		sbi 56-0x20,7
 126:main.c        ****        Delay();
 327               	.LM29:
 328 0060 0E94 0000 		call Delay
 127:main.c        ****        PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
 330               	.LM30:
 331 0064 C798      		cbi 56-0x20,7
 128:main.c        ****        dat=dat<<1; /*发送数据左移一位*/
 333               	.LM31:
 334 0066 CC0F      		lsl r28
 336               	.LM32:
 337 0068 1F5F      		subi r17,lo8(-(1))
 338 006a 1017      		cp r17,r16
 339 006c 88F3      		brlo .L16
 340               	.L18:
 129:main.c        ****      }
 130:main.c        ****    sei();
 342               	.LM33:
 343               	/* #APP */
 344 006e 7894      		sei
 345               	/* #NOAPP */
 346               	/* epilogue: frame size=0 */
 347 0070 CF91      		pop r28
 348 0072 1F91      		pop r17

⌨️ 快捷键说明

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