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

📄 m16t1.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
  i                    --> R20
    0099 940E0181  CALL	push_gset1
    009B 2F40      MOV	R20,R16
(0071) }
(0072) /*-----------------------------------------------------------------
(0073) 函数名称: void SPI595Out(unsigned char i)  
(0074) 函数功能: 通过74HC595输出数据
(0075) 参    数: 
(0076) 返 回 值: 无
(0077) -----------------------------------------------------------------*/
(0078) void SPI595Out(unsigned char i) 
(0079) {
(0080) 	PORTB &= ~(1 << 4);					//准备锁存
    009C 98C4      CBI	0x18,4
(0081) 	SPIMasterTransmit(i);
    009D 2F04      MOV	R16,R20
    009E DFF6      RCALL	_SPIMasterTransmit
(0082) 	PORTB |= (1 << 4);					//锁存数据
    009F 9AC4      SBI	0x18,4
    00A0 940E0184  CALL	pop_gset1
    00A2 9508      RET
(0083) }
(0084) /*-----------------------------------------------------------------
(0085) 函数名称: void Timer1Init(void)
(0086) 函数功能: 定时器1初始化  256预分频 定时一秒 
(0087) 参    数: 
(0088) 返 回 值: 无
(0089) -----------------------------------------------------------------*/
(0090) void Timer1Init(void)
(0091) {
(0092)  	TCCR1B = 0x00; 	 			  //关定时器
_Timer1Init:
    00A3 2422      CLR	R2
    00A4 BC2E      OUT	0x2E,R2
(0093)  	TCNT1H = 0xF0; 				  //设置定时初值
    00A5 EF80      LDI	R24,0xF0
    00A6 BD8D      OUT	0x2D,R24
(0094)  	TCNT1L = 0xBE;
    00A7 EB8E      LDI	R24,0xBE
    00A8 BD8C      OUT	0x2C,R24
(0095)  	OCR1AH = 0x0F;
    00A9 E08F      LDI	R24,0xF
    00AA BD8B      OUT	0x2B,R24
(0096)  	OCR1AL = 0x42;
    00AB E482      LDI	R24,0x42
    00AC BD8A      OUT	0x2A,R24
(0097)  	OCR1BH = 0x0F;
    00AD E08F      LDI	R24,0xF
    00AE BD89      OUT	0x29,R24
(0098)  	OCR1BL = 0x42;
    00AF E482      LDI	R24,0x42
    00B0 BD88      OUT	0x28,R24
(0099)  	ICR1H  = 0x0F;
    00B1 E08F      LDI	R24,0xF
    00B2 BD87      OUT	0x27,R24
(0100)  	ICR1L  = 0x42;
    00B3 E482      LDI	R24,0x42
    00B4 BD86      OUT	0x26,R24
(0101)  	TCCR1A = 0x00;
    00B5 BC2F      OUT	0x2F,R2
(0102)  	TCCR1B = 0x04; 		  		  //开始计数
    00B6 E084      LDI	R24,4
    00B7 BD8E      OUT	0x2E,R24
    00B8 9508      RET
_timer1_ovf_isr:
    00B9 938A      ST	R24,-Y
    00BA 939A      ST	R25,-Y
    00BB B78F      IN	R24,0x3F
    00BC 938A      ST	R24,-Y
(0103) }
(0104) 
(0105) #pragma interrupt_handler timer1_ovf_isr:9
(0106) void timer1_ovf_isr(void)
(0107) {
(0108)  	TCNT1H = 0xF0; 		  		  //重新装载计数值
    00BD EF80      LDI	R24,0xF0
    00BE BD8D      OUT	0x2D,R24
(0109)  	TCNT1L = 0xBE; 
    00BF EB8E      LDI	R24,0xBE
    00C0 BD8C      OUT	0x2C,R24
(0110)  	TimerCnt++;
    00C1 91800060  LDS	R24,TimerCnt
    00C3 5F8F      SUBI	R24,0xFF
    00C4 93800060  STS	TimerCnt,R24
    00C6 9189      LD	R24,Y+
    00C7 BF8F      OUT	0x3F,R24
    00C8 9199      LD	R25,Y+
    00C9 9189      LD	R24,Y+
    00CA 9518      RETI
(0111) }
(0112) /*-----------------------------------------------------------------
(0113) 函数名称: void InitDevices(void) 
(0114) 函数功能: 初始化各种信息
(0115) 参    数: 
(0116) 返 回 值: 无
(0117) -----------------------------------------------------------------*/
(0118) void InitDevices(void)
(0119) {
(0120)   	CLI(); 			   					//关全部中断
_InitDevices:
    00CB 94F8      BCLR	7
(0121) 	SPIMasterInit();   					//SPI初始化为主机
    00CC DFC2      RCALL	_SPIMasterInit
(0122)  	Timer1Init();
    00CD DFD5      RCALL	_Timer1Init
(0123) 
(0124)  	TIMSK = 0x04; 				  		 //timer interrupt sources
    00CE E084      LDI	R24,4
    00CF BF89      OUT	0x39,R24
(0125)  	SEI(); 		 	   					 //开中断
    00D0 9478      BSET	7
    00D1 9508      RET
(0126) }
(0127) 
(0128) void main(void) 
(0129) {
(0130)  	uchar temp;
(0131) 	DDRA = 0x00;						//方向输入
_main:
  temp                 --> R20
    00D2 2422      CLR	R2
    00D3 BA2A      OUT	0x1A,R2
(0132) 	PORTA = 0xFF;						//打开上拉
    00D4 EF8F      LDI	R24,0xFF
    00D5 BB8B      OUT	0x1B,R24
(0133) 	DDRB = 0xFF;						//方向输出
    00D6 BB87      OUT	0x17,R24
(0134) 	PORTB = 0xF0;						//电平设置
    00D7 EF80      LDI	R24,0xF0
    00D8 BB88      OUT	0x18,R24
(0135) 	DDRC = 0x00;
    00D9 BA24      OUT	0x14,R2
(0136) 	PORTC = 0xFF;
    00DA EF8F      LDI	R24,0xFF
    00DB BB85      OUT	0x15,R24
(0137) 	DDRD = 0xFF;
    00DC BB81      OUT	0x11,R24
(0138) 	PORTD = 0xFF;
    00DD BB82      OUT	0x12,R24
(0139) 	InitDevices();
    00DE DFEC      RCALL	_InitDevices
    00DF C07F      RJMP	0x015F
(0140) 	while (1) 
(0141) 	{
(0142) 		if( TimerCnt > 9)
    00E0 E089      LDI	R24,0x9
    00E1 90200060  LDS	R2,TimerCnt
    00E3 1582      CP	R24,R2
    00E4 F008      BCS	0x00E6
    00E5 C06A      RJMP	0x0150
(0143) 		{
(0144) 		 	if( TimerCnt > 99)
    00E6 E683      LDI	R24,0x63
    00E7 1582      CP	R24,R2
    00E8 F008      BCS	0x00EA
    00E9 C03E      RJMP	0x0128
(0145) 			{
(0146) 			 	DDRB  = 0xff;
    00EA EF8F      LDI	R24,0xFF
    00EB BB87      OUT	0x17,R24
(0147) 				PORTB = 0xff;
    00EC BB88      OUT	0x18,R24
(0148) 				temp  = TimerCnt / 100;
    00ED E614      LDI	R17,0x64
    00EE 2D02      MOV	R16,R2
    00EF 940E0163  CALL	div8u
    00F1 2F40      MOV	R20,R16
(0149) 		 		SPI595Out(disp[temp]);
    00F2 E681      LDI	R24,0x61
    00F3 E090      LDI	R25,0
    00F4 2FE4      MOV	R30,R20
    00F5 27FF      CLR	R31
    00F6 0FE8      ADD	R30,R24
    00F7 1FF9      ADC	R31,R25
    00F8 8100      LDD	R16,Z+0
    00F9 DF9F      RCALL	_SPI595Out
(0150) 				PORTB = 0xfb;
    00FA EF8B      LDI	R24,0xFB
    00FB BB88      OUT	0x18,R24
(0151) 				DelayMs(1);
    00FC E001      LDI	R16,1
    00FD DF80      RCALL	_DelayMs
(0152) 				PORTB = 0xff;
    00FE EF8F      LDI	R24,0xFF
    00FF BB88      OUT	0x18,R24
(0153) 				temp  = TimerCnt%100/10;
    0100 E614      LDI	R17,0x64
    0101 91000060  LDS	R16,TimerCnt
    0103 940E0161  CALL	mod8u
    0105 E01A      LDI	R17,0xA
    0106 940E0163  CALL	div8u
    0108 2F40      MOV	R20,R16
(0154) 				SPI595Out(disp[temp]);
    0109 E681      LDI	R24,0x61
    010A E090      LDI	R25,0
    010B 2FE4      MOV	R30,R20
    010C 27FF      CLR	R31
    010D 0FE8      ADD	R30,R24
    010E 1FF9      ADC	R31,R25
    010F 8100      LDD	R16,Z+0
    0110 DF88      RCALL	_SPI595Out
(0155) 				PORTB = 0xfd;
    0111 EF8D      LDI	R24,0xFD
    0112 BB88      OUT	0x18,R24
(0156) 				DelayMs(1);
    0113 E001      LDI	R16,1
    0114 DF69      RCALL	_DelayMs
(0157) 				PORTB = 0xff;
    0115 EF8F      LDI	R24,0xFF
    0116 BB88      OUT	0x18,R24
(0158) 				temp  = TimerCnt%10;
    0117 E01A      LDI	R17,0xA
    0118 91000060  LDS	R16,TimerCnt
    011A 940E0161  CALL	mod8u
    011C 2F40      MOV	R20,R16
(0159) 				SPI595Out(disp[temp]);
    011D E681      LDI	R24,0x61
    011E E090      LDI	R25,0
    011F 2FE4      MOV	R30,R20
    0120 27FF      CLR	R31
    0121 0FE8      ADD	R30,R24
    0122 1FF9      ADC	R31,R25
    0123 8100      LDD	R16,Z+0
    0124 DF74      RCALL	_SPI595Out
(0160) 				PORTB = 0xfe;
    0125 EF8E      LDI	R24,0xFE
    0126 BB88      OUT	0x18,R24
(0161) 			}
    0127 C035      RJMP	0x015D
(0162) 			else
(0163) 			{
(0164) 			 	DDRB  = 0xff;
    0128 EF8F      LDI	R24,0xFF
    0129 BB87      OUT	0x17,R24
(0165) 				PORTB = 0xff;
    012A BB88      OUT	0x18,R24
(0166) 				temp  = TimerCnt/10;
    012B E01A      LDI	R17,0xA
    012C 91000060  LDS	R16,TimerCnt
    012E 940E0163  CALL	div8u
    0130 2F40      MOV	R20,R16
(0167) 			 	SPI595Out(disp[temp]);
    0131 E681      LDI	R24,0x61
    0132 E090      LDI	R25,0
    0133 2FE4      MOV	R30,R20
    0134 27FF      CLR	R31
    0135 0FE8      ADD	R30,R24
    0136 1FF9      ADC	R31,R25
    0137 8100      LDD	R16,Z+0
    0138 DF60      RCALL	_SPI595Out
(0168) 				PORTB = 0xfd;
    0139 EF8D      LDI	R24,0xFD
    013A BB88      OUT	0x18,R24
(0169) 				DelayMs(1);
    013B E001      LDI	R16,1
    013C DF41      RCALL	_DelayMs
(0170) 				PORTB = 0xff;
    013D EF8F      LDI	R24,0xFF
    013E BB88      OUT	0x18,R24
(0171) 				temp  = TimerCnt%10;
    013F E01A      LDI	R17,0xA
    0140 91000060  LDS	R16,TimerCnt
    0142 940E0161  CALL	mod8u
    0144 2F40      MOV	R20,R16
(0172) 				SPI595Out(disp[temp]);
    0145 E681      LDI	R24,0x61
    0146 E090      LDI	R25,0
    0147 2FE4      MOV	R30,R20
    0148 27FF      CLR	R31
    0149 0FE8      ADD	R30,R24
    014A 1FF9      ADC	R31,R25
    014B 8100      LDD	R16,Z+0
    014C DF4C      RCALL	_SPI595Out
(0173) 				PORTB = 0xfe;
    014D EF8E      LDI	R24,0xFE
    014E BB88      OUT	0x18,R24
(0174) 			}
(0175) 		}
    014F C00D      RJMP	0x015D
(0176) 		else
(0177) 		{
(0178) 		 	DDRB  = 0xff;
    0150 EF8F      LDI	R24,0xFF
    0151 BB87      OUT	0x17,R24
(0179) 			PORTB = 0xfe;
    0152 EF8E      LDI	R24,0xFE
    0153 BB88      OUT	0x18,R24
(0180) 		 	SPI595Out(disp[TimerCnt]);
    0154 E681      LDI	R24,0x61
    0155 E090      LDI	R25,0
    0156 91E00060  LDS	R30,TimerCnt
    0158 27FF      CLR	R31
    0159 0FE8      ADD	R30,R24
    015A 1FF9      ADC	R31,R25
    015B 8100      LDD	R16,Z+0
    015C DF3C      RCALL	_SPI595Out
(0181) 		}
(0182) 		DelayMs(1);
FILE: <library>
    015D E001      LDI	R16,1
    015E DF1F      RCALL	_DelayMs
    015F CF80      RJMP	0x00E0
    0160 9508      RET
mod8u:
    0161 9468      BSET	6
    0162 C001      RJMP	xdiv8u
div8u:
    0163 94E8      BCLR	6
xdiv8u:
    0164 932A      ST	R18,-Y
    0165 92FA      ST	R15,-Y
    0166 92EA      ST	R14,-Y
    0167 24FF      CLR	R15
    0168 24EE      CLR	R14
    0169 E120      LDI	R18,0x10
    016A 0F00      LSL	R16
    016B 1CFF      ROL	R15
    016C 1CEE      ROL	R14
    016D 16E1      CP	R14,R17
    016E F010      BCS	0x0171
    016F 1AE1      SUB	R14,R17
    0170 9503      INC	R16
    0171 952A      DEC	R18
    0172 F7B9      BNE	0x016A
    0173 F40E      BRTC	0x0175
    0174 2D0E      MOV	R16,R14
    0175 90E9      LD	R14,Y+
    0176 90F9      LD	R15,Y+
    0177 9129      LD	R18,Y+
    0178 9508      RET
push_gset5:
    0179 92FA      ST	R15,-Y
    017A 92EA      ST	R14,-Y
push_gset4:
    017B 92DA      ST	R13,-Y
    017C 92CA      ST	R12,-Y
push_gset3:
    017D 92BA      ST	R11,-Y
    017E 92AA      ST	R10,-Y
push_gset2:
    017F 937A      ST	R23,-Y
    0180 936A      ST	R22,-Y
push_gset1:
    0181 935A      ST	R21,-Y
    0182 934A      ST	R20,-Y
    0183 9508      RET
pop_gset1:
    0184 E0E1      LDI	R30,1
pop:
    0185 9149      LD	R20,Y+
    0186 9159      LD	R21,Y+
    0187 FDE0      SBRC	R30,0
    0188 9508      RET
    0189 9169      LD	R22,Y+
    018A 9179      LD	R23,Y+
    018B FDE1      SBRC	R30,1
    018C 9508      RET
    018D 90A9      LD	R10,Y+
    018E 90B9      LD	R11,Y+
    018F FDE2      SBRC	R30,2
    0190 9508      RET
    0191 90C9      LD	R12,Y+
    0192 90D9      LD	R13,Y+
    0193 FDE3      SBRC	R30,3
    0194 9508      RET
    0195 90E9      LD	R14,Y+
    0196 90F9      LD	R15,Y+
    0197 9508      RET

⌨️ 快捷键说明

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