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

📄 m16wdt.lst

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

⌨️ 快捷键说明

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