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

📄 timer0.lst

📁 protues_atmeg8学习之:timer篇源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00CF F031      BEQ	0x00D6
    00D0 C008      RJMP	0x00D9
(0075) 	{
(0076) 	case 1:
(0077) 	    TCNT0=0x06;      //计数初始值6 
    00D1 E086      LDI	R24,6
    00D2 BF82      OUT	0x32,R24
(0078) 		TCCR0=0x03;      //打开T/C0,系统时钟64分频 
    00D3 E083      LDI	R24,3
    00D4 BF83      OUT	0x33,R24
(0079) 		break;
    00D5 C00C      RJMP	0x00E2
(0080) 	case 2:
(0081) 		TCCR0=0x00;      //关闭T/C0
    00D6 2422      CLR	R2
    00D7 BE23      OUT	0x33,R2
(0082) 		break;
    00D8 C009      RJMP	0x00E2
(0083) 	default:
(0084) 		TimeNum[0]=TimeNum[1]=TimeNum[2]=0;//计时清零		
    00D9 2422      CLR	R2
    00DA 92200062  STS	0x62,R2
    00DC 92200061  STS	0x61,R2
    00DE 92200060  STS	0x60,R2
(0085) 		KeyDown=0;
    00E0 92200064  STS	_KeyDown,R2
(0086) 		break;		
(0087) 	}
(0088) }
    00E2 9029      LD	R2,Y+
    00E3 BE2F      OUT	0x3F,R2
    00E4 91E9      LD	R30,Y+
    00E5 9199      LD	R25,Y+
    00E6 9189      LD	R24,Y+
    00E7 9119      LD	R17,Y+
    00E8 9109      LD	R16,Y+
    00E9 9029      LD	R2,Y+
    00EA 9518      RETI
_timer0_fun:
    00EB 922A      ST	R2,-Y
    00EC 938A      ST	R24,-Y
    00ED 939A      ST	R25,-Y
    00EE B62F      IN	R2,0x3F
    00EF 922A      ST	R2,-Y
(0089) 
(0090) //T/C0中断函数
(0091) #pragma interrupt_handler timer0_fun:iv_TIMER0_OVF 
(0092) void timer0_fun(void)
(0093) {
(0094)     TCNT0=0x06 ;               //重装计数初始值6    
    00F0 E086      LDI	R24,6
    00F1 BF82      OUT	0x32,R24
(0095) 	if(++CountNum==5)           
    00F2 91800063  LDS	R24,_CountNum
    00F4 5F8F      SUBI	R24,0xFF
    00F5 2E28      MOV	R2,R24
    00F6 92200063  STS	_CountNum,R2
    00F8 3085      CPI	R24,5
    00F9 F521      BNE	0x011E
(0096)     {
(0097) 	    CountNum=0;            //计数到5次,计数值复位
    00FA 2422      CLR	R2
    00FB 92200063  STS	_CountNum,R2
(0098)         TimeNum[2]++;          //秒的百分位加1
    00FD 91800062  LDS	R24,0x62
    00FF 5F8F      SUBI	R24,0xFF
    0100 93800062  STS	0x62,R24
(0099)         if(TimeNum[2]==100)
    0102 3684      CPI	R24,0x64
    0103 F439      BNE	0x010B
(0100)         {
(0101) 		    TimeNum[2]=0;
    0104 92200062  STS	0x62,R2
(0102)             TimeNum[1]++;      //秒进位
    0106 91800061  LDS	R24,0x61
    0108 5F8F      SUBI	R24,0xFF
    0109 93800061  STS	0x61,R24
(0103) 		}
(0104)         if(TimeNum[1]==60)
    010B 91800061  LDS	R24,0x61
    010D 338C      CPI	R24,0x3C
    010E F441      BNE	0x0117
(0105)         {
(0106) 		   TimeNum[1]=0;
    010F 2422      CLR	R2
    0110 92200061  STS	0x61,R2
(0107)            TimeNum[0]++;      //分进位
    0112 91800060  LDS	R24,0x60
    0114 5F8F      SUBI	R24,0xFF
    0115 93800060  STS	0x60,R24
(0108) 		}             
(0109)         if(TimeNum[0]==60)
    0117 91800060  LDS	R24,0x60
    0119 338C      CPI	R24,0x3C
    011A F419      BNE	0x011E
(0110)         {
(0111) 			TimeNum[0]=0;
    011B 2422      CLR	R2
    011C 92200060  STS	0x60,R2
(0112) 		}
(0113)     }	
(0114) }
    011E 9029      LD	R2,Y+
    011F BE2F      OUT	0x3F,R2
    0120 9199      LD	R25,Y+
    0121 9189      LD	R24,Y+
    0122 9029      LD	R2,Y+
    0123 9518      RETI
_main:
  timer                --> Y+0
    0124 9726      SBIW	R28,6
(0115) 
(0116) //主函数
(0117) void main()
(0118) {
(0119)     unsigned char timer[6]={0, 0, 0, 0, 0, 0};
    0125 E380      LDI	R24,0x30
    0126 E090      LDI	R25,0
    0127 01FE      MOVW	R30,R28
    0128 E006      LDI	R16,6
    0129 E010      LDI	R17,0
    012A 93FA      ST	R31,-Y
    012B 93EA      ST	R30,-Y
    012C 939A      ST	R25,-Y
    012D 938A      ST	R24,-Y
    012E D06D      RCALL	asgncblk
(0120) 	
(0121) 	CLI();         //先关闭全局中断
    012F 94F8      BCLR	7
(0122) 	Init_Port();   //初始化端口
    0130 DF23      RCALL	_Init_Port
(0123)     Init_Int();    //初始化外部中断	
    0131 DF2E      RCALL	_Init_Int
(0124)     Init_Timer0(); //初始化T/C0
    0132 DF37      RCALL	_Init_Timer0
(0125) 	
(0126) 	KeyDown=0;     //初始化全局变量
    0133 2422      CLR	R2
    0134 92200064  STS	_KeyDown,R2
(0127) 	CountNum=0;
    0136 92200063  STS	_CountNum,R2
(0128) 	SEI();         //打开全局中断
    0138 9478      BSET	7
    0139 C020      RJMP	0x015A
(0129) 	while (1)
(0130) 	{	           
(0131) 		timer[0]=TimeNum[0]/10;
    013A E01A      LDI	R17,0xA
    013B 91000060  LDS	R16,0x60
    013D D021      RCALL	div8u
    013E 8308      STD	Y+0,R16
(0132) 		timer[1]=TimeNum[0]%10;
    013F E01A      LDI	R17,0xA
    0140 91000060  LDS	R16,0x60
    0142 D01A      RCALL	mod8u
    0143 8309      STD	Y+1,R16
(0133) 		timer[2]=TimeNum[1]/10;
    0144 E01A      LDI	R17,0xA
    0145 91000061  LDS	R16,0x61
    0147 D017      RCALL	div8u
    0148 830A      STD	Y+2,R16
(0134) 		timer[3]=TimeNum[1]%10;
    0149 E01A      LDI	R17,0xA
    014A 91000061  LDS	R16,0x61
    014C D010      RCALL	mod8u
    014D 830B      STD	Y+3,R16
(0135) 		timer[4]=TimeNum[2]/10;
    014E E01A      LDI	R17,0xA
    014F 91000062  LDS	R16,0x62
    0151 D00D      RCALL	div8u
    0152 830C      STD	Y+4,R16
(0136) 		timer[5]=TimeNum[2]%10;			
    0153 E01A      LDI	R17,0xA
    0154 91000062  LDS	R16,0x62
    0156 D006      RCALL	mod8u
    0157 830D      STD	Y+5,R16
(0137) 		Display(timer);          //显示时间
    0158 018E      MOVW	R16,R28
    0159 DF18      RCALL	_Display
    015A CFDF      RJMP	0x013A
(0138)      }
(0139) }
FILE: <library>
    015B 9626      ADIW	R28,6
    015C 9508      RET
mod8u:
    015D 9468      BSET	6
    015E C001      RJMP	xdiv8u
div8u:
    015F 94E8      BCLR	6
xdiv8u:
    0160 932A      ST	R18,-Y
    0161 92FA      ST	R15,-Y
    0162 92EA      ST	R14,-Y
    0163 24FF      CLR	R15
    0164 24EE      CLR	R14
    0165 E120      LDI	R18,0x10
    0166 0F00      LSL	R16
    0167 1CFF      ROL	R15
    0168 1CEE      ROL	R14
    0169 16E1      CP	R14,R17
    016A F010      BCS	0x016D
    016B 1AE1      SUB	R14,R17
    016C 9503      INC	R16
    016D 952A      DEC	R18
    016E F7B9      BNE	0x0166
    016F F40E      BRTC	0x0171
    0170 2D0E      MOV	R16,R14
    0171 90E9      LD	R14,Y+
    0172 90F9      LD	R15,Y+
    0173 9129      LD	R18,Y+
    0174 9508      RET
pop_gset2:
    0175 E0E2      LDI	R30,2
    0176 C006      RJMP	pop
pop_gset3:
    0177 E0E4      LDI	R30,4
    0178 C004      RJMP	pop
push_gset1:
    0179 935A      ST	R21,-Y
    017A 934A      ST	R20,-Y
    017B 9508      RET
pop_gset1:
    017C E0E1      LDI	R30,1
pop:
    017D 9149      LD	R20,Y+
    017E 9159      LD	R21,Y+
    017F FDE0      SBRC	R30,0
    0180 9508      RET
    0181 9169      LD	R22,Y+
    0182 9179      LD	R23,Y+
    0183 FDE1      SBRC	R30,1
    0184 9508      RET
    0185 90A9      LD	R10,Y+
    0186 90B9      LD	R11,Y+
    0187 FDE2      SBRC	R30,2
    0188 9508      RET
    0189 90C9      LD	R12,Y+
    018A 90D9      LD	R13,Y+
    018B FDE3      SBRC	R30,3
    018C 9508      RET
    018D 90E9      LD	R14,Y+
    018E 90F9      LD	R15,Y+
    018F 9508      RET
push_gset2:
    0190 937A      ST	R23,-Y
    0191 936A      ST	R22,-Y
    0192 CFE6      RJMP	push_gset1
push_gset3:
    0193 92BA      ST	R11,-Y
    0194 92AA      ST	R10,-Y
    0195 CFFA      RJMP	push_gset2
lsl8:
    0196 2311      TST	R17
    0197 F019      BEQ	0x019B
    0198 0F00      LSL	R16
    0199 951A      DEC	R17
    019A CFFB      RJMP	lsl8
    019B 9508      RET
asgncblk:
    019C 93AA      ST	R26,-Y
    019D 93BA      ST	R27,-Y
    019E 93EA      ST	R30,-Y
    019F 93FA      ST	R31,-Y
    01A0 920A      ST	R0,-Y
    01A1 81AF      LDD	R26,Y+7
    01A2 85B8      LDD	R27,Y+8
    01A3 81ED      LDD	R30,Y+5
    01A4 81FE      LDD	R31,Y+6
    01A5 3000      CPI	R16,0
    01A6 0701      CPC	R16,R17
    01A7 F031      BEQ	0x01AE
    01A8 95C8      LPM
    01A9 920D      ST	R0,X+
    01AA 9631      ADIW	R30,1
    01AB 5001      SUBI	R16,1
    01AC 4010      SBCI	R17,0
    01AD CFF7      RJMP	0x01A5
    01AE 9009      LD	R0,Y+
    01AF 91F9      LD	R31,Y+
    01B0 91E9      LD	R30,Y+
    01B1 91B9      LD	R27,Y+
    01B2 91A9      LD	R26,Y+
    01B3 9624      ADIW	R28,4
    01B4 9508      RET

⌨️ 快捷键说明

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