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

📄 afa-005i.lst

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LST
字号:
__start:
__text_start:
    0035 E5CF      LDI	R28,0x5F
    0036 E0D4      LDI	R29,4
    0037 BFCD      OUT	0x3D,R28
    0038 BFDE      OUT	0x3E,R29
    0039 51C0      SUBI	R28,0x10
    003A 40D0      SBCI	R29,0
    003B EA0A      LDI	R16,0xAA
    003C 8308      STD	Y+0,R16
    003D 2400      CLR	R0
    003E E7E5      LDI	R30,0x75
    003F E0F0      LDI	R31,0
    0040 E010      LDI	R17,0
    0041 37E6      CPI	R30,0x76
    0042 07F1      CPC	R31,R17
    0043 F011      BEQ	0x0046
    0044 9201      ST	R0,Z+
    0045 CFFB      RJMP	0x0041
    0046 8300      STD	Z+0,R16
    0047 E5E4      LDI	R30,0x54
    0048 E0F0      LDI	R31,0
    0049 E6A0      LDI	R26,0x60
    004A E0B0      LDI	R27,0
    004B E010      LDI	R17,0
    004C 36E9      CPI	R30,0x69
    004D 07F1      CPC	R31,R17
    004E F021      BEQ	0x0053
    004F 95C8      LPM
    0050 9631      ADIW	R30,1
    0051 920D      ST	R0,X+
    0052 CFF9      RJMP	0x004C
    0053 940E0065  CALL	_main
_exit:
    0055 CFFF      RJMP	_exit
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    0056 940E011E  CALL	push_gset2
    0058 E041      LDI	R20,1
    0059 C006      RJMP	0x0060
    005A E061      LDI	R22,1
    005B C001      RJMP	0x005D
    005C 9563      INC	R22
    005D 2366      TST	R22
    005E F7E9      BNE	0x005C
    005F 9543      INC	R20
    0060 1740      CP	R20,R16
    0061 F3C0      BCS	0x005A
    0062 940E0115  CALL	pop_gset2
    0064 9508      RET
_main:
  i                    --> R20
    0065 2744      CLR	R20
    0066 2422      CLR	R2
    0067 BA2A      OUT	0x1A,R2
    0068 EF8F      LDI	R24,0xFF
    0069 BB8B      OUT	0x1B,R24
    006A BB87      OUT	0x17,R24
    006B EF80      LDI	R24,0xF0
    006C BB88      OUT	0x18,R24
    006D BA24      OUT	0x14,R2
    006E EF8F      LDI	R24,0xFF
    006F BB85      OUT	0x15,R24
    0070 BA21      OUT	0x11,R2
    0071 BB82      OUT	0x12,R24
    0072 EC08      LDI	R16,0xC8
    0073 DFE2      RCALL	_delay_ms
    0074 940E0094  CALL	_Disp_Init
    0076 C01B      RJMP	0x0092
    0077 9543      INC	R20
    0078 E604      LDI	R16,0x64
    0079 DFDC      RCALL	_delay_ms
    007A 2422      CLR	R2
    007B 92200073  STS	led_buf+3,R2
    007D E614      LDI	R17,0x64
    007E 2F04      MOV	R16,R20
    007F 940E00FF  CALL	div8u
    0081 93000072  STS	led_buf+2,R16
    0083 E614      LDI	R17,0x64
    0084 2F04      MOV	R16,R20
    0085 940E00FD  CALL	mod8u
    0087 E01A      LDI	R17,0xA
    0088 940E00FF  CALL	div8u
    008A 93000071  STS	led_buf+1,R16
    008C E01A      LDI	R17,0xA
    008D 2F04      MOV	R16,R20
    008E 940E00FD  CALL	mod8u
    0090 93000070  STS	led_buf,R16
    0092 CFE4      RJMP	0x0077
    0093 9508      RET
FILE: E:\ICCAVR\project\AVRMEG~2\icc\005-LED4\disp_2.c
(0001) /*
(0002) 模块说明:
(0003) 
(0004) 	LED数码管中断动态显示程序。
(0005) 	1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
(0006) 	2、动态调度由片内定时器1中断产生,中断周期为5mS。
(0007) 	3、内部1 M晶振,程序采用单任务方式,软件延时。
(0008) 	4、此模块文件为使用文件,可直接用于项目中。
(0009) 	www.iccavr.com
(0010) */
(0011) #include "iom16v.h"
(0012) #include <macros.h>
(0013) 
(0014) unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0};
(0015) 
(0016) unsigned char led_buf[] = {1, 2, 3, 4, 0};			/*显示信息*/
(0017) 
(0018) /*------------------------------------------------------------------*-
(0019) 
(0020) 	 Disp_Init()
(0021) 	 显示初始化
(0022) 
(0023) -*------------------------------------------------------------------*/
(0024) void Disp_Init(void) {
(0025) 
(0026) 	/*初始化定时器*/
(0027) 	OCR1A = 625;						/*计数周期为5mS,F=1M*/
_Disp_Init:
    0094 E781      LDI	R24,0x71
    0095 E092      LDI	R25,2
    0096 BD9B      OUT	0x2B,R25
    0097 BD8A      OUT	0x2A,R24
(0028) 	TIMSK |= (1 << OCIE1A);				/*比较中断A允许*/
    0098 B789      IN	R24,0x39
    0099 6180      ORI	R24,0x10
    009A BF89      OUT	0x39,R24
(0029) 	SREG = 0x80;
    009B E880      LDI	R24,0x80
    009C BF8F      OUT	0x3F,R24
(0030) 	TCCR1A = 0x00;
    009D 2422      CLR	R2
    009E BC2F      OUT	0x2F,R2
(0031) 	TCCR1B = 0x08;						/*定时器工作在CTC计数器模式*/
    009F E088      LDI	R24,0x8
    00A0 BD8E      OUT	0x2E,R24
(0032) 	TCCR1B |= 0x02;						/*设置定时器的分频值为8分频*/
    00A1 B58E      IN	R24,0x2E
    00A2 6082      ORI	R24,2
    00A3 BD8E      OUT	0x2E,R24
(0033) 	
(0034) 	/*SPI接口初始化*/
(0035) 	DDRB |= (1<<PB5) | (1<<PB7);		/* 设置MOSI 和SCK 为输出,其他为输入 */
    00A4 B387      IN	R24,0x17
    00A5 6A80      ORI	R24,0xA0
    00A6 BB87      OUT	0x17,R24
(0036) 	SPCR = (1<<SPE) | (1<<MSTR)
    00A7 E583      LDI	R24,0x53
    00A8 B98D      OUT	0x0D,R24
(0037) 		| (1<<SPR1) | (1<<SPR0);		/* 使能SPI 主机模式,时钟为fck/128 */
(0038) 	
(0039) 	/*中断使能*/
(0040) 	SEI();
    00A9 9478      BSET	7
    00AA 9508      RET
_Int_TCCR1A:
  temp                 --> R20
    00AB 922A      ST	R2,-Y
    00AC 930A      ST	R16,-Y
    00AD 931A      ST	R17,-Y
    00AE 938A      ST	R24,-Y
    00AF 939A      ST	R25,-Y
    00B0 93EA      ST	R30,-Y
    00B1 93FA      ST	R31,-Y
    00B2 B62F      IN	R2,0x3F
    00B3 922A      ST	R2,-Y
    00B4 940E0120  CALL	push_gset1
(0041) }
(0042) 
(0043) /*------------------------------------------------------------------*-
(0044)   
(0045)  	Int_TCCR1A()
(0046)  	LED数码管动态显示函数
(0047) 
(0048) 	定时器'T1',A组比较中断产生5mS周期性中断
(0049) 	在中断里刷新显示
(0050)  
(0051) -*------------------------------------------------------------------*/
(0052) #pragma interrupt_handler Int_TCCR1A: 7
(0053) void Int_TCCR1A(void) {
(0054) 
(0055) 	unsigned char temp;
(0056) 	static unsigned char i;
(0057) 
(0058) 	PORTB &= ~(1 << 4);					/*准备锁存*/
    00B6 98C4      CBI	0x18,4
(0059) 	PORTB |= 0x0F;
    00B7 B388      IN	R24,0x18
    00B8 608F      ORI	R24,0xF
    00B9 BB88      OUT	0x18,R24
(0060) 	PORTB |= (1 << 4);					/*锁存数据*/
    00BA 9AC4      SBI	0x18,4
(0061) 	if (i == 3) {
    00BB 91800075  LDS	R24,i
    00BD 3083      CPI	R24,3
    00BE F409      BNE	0x00C0
(0062) 		PORTB &= ~(1 << 2);
    00BF 98C2      CBI	0x18,2
(0063) 		}
(0064) 	if (i == 2) {
    00C0 91800075  LDS	R24,i
    00C2 3082      CPI	R24,2
    00C3 F409      BNE	0x00C5
(0065) 		PORTB &= ~(1 << 1);
    00C4 98C1      CBI	0x18,1
(0066) 		}
(0067) 	if (i == 1) {
    00C5 91800075  LDS	R24,i
    00C7 3081      CPI	R24,1
    00C8 F409      BNE	0x00CA
(0068) 		PORTB &= ~(1 << 0);
    00C9 98C0      CBI	0x18,0
(0069) 		}
(0070) 	if (i == 0) {
    00CA 90200075  LDS	R2,i
    00CC 2022      TST	R2
    00CD F409      BNE	0x00CF
(0071) 		PORTB &= ~(1 << 3);
    00CE 98C3      CBI	0x18,3
(0072) 		}
(0073) 	
(0074) 	temp = led_buf[i] % 16;		/**/
    00CF E780      LDI	R24,0x70
    00D0 E090      LDI	R25,0
    00D1 91E00075  LDS	R30,i
    00D3 27FF      CLR	R31
    00D4 0FE8      ADD	R30,R24
    00D5 1FF9      ADC	R31,R25
    00D6 8100      LDD	R16,Z+0
    00D7 E110      LDI	R17,0x10
    00D8 940E00FD  CALL	mod8u
    00DA 2F40      MOV	R20,R16
(0075) 	temp = disp[temp];			/**/
    00DB E680      LDI	R24,0x60
    00DC E090      LDI	R25,0
    00DD 2FE4      MOV	R30,R20
    00DE 27FF      CLR	R31
    00DF 0FE8      ADD	R30,R24
    00E0 1FF9      ADC	R31,R25
    00E1 8140      LDD	R20,Z+0
(0076) 	SPDR = temp;
    00E2 B94F      OUT	0x0F,R20
(0077) 
(0078) 	if (i > 3) {
    00E3 E083      LDI	R24,3
    00E4 90200075  LDS	R2,i
    00E6 1582      CP	R24,R2
    00E7 F420      BCC	0x00EC
(0079) 		i = 0;
    00E8 2422      CLR	R2
    00E9 92200075  STS	i,R2
(0080) 		}
    00EB C005      RJMP	0x00F1
(0081) 	else {
(0082) 		i ++;
    00EC 91800075  LDS	R24,i
    00EE 5F8F      SUBI	R24,0xFF
    00EF 93800075  STS	i,R24
(0083) 		}
FILE: <library>
    00F1 940E0123  CALL	pop_gset1
    00F3 9029      LD	R2,Y+
    00F4 BE2F      OUT	0x3F,R2
    00F5 91F9      LD	R31,Y+
    00F6 91E9      LD	R30,Y+
    00F7 9199      LD	R25,Y+
    00F8 9189      LD	R24,Y+
    00F9 9119      LD	R17,Y+
    00FA 9109      LD	R16,Y+
    00FB 9029      LD	R2,Y+
    00FC 9518      RETI
mod8u:
    00FD 9468      BSET	6
    00FE C001      RJMP	xdiv8u
div8u:
    00FF 94E8      BCLR	6
xdiv8u:
    0100 932A      ST	R18,-Y
    0101 92FA      ST	R15,-Y
    0102 92EA      ST	R14,-Y
    0103 24FF      CLR	R15
    0104 24EE      CLR	R14
    0105 E120      LDI	R18,0x10
    0106 0F00      LSL	R16
    0107 1CFF      ROL	R15
    0108 1CEE      ROL	R14
    0109 16E1      CP	R14,R17
    010A F010      BCS	0x010D
    010B 1AE1      SUB	R14,R17
    010C 9503      INC	R16
    010D 952A      DEC	R18
    010E F7B9      BNE	0x0106
    010F F40E      BRTC	0x0111
    0110 2D0E      MOV	R16,R14
    0111 90E9      LD	R14,Y+
    0112 90F9      LD	R15,Y+
    0113 9129      LD	R18,Y+
    0114 9508      RET
pop_gset2:
    0115 E0E2      LDI	R30,2
    0116 940C0124  JMP	pop
push_gset5:
    0118 92FA      ST	R15,-Y
    0119 92EA      ST	R14,-Y
push_gset4:
    011A 92DA      ST	R13,-Y
    011B 92CA      ST	R12,-Y
push_gset3:
    011C 92BA      ST	R11,-Y
    011D 92AA      ST	R10,-Y
push_gset2:
    011E 937A      ST	R23,-Y
    011F 936A      ST	R22,-Y
push_gset1:
    0120 935A      ST	R21,-Y
    0121 934A      ST	R20,-Y
    0122 9508      RET
pop_gset1:
    0123 E0E1      LDI	R30,1
pop:
    0124 9149      LD	R20,Y+
    0125 9159      LD	R21,Y+
    0126 FDE0      SBRC	R30,0
    0127 9508      RET
    0128 9169      LD	R22,Y+
    0129 9179      LD	R23,Y+
    012A FDE1      SBRC	R30,1
    012B 9508      RET
    012C 90A9      LD	R10,Y+
    012D 90B9      LD	R11,Y+
    012E FDE2      SBRC	R30,2
    012F 9508      RET
    0130 90C9      LD	R12,Y+
    0131 90D9      LD	R13,Y+
    0132 FDE3      SBRC	R30,3
    0133 9508      RET
    0134 90E9      LD	R14,Y+
    0135 90F9      LD	R15,Y+
    0136 9508      RET

⌨️ 快捷键说明

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