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

📄 afa-004i.lst

📁 SPI接口实验LED显示 SPI接口实验LED显示
💻 LST
字号:
__start:
__text_start:
    002F E5CF      LDI	R28,0x5F
    0030 E0D4      LDI	R29,4
    0031 BFCD      OUT	0x3D,R28
    0032 BFDE      OUT	0x3E,R29
    0033 51C0      SUBI	R28,0x10
    0034 40D0      SBCI	R29,0
    0035 EA0A      LDI	R16,0xAA
    0036 8308      STD	Y+0,R16
    0037 2400      CLR	R0
    0038 E6EA      LDI	R30,0x6A
    0039 E0F0      LDI	R31,0
    003A E010      LDI	R17,0
    003B 36EA      CPI	R30,0x6A
    003C 07F1      CPC	R31,R17
    003D F011      BEQ	0x0040
    003E 9201      ST	R0,Z+
    003F CFFB      RJMP	0x003B
    0040 8300      STD	Z+0,R16
    0041 E5E4      LDI	R30,0x54
    0042 E0F0      LDI	R31,0
    0043 E6A0      LDI	R26,0x60
    0044 E0B0      LDI	R27,0
    0045 E010      LDI	R17,0
    0046 35EE      CPI	R30,0x5E
    0047 07F1      CPC	R31,R17
    0048 F021      BEQ	0x004D
    0049 95C8      LPM
    004A 9631      ADIW	R30,1
    004B 920D      ST	R0,X+
    004C CFF9      RJMP	0x0046
    004D 940E0073  CALL	_main
_exit:
    004F CFFF      RJMP	_exit
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    0050 940E00FD  CALL	push_gset2
FILE: D:\Backup\我的文档\MYDESG~1\AVR\ICC\AVRMEG~1\SPI接口实验LED显示\main.c
(0001) /*
(0002) 实验四:
(0003) 	SPI接口实险,LED数据管显示。
(0004) 	1、程序通过SPI接口输出数据到HC595芯片驱动LED数据管简单显示。
(0005) 	2、内部1 M晶振,程序采用单任务方式,软件延时。
(0006) 	3、进行此实验请插上JP1的所有8个短路块,JP6(SPI_EN)短路块。
(0007) 
(0008) 	AVR  mega16学习板
(0009) 	www.iccavr.com
(0010) 	2006-01-10
(0011) */
(0012) 
(0013) #include "iom16v.h"
(0014) 
(0015) unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
(0016) 
(0017) /*延时函数*/
(0018) void delay_ms(unsigned char i) {
(0019) 
(0020) 	unsigned char a, b;
(0021) 	for (a = 1; a < i; a++) {
    0052 E041      LDI	R20,1
    0053 C006      RJMP	0x005A
(0022) 		for (b = 1; b; b++) {
    0054 E061      LDI	R22,1
    0055 C001      RJMP	0x0057
    0056 9563      INC	R22
    0057 2366      TST	R22
    0058 F7E9      BNE	0x0056
    0059 9543      INC	R20
    005A 1740      CP	R20,R16
    005B F3C0      BCS	0x0054
    005C 940E00F4  CALL	pop_gset2
    005E 9508      RET
(0023) 			;
(0024) 			}
(0025) 		}
(0026) }
(0027) 
(0028) /*SPI接口初始化*/
(0029) void SPI_MasterInit(void) {
(0030) 
(0031) 	DDRB |= (1<<PB5) | (1<<PB7);		/* 设置MOSI 和SCK 为输出,其他为输入 */
_SPI_MasterInit:
    005F B387      IN	R24,0x17
    0060 6A80      ORI	R24,0xA0
    0061 BB87      OUT	0x17,R24
(0032) 	SPCR = (1<<SPE) | (1<<MSTR)
    0062 E583      LDI	R24,0x53
    0063 B98D      OUT	0x0D,R24
    0064 9508      RET
(0033) 		| (1<<SPR1) | (1<<SPR0);		/* 使能SPI 主机模式,设置时钟速率为fck/128 */
(0034) }
(0035) 
(0036) /*SPI数据发送*/
(0037) void SPI_MasterTransmit(unsigned char i) {
(0038) 	
(0039) 	SPDR = i;							/* 启动数据传输 */
_SPI_MasterTransmit:
  i                    --> R16
    0065 B90F      OUT	0x0F,R16
(0040) 	while (!(SPSR & (1<<SPIF))) {		/* 等待传输结束 */
    0066 9B77      SBIS	0x0E,7
    0067 CFFE      RJMP	0x0066
    0068 9508      RET
_SPI_595_Out:
  i                    --> R20
    0069 940E00FF  CALL	push_gset1
    006B 2F40      MOV	R20,R16
(0041) 		;
(0042) 		}
(0043) }
(0044) 
(0045) /*595数据输出*/
(0046) void SPI_595_Out(unsigned char i) {
(0047) 	PORTB &= ~(1 << 4);					/*准备锁存*/
    006C 98C4      CBI	0x18,4
(0048) 	SPI_MasterTransmit(i);
    006D 2F04      MOV	R16,R20
    006E DFF6      RCALL	_SPI_MasterTransmit
(0049) 	PORTB |= (1 << 4);					/*锁存数据*/
    006F 9AC4      SBI	0x18,4
    0070 940E0102  CALL	pop_gset1
    0072 9508      RET
(0050) }
(0051) 
(0052) void main(void) {
(0053) 
(0054) 	unsigned int i = 0;
_main:
  i                    --> R20
    0073 2744      CLR	R20
    0074 2755      CLR	R21
(0055) 
(0056) 	DDRA = 0x00;						/*方向输入*/
    0075 2422      CLR	R2
    0076 BA2A      OUT	0x1A,R2
(0057) 	PORTA = 0xFF;						/*打开上拉*/
    0077 EF8F      LDI	R24,0xFF
    0078 BB8B      OUT	0x1B,R24
(0058) 	DDRB = 0xFF;						/*方向输出*/
    0079 BB87      OUT	0x17,R24
(0059) 	PORTB = 0xFF;						/*电平设置*/
    007A BB88      OUT	0x18,R24
(0060) 	DDRC = 0x00;
    007B BA24      OUT	0x14,R2
(0061) 	PORTC = 0xFF;
    007C BB85      OUT	0x15,R24
(0062) 	DDRD = 0xFF;
    007D BB81      OUT	0x11,R24
(0063) 	PORTD = 0xFF;
    007E BB82      OUT	0x12,R24
(0064) 
(0065) 	SPI_MasterInit();
    007F DFDF      RCALL	_SPI_MasterInit
    0080 C055      RJMP	0x00D6
(0066) 	while (1) 
(0067) 	{
(0068) 		i ++;
    0081 5F4F      SUBI	R20,0xFF
    0082 4F5F      SBCI	R21,0xFF
(0069) 		if (i > 9999)
    0083 E08F      LDI	R24,0xF
    0084 E297      LDI	R25,0x27
    0085 1784      CP	R24,R20
    0086 0795      CPC	R25,R21
    0087 F410      BCC	0x008A
(0070) 		 {
(0071) 			i = 0;
    0088 2744      CLR	R20
    0089 2755      CLR	R21
(0072) 			}
(0073) 		//delay_ms(250);
(0074) 		//delay_ms(250);
(0075) 		SPI_595_Out(disp[(i/1000)%10]);
    008A EE28      LDI	R18,0xE8
    008B E033      LDI	R19,3
    008C 018A      MOVW	R16,R20
    008D 940E00DA  CALL	div16u
    008F E02A      LDI	R18,0xA
    0090 E030      LDI	R19,0
    0091 940E00D8  CALL	mod16u
    0093 01F8      MOVW	R30,R16
    0094 E680      LDI	R24,0x60
    0095 E090      LDI	R25,0
    0096 0FE8      ADD	R30,R24
    0097 1FF9      ADC	R31,R25
    0098 8100      LDD	R16,Z+0
    0099 DFCF      RCALL	_SPI_595_Out
(0076) 		PORTB &= ~(1 << 3);
    009A 98C3      CBI	0x18,3
(0077) 		delay_ms(50);
    009B E302      LDI	R16,0x32
    009C DFB3      RCALL	_delay_ms
(0078) 		//delay_ms(250);
(0079) 		PORTB |=(1 << 3);
    009D 9AC3      SBI	0x18,3
(0080) 
(0081) 		SPI_595_Out(disp[(i/100)%10]);
    009E E624      LDI	R18,0x64
    009F E030      LDI	R19,0
    00A0 018A      MOVW	R16,R20
    00A1 940E00DA  CALL	div16u
    00A3 E02A      LDI	R18,0xA
    00A4 E030      LDI	R19,0
    00A5 940E00D8  CALL	mod16u
    00A7 01F8      MOVW	R30,R16
    00A8 E680      LDI	R24,0x60
    00A9 E090      LDI	R25,0
    00AA 0FE8      ADD	R30,R24
    00AB 1FF9      ADC	R31,R25
    00AC 8100      LDD	R16,Z+0
    00AD DFBB      RCALL	_SPI_595_Out
(0082) 		PORTB &= ~(1 << 2);
    00AE 98C2      CBI	0x18,2
(0083) 		delay_ms(50);
    00AF E302      LDI	R16,0x32
    00B0 DF9F      RCALL	_delay_ms
(0084) 		//delay_ms(250);
(0085) 		PORTB |=(1 << 2);
    00B1 9AC2      SBI	0x18,2
(0086) 
(0087) 		SPI_595_Out(disp[(i/10)%10]);
    00B2 E02A      LDI	R18,0xA
    00B3 E030      LDI	R19,0
    00B4 018A      MOVW	R16,R20
    00B5 940E00DA  CALL	div16u
    00B7 E02A      LDI	R18,0xA
    00B8 E030      LDI	R19,0
    00B9 940E00D8  CALL	mod16u
    00BB 01F8      MOVW	R30,R16
    00BC E680      LDI	R24,0x60
    00BD E090      LDI	R25,0
    00BE 0FE8      ADD	R30,R24
    00BF 1FF9      ADC	R31,R25
    00C0 8100      LDD	R16,Z+0
    00C1 DFA7      RCALL	_SPI_595_Out
(0088) 		PORTB &= ~(1 << 1);
    00C2 98C1      CBI	0x18,1
(0089) 		delay_ms(50);
    00C3 E302      LDI	R16,0x32
    00C4 DF8B      RCALL	_delay_ms
(0090) 		//delay_ms(250);
(0091) 		PORTB |=(1 << 1);
    00C5 9AC1      SBI	0x18,1
(0092) 
(0093) 		SPI_595_Out(disp[i%10]);
    00C6 E02A      LDI	R18,0xA
    00C7 E030      LDI	R19,0
    00C8 018A      MOVW	R16,R20
    00C9 940E00D8  CALL	mod16u
    00CB 01F8      MOVW	R30,R16
    00CC E680      LDI	R24,0x60
    00CD E090      LDI	R25,0
    00CE 0FE8      ADD	R30,R24
    00CF 1FF9      ADC	R31,R25
    00D0 8100      LDD	R16,Z+0
    00D1 DF97      RCALL	_SPI_595_Out
(0094) 		PORTB &= ~(1 << 0);
    00D2 98C0      CBI	0x18,0
(0095) 		delay_ms(50);
    00D3 E302      LDI	R16,0x32
    00D4 DF7B      RCALL	_delay_ms
(0096) 		PORTB |=(1 << 0);
FILE: <library>
    00D5 9AC0      SBI	0x18,0
    00D6 CFAA      RJMP	0x0081
    00D7 9508      RET
mod16u:
    00D8 9468      BSET	6
    00D9 C001      RJMP	xdiv16u
div16u:
    00DA 94E8      BCLR	6
xdiv16u:
    00DB 92EA      ST	R14,-Y
    00DC 92FA      ST	R15,-Y
    00DD 938A      ST	R24,-Y
    00DE 24EE      CLR	R14
    00DF 24FF      CLR	R15
    00E0 E180      LDI	R24,0x10
    00E1 0F00      LSL	R16
    00E2 1F11      ROL	R17
    00E3 1CEE      ROL	R14
    00E4 1CFF      ROL	R15
    00E5 16E2      CP	R14,R18
    00E6 06F3      CPC	R15,R19
    00E7 F018      BCS	0x00EB
    00E8 1AE2      SUB	R14,R18
    00E9 0AF3      SBC	R15,R19
    00EA 9503      INC	R16
    00EB 958A      DEC	R24
    00EC F7A1      BNE	0x00E1
    00ED F416      BRTC	0x00F0
    00EE 2D0E      MOV	R16,R14
    00EF 2D1F      MOV	R17,R15
    00F0 9189      LD	R24,Y+
    00F1 90F9      LD	R15,Y+
    00F2 90E9      LD	R14,Y+
    00F3 9508      RET
pop_gset2:
    00F4 E0E2      LDI	R30,2
    00F5 940C0103  JMP	pop
push_gset5:
    00F7 92FA      ST	R15,-Y
    00F8 92EA      ST	R14,-Y
push_gset4:
    00F9 92DA      ST	R13,-Y
    00FA 92CA      ST	R12,-Y
push_gset3:
    00FB 92BA      ST	R11,-Y
    00FC 92AA      ST	R10,-Y
push_gset2:
    00FD 937A      ST	R23,-Y
    00FE 936A      ST	R22,-Y
push_gset1:
    00FF 935A      ST	R21,-Y
    0100 934A      ST	R20,-Y
    0101 9508      RET
pop_gset1:
    0102 E0E1      LDI	R30,1
pop:
    0103 9149      LD	R20,Y+
    0104 9159      LD	R21,Y+
    0105 FDE0      SBRC	R30,0
    0106 9508      RET
    0107 9169      LD	R22,Y+
    0108 9179      LD	R23,Y+
    0109 FDE1      SBRC	R30,1
    010A 9508      RET
    010B 90A9      LD	R10,Y+
    010C 90B9      LD	R11,Y+
    010D FDE2      SBRC	R30,2
    010E 9508      RET
    010F 90C9      LD	R12,Y+
    0110 90D9      LD	R13,Y+
    0111 FDE3      SBRC	R30,3
    0112 9508      RET
    0113 90E9      LD	R14,Y+
    0114 90F9      LD	R15,Y+
    0115 9508      RET

⌨️ 快捷键说明

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