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

📄 led.lst

📁 AVR基本外设测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0142) 				KZT=2;        YYK=0;
    0199 E082      LDI	R24,2
    019A 93800069  STS	KZT,R24
    019C 2422      CLR	R2
    019D 9220006A  STS	YYK,R2
(0143) 				 if(CHW==0)    BIT_80|=0x80;//a.BEEP1=1;
    019F 9020006F  LDS	R2,CHW
    01A1 2022      TST	R2
    01A2 F429      BNE	0x01A8
    01A3 9180006E  LDS	R24,BIT_80
    01A5 6880      ORI	R24,0x80
    01A6 9380006E  STS	BIT_80,R24
(0144) 				return(1);
    01A8 E001      LDI	R16,1
    01A9 C02A      RJMP	0x01D4
(0145) 			}
(0146) 			return(0);
    01AA 2700      CLR	R16
    01AB C028      RJMP	0x01D4
(0147) 		case 2: if(YYK!=20 && (PPK==ADD || PPK==SUB  ))
    01AC 9180006A  LDS	R24,YYK
    01AE 3184      CPI	R24,0x14
    01AF F041      BEQ	0x01B8
    01B0 91800061  LDS	R24,PPK
    01B2 3083      CPI	R24,3
    01B3 F011      BEQ	0x01B6
    01B4 3084      CPI	R24,4
    01B5 F411      BNE	0x01B8
(0148)                            return(0);
    01B6 2700      CLR	R16
    01B7 C01C      RJMP	0x01D4
(0149) 				 YYK=0;
    01B8 2422      CLR	R2
    01B9 9220006A  STS	YYK,R2
(0150) 				 KEY=PPK;
    01BB 90200061  LDS	R2,PPK
    01BD 92200070  STS	KEY,R2
(0151) 				 KZT=3;
    01BF E083      LDI	R24,3
    01C0 93800069  STS	KZT,R24
(0152) 			return(1);
    01C2 E001      LDI	R16,1
    01C3 C010      RJMP	0x01D4
(0153) 		case 3: if (YYK!=10)      return(0);
    01C4 9180006A  LDS	R24,YYK
    01C6 308A      CPI	R24,0xA
    01C7 F011      BEQ	0x01CA
    01C8 2700      CLR	R16
    01C9 C00A      RJMP	0x01D4
(0154) 			 	YYK=0;
    01CA 2422      CLR	R2
    01CB 9220006A  STS	YYK,R2
(0155) 			 	KEY=PPK;
    01CD 90200061  LDS	R2,PPK
    01CF 92200070  STS	KEY,R2
(0156) 			 	return(1);               
    01D1 E001      LDI	R16,1
    01D2 C001      RJMP	0x01D4
(0157) 	 }
(0158) 	 return 255;
    01D3 EF0F      LDI	R16,0xFF
    01D4 D122      RCALL	pop_gset2
    01D5 9508      RET
FILE: C:\avr3\main.c
(0001)  #include"main.h"
(0002)  extern void keysy(void);
(0003)   
(0004)  
(0005) /*===============主函数部分===================*/ 
(0006) void main(void)
(0007) {  
(0008) //   unsigned int i;
(0009)    unsigned char x ;
(0010)    /*===============初始化函数============*/
(0011)   // init_1622();
(0012)   /*
(0013)   ======================================
(0014)   采用定时器管理
(0015)   定时器0预分频系数为1024,定时时间为1.25MS
(0016)   初值为=256-1.25*14.7456*1000000/1024/1000=238
(0017)   首先要开启定时器0,
(0018)   =========================================
(0019)   */
(0020)   for(x=0;x<23;x++)  LCD[x]=0XFF;
_main:
  x                    --> R20
    01D6 2744      CLR	R20
    01D7 C009      RJMP	0x01E1
    01D8 E78F      LDI	R24,0x7F
    01D9 E090      LDI	R25,0
    01DA 2FE4      MOV	R30,R20
    01DB 27FF      CLR	R31
    01DC 0FE8      ADD	R30,R24
    01DD 1FF9      ADC	R31,R25
    01DE EF8F      LDI	R24,0xFF
    01DF 8380      STD	Z+0,R24
    01E0 9543      INC	R20
    01E1 3147      CPI	R20,0x17
    01E2 F3A8      BCS	0x01D8
(0021)     
(0022)   TCCR0=0X05;   //预分频系数为1024   0000 0101
    01E3 E085      LDI	R24,5
    01E4 BF83      OUT	0x33,R24
(0023)   TCNT0=0XEE;   //238              
    01E5 EE8E      LDI	R24,0xEE
    01E6 BF82      OUT	0x32,R24
(0024)   TIMSK|=0X01;  //使能T/C0中断,允许中断
    01E7 B789      IN	R24,0x39
    01E8 6081      ORI	R24,1
    01E9 BF89      OUT	0x39,R24
(0025) 
(0026)   DDRD&=0XF3;   //PIND2 PIND3设为输入
    01EA B381      IN	R24,0x11
    01EB 7F83      ANDI	R24,0xF3
    01EC BB81      OUT	0x11,R24
(0027)   MCUCR=0X08;	//00001000下降沿触发中断、GICR
    01ED E088      LDI	R24,0x8
    01EE BF85      OUT	0x35,R24
(0028)                 //ISC11,ISC10 INT1下降沿          
(0029)   
(0030)   /*========PB2输出PWM信号WGM[3;0]=1011
(0031)     ========加一计数中比较匹配时清零OC1B
(0032) 	========减一计数中比较匹配时置位
(0033) 	========CS12,CS11,CS10=010,表示8预分频计时器
(0034)   */
(0035)   DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
    01EF B387      IN	R24,0x17
    01F0 638E      ORI	R24,0x3E
    01F1 BB87      OUT	0x17,R24
(0036)   TCCR1A=0X63;  //0110 0011
    01F2 E683      LDI	R24,0x63
    01F3 BD8F      OUT	0x2F,R24
(0037)   TCCR1B=0X12;  //0001 0010
    01F4 E182      LDI	R24,0x12
    01F5 BD8E      OUT	0x2E,R24
(0038)   OCR1A=0x61A7;    //设置TOP值为1249
    01F6 EA87      LDI	R24,0xA7
    01F7 E691      LDI	R25,0x61
    01F8 BD9B      OUT	0x2B,R25
    01F9 BD8A      OUT	0x2A,R24
(0039)   OCR1B=2500;      //比较匹配值
    01FA EC84      LDI	R24,0xC4
    01FB E099      LDI	R25,0x9
    01FC BD99      OUT	0x29,R25
    01FD BD88      OUT	0x28,R24
(0040)   
(0041)   SREG =0X80;      //使能总中断 
    01FE E880      LDI	R24,0x80
    01FF BF8F      OUT	0x3F,R24
(0042)   MBZ=0;               
    0200 2422      CLR	R2
    0201 92200097  STS	MBZ,R2
    0203 C012      RJMP	0x0216
(0043)   while(1)          
(0044)   { 
(0045)     keysy();  
    0204 D0AF      RCALL	_keysy
(0046)   	DDRD|=BIT(PD7); //PD7设为输出
    0205 9A8F      SBI	0x11,7
(0047) 	DDRD|=BIT(PD6);
    0206 9A8E      SBI	0x11,6
(0048) 	if(MBZ==0)                                     
    0207 90200097  LDS	R2,MBZ
    0209 2022      TST	R2
    020A F409      BNE	0x020C
(0049) 	 {
(0050)        LED_LIANG;   //PD7为1,点亮LED指示灯
    020B 9A97      SBI	0x12,7
(0051) 	 }
(0052) 	if(MBZ==1)                                                 
    020C 91800097  LDS	R24,MBZ
    020E 3081      CPI	R24,1
    020F F431      BNE	0x0216
(0053) 	 {
(0054) 	   LED_MIE;
    0210 9897      CBI	0x12,7
(0055) 	   BIT_80|=0x80;//a.BEEP1=1;
    0211 9180006E  LDS	R24,BIT_80
    0213 6880      ORI	R24,0x80
    0214 9380006E  STS	BIT_80,R24
    0216 CFED      RJMP	0x0204
    0217 9508      RET
_timet0_ovf:
    0218 922A      ST	R2,-Y
    0219 923A      ST	R3,-Y
    021A 938A      ST	R24,-Y
    021B 939A      ST	R25,-Y
    021C 93EA      ST	R30,-Y
    021D B62F      IN	R2,0x3F
    021E 922A      ST	R2,-Y
FILE: C:\avr3\time0.c
(0001) #include"sga.h" 
(0002) /*=============定时器0中断函数==============*/
(0003)  #pragma interrupt_handler timet0_ovf:10
(0004)   void timet0_ovf(void)               
(0005)   {
(0006)    	  static unsigned int 
(0007) 	  		 BEEP1_CONT=110,
(0008) 			 BEEP2_CONT=190,
(0009) 	  		 M05_CONT=800;  
(0010)    	    SREG =0X80;	 //重新开放中断
    021F E880      LDI	R24,0x80
    0220 BF8F      OUT	0x3F,R24
(0011)   	    TCNT0=0XEE;   //重装1.25MS的定时初值
    0221 EE8E      LDI	R24,0xEE
    0222 BF82      OUT	0x32,R24
(0012) 		DDRB|=BIT(PB0);
    0223 9AB8      SBI	0x17,0
(0013) 		PORTB|=BIT(PB0);                       
    0224 9AC0      SBI	0x18,0
(0014) 	    M05_CONT--;
    0225 91800067  LDS	R24,M05_CONT
    0227 91900068  LDS	R25,M05_CONT+1
    0229 9701      SBIW	R24,1
    022A 93900068  STS	M05_CONT+1,R25
    022C 93800067  STS	M05_CONT,R24
(0015) 	    if(M05_CONT==0)
    022E 3080      CPI	R24,0
    022F 0789      CPC	R24,R25
    0230 F489      BNE	0x0242
(0016) 	    {
(0017) 	       M05_CONT=800;
    0231 E280      LDI	R24,0x20
    0232 E093      LDI	R25,3
    0233 93900068  STS	M05_CONT+1,R25
    0235 93800067  STS	M05_CONT,R24
(0018) 		   if(MBZ==0)   { MBZ=1; }
    0237 90200097  LDS	R2,MBZ
    0239 2022      TST	R2
    023A F421      BNE	0x023F
    023B E081      LDI	R24,1
    023C 93800097  STS	MBZ,R24
    023E C003      RJMP	0x0242
(0019) 		   else         { MBZ=0; }
    023F 2422      CLR	R2
    0240 92200097  STS	MBZ,R2
(0020) 	    }
(0021) 		if(BIT_80&0x80==0x80)
    0242 9020006E  LDS	R2,BIT_80
    0244 FE20      SBRS	R2,0
    0245 C01C      RJMP	0x0262
(0022) 		{
(0023) 		 	BUZZ_NO;
    0246 9896      CBI	0x12,6
(0024) 		    if((BEEP1_CONT--)==1)
    0247 90200063  LDS	R2,BEEP1_CONT
    0249 90300064  LDS	R3,BEEP1_CONT+1
    024B 01C1      MOVW	R24,R2
    024C 9701      SBIW	R24,1
    024D 93900064  STS	BEEP1_CONT+1,R25
    024F 93800063  STS	BEEP1_CONT,R24
    0251 01C1      MOVW	R24,R2
    0252 3081      CPI	R24,1
    0253 E0E0      LDI	R30,0
    0254 079E      CPC	R25,R30
    0255 F461      BNE	0x0262
(0025) 	          {
(0026)  	           BEEP1_CONT=110;
    0256 E68E      LDI	R24,0x6E
    0257 E090      LDI	R25,0
    0258 93900064  STS	BEEP1_CONT+1,R25
    025A 93800063  STS	BEEP1_CONT,R24
(0027) 	           BUZZ_YE;
    025C 9A96      SBI	0x12,6
(0028) 	           BIT_80&=0x7f;//a.BEEP1=0;
    025D 9180006E  LDS	R24,BIT_80
    025F 778F      ANDI	R24,0x7F
    0260 9380006E  STS	BIT_80,R24
(0029) 	          }
(0030) 		}
(0031) /*==========响铃2次函数设置============*/	
(0032) 			if(BIT_80&0x40==0x40)		//响铃2次beep2
    0262 9020006E  LDS	R2,BIT_80
    0264 FE20      SBRS	R2,0
    0265 C03D      RJMP	0x02A3
(0033) 	{
(0034) 		--BEEP2_CONT;
    0266 91800065  LDS	R24,BEEP2_CONT
    0268 91900066  LDS	R25,BEEP2_CONT+1
    026A 9701      SBIW	R24,1
    026B 93900066  STS	BEEP2_CONT+1,R25
    026D 93800065  STS	BEEP2_CONT,R24
(0035) 		if(BEEP2_CONT>113)
    026F E781      LDI	R24,0x71
    0270 E090      LDI	R25,0
    0271 90200065  LDS	R2,BEEP2_CONT
    0273 90300066  LDS	R3,BEEP2_CONT+1
    0275 1582      CP	R24,R2
    0276 0593      CPC	R25,R3
    0277 F410      BCC	0x027A
(0036) 		{
(0037) 			BUZZ_NO;
    0278 9896      CBI	0x12,6
(0038) 		}else
    0279 C029      RJMP	0x02A3
(0039) 		if(BEEP2_CONT>75)
    027A E48B      LDI	R24,0x4B
    027B E090      LDI	R25,0
    027C 90200065  LDS	R2,BEEP2_CONT
    027E 90300066  LDS	R3,BEEP2_CONT+1
    0280 1582      CP	R24,R2
    0281 0593      CPC	R25,R3
    0282 F410      BCC	0x0285
(0040) 		{
(0041) 			BUZZ_YE;
    0283 9A96      SBI	0x12,6
(0042) 		}else
    0284 C01E      RJMP	0x02A3
(0043) 		if(BEEP2_CONT>0)
    0285 90200065  LDS	R2,BEEP2_CONT
    0287 90300066  LDS	R3,BEEP2_CONT+1
    0289 2022      TST	R2
    028A F411      BNE	0x028D
    028B 2033      TST	R3
    028C F011      BEQ	0x028F
(0044) 		{
(0045) 			BUZZ_NO;
    028D 9896      CBI	0x12,6
(0046) 		}else
    028E C014      RJMP	0x02A3
(0047) 		if(BEEP2_CONT==0)
    028F 90200065  LDS	R2,BEEP2_CONT
    0291 90300066  LDS	R3,BEEP2_CONT+1
    0293 2022      TST	R2
    0294 F471      BNE	0x02A3
    0295 2033      TST	R3
    0296 F461      BNE	0x02A3
(0048) 		{
(0049) 			BUZZ_YE;
    0297 9A96      SBI	0x12,6
(0050) 			BIT_80&=0xbf;
    0298 9180006E  LDS	R24,BIT_80
    029A 7B8F      ANDI	R24,0xBF
    029B 9380006E  STS	BIT_80,R24
(0051) 			BEEP2_CONT=190;
    029D EB8E      LDI	R24,0xBE
    029E E090      LDI	R25,0
    029F 93900066  STS	BEEP2_CONT+1,R25
    02A1 93800065  STS	BEEP2_CONT,R24
(0052) 		}
(0053) 	}
(0054) /*==========响铃2次函数结束============*/		
(0055) 	++TMS;
    02A3 9180006C  LDS	R24,TMS
    02A5 9190006D  LDS	R25,TMS+1
    02A7 9601      ADIW	R24,1
    02A8 9390006D  STS	TMS+1,R25
    02AA 9380006C  STS	TMS,R24
    02AC 9029      LD	R2,Y+
    02AD BE2F      OUT	0x3F,R2
    02AE 91E9      LD	R30,Y+
    02AF 9199      LD	R25,Y+
    02B0 9189      LD	R24,Y+
    02B1 9039      LD	R3,Y+
    02B2 9029      LD	R2,Y+
    02B3 9518      RETI
_keysy:
  x                    --> R20
    02B4 D04C      RCALL	push_gset1
FILE: C:\avr3\lcd.c
(0001) #include"sga.h" 
(0002)   unsigned char key_t2(void);
(0003)   void keysy(void)
(0004)  {
(0005)    unsigned char x;
(0006)    x=key_t2();
    02B5 DD82      RCALL	_key_t2
    02B6 2F40      MOV	R20,R16
(0007)    if(x==1)
    02B7 3001      CPI	R16,1
    02B8 F559      BNE	0x02E4
(0008)    switch(KEY) 
    02B9 91400070  LDS	R20,KEY
    02BB 2755      CLR	R21
    02BC 3041      CPI	R20,1
    02BD E0E0      LDI	R30,0
    02BE 075E      CPC	R21,R30
    02BF F0C9      BEQ	0x02D9
    02C0 3042      CPI	R20,2
    02C1 E0E0      LDI	R30,0
    02C2 075E      CPC	R21,R30
    02C3 F0D9      BEQ	0x02DF
    02C4 3043      CPI	R20,3
    02C5 E0E0      LDI	R30,0
    02C6 075E      CPC	R21,R30
    02C7 F029      BEQ	0x02CD
    02C8 3044      CPI	R20,4
    02C9 E0E0      LDI	R30,0
    02CA 075E      CPC	R21,R30
    02CB F039      BEQ	0x02D3
    02CC C017      RJMP	0x02E4
(0009)     		{
(0010) 	  	         case ADD:BIT_80|=0X80;    
    02CD 9180006E  LDS	R24,BIT_80
    02CF 6880      ORI	R24,0x80
    02D0 9380006E  STS	BIT_80,R24
(0011) 			   			break;
    02D2 C011      RJMP	0x02E4
(0012) 			   	 case SUB:BIT_80|=0X80;    
    02D3 9180006E  LDS	R24,BIT_80
    02D5 6880      ORI	R24,0x80
    02D6 9380006E  STS	BIT_80,R24
(0013) 			   			break;
    02D8 C00B      RJMP	0x02E4
(0014) 			     case BEGIN:BIT_80|=0X80;    
    02D9 9180006E  LDS	R24,BIT_80
    02DB 6880      ORI	R24,0x80
    02DC 9380006E  STS	BIT_80,R24
(0015) 			   			break;
    02DE C005      RJMP	0x02E4
(0016) 			     case END:BIT_80|=0X80;    
    02DF 9180006E  LDS	R24,BIT_80
    02E1 6880      ORI	R24,0x80
    02E2 9380006E  STS	BIT_80,R24
(0017) 			   			break;
    02E4 D01F      RCALL	pop_gset1
    02E5 9508      RET
_int0_ovf:
    02E6 922A      ST	R2,-Y
    02E7 923A      ST	R3,-Y
    02E8 B62F      IN	R2,0x3F
    02E9 922A      ST	R2,-Y
FILE: C:\avr3\INT_ONE.C
(0001) #include"sga.h" 
(0002) /*=============外部中断一 函数==============*/
(0003) #pragma interrupt_handler int0_ovf:3
(0004) void int0_ovf(void)
(0005) {
(0006)   static unsigned int tms;
(0007)   tms=TMS;
FILE: <library>
    02EA 9020006C  LDS	R2,TMS
    02EC 9030006D  LDS	R3,TMS+1
    02EE 92300099  STS	tms+1,R3
    02F0 92200098  STS	tms,R2
    02F2 9029      LD	R2,Y+
    02F3 BE2F      OUT	0x3F,R2
    02F4 9039      LD	R3,Y+
    02F5 9029      LD	R2,Y+
    02F6 9518      RETI
pop_gset2:
    02F7 E0E2      LDI	R30,2
    02F8 C00C      RJMP	pop
push_gset5:
    02F9 92FA      ST	R15,-Y
    02FA 92EA      ST	R14,-Y
push_gset4:
    02FB 92DA      ST	R13,-Y
    02FC 92CA      ST	R12,-Y
push_gset3:
    02FD 92BA      ST	R11,-Y
    02FE 92AA      ST	R10,-Y
push_gset2:
    02FF 937A      ST	R23,-Y
    0300 936A      ST	R22,-Y
push_gset1:
    0301 935A      ST	R21,-Y
    0302 934A      ST	R20,-Y
    0303 9508      RET
pop_gset1:
    0304 E0E1      LDI	R30,1
pop:
    0305 9149      LD	R20,Y+
    0306 9159      LD	R21,Y+
    0307 FDE0      SBRC	R30,0
    0308 9508      RET
    0309 9169      LD	R22,Y+
    030A 9179      LD	R23,Y+
    030B FDE1      SBRC	R30,1
    030C 9508      RET
    030D 90A9      LD	R10,Y+
    030E 90B9      LD	R11,Y+
    030F FDE2      SBRC	R30,2
    0310 9508      RET
    0311 90C9      LD	R12,Y+
    0312 90D9      LD	R13,Y+
    0313 FDE3      SBRC	R30,3
    0314 9508      RET
    0315 90E9      LD	R14,Y+
    0316 90F9      LD	R15,Y+
    0317 9508      RET

⌨️ 快捷键说明

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