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

📄 lesson1.lst

📁 一个AVR单片机的示例程序。共初学者学习使用。。。。。。。。。。。。。。。。。。。。
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00B4 98DA      CBI	P1B,2
(0029)  }
    00B5 C00B      RJMP	0x00C1
(0030)  else
(0031)  {
(0032)   PORTB|=BIT(number);	   //输出数据
    00B6 E001      LDI	R16,1
    00B7 2F14      MOV	R17,R20
    00B8 D090      RCALL	lsl8
    00B9 B228      IN	R2,P18
    00BA 2A20      OR	R2,R16
    00BB BA28      OUT	P18,R2
(0033)   PORTA|=BIT(LEDLK);	   //更新数据
    00BC 9ADA      SBI	P1B,2
(0034)   Delayms(5);			   //调整时序
    00BD E005      LDI	R16,5
    00BE E010      LDI	R17,0
    00BF DFA9      RCALL	_Delayms
(0035)   PORTA&=~BIT(LEDLK);	   //锁存数据
    00C0 98DA      CBI	P1B,2
(0036)  }
(0037) }
    00C1 D084      RCALL	pop_gset2
    00C2 9508      RET
_All_led:
  light                --> R20
    00C3 D067      RCALL	push_gset1
    00C4 2F40      MOV	R20,R16
(0038) /*******************************************
(0039) 函数名称: All_led
(0040) 功    能: 点亮或者熄灭全部LED
(0041) 参    数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
(0042) 返回值  : 无
(0043) /********************************************/
(0044) void All_led(uchar light)
(0045) {
(0046)  if(light)
    00C5 2344      TST	R20
    00C6 F049      BEQ	0x00D0
(0047)  {
(0048)   PORTB&=~ALLLED;  		 //ALLLED=0xFF,使全部LED都亮
    00C7 B388      IN	R24,P18
    00C8 7080      ANDI	R24,0
    00C9 BB88      OUT	P18,R24
(0049)   PORTA|=BIT(LEDLK);	 //输出数据
    00CA 9ADA      SBI	P1B,2
(0050)   Delayms(5);			 //调整时序
    00CB E005      LDI	R16,5
    00CC E010      LDI	R17,0
    00CD DF9B      RCALL	_Delayms
(0051)   PORTA&=~BIT(LEDLK);	 //锁存数据
    00CE 98DA      CBI	P1B,2
(0052)  }
    00CF C008      RJMP	0x00D8
(0053)  else
(0054)  {
(0055)   PORTB|=ALLLED;		 //ALLLED=0xFF,使全部LED都灭
    00D0 B388      IN	R24,P18
    00D1 6F8F      ORI	R24,0xFF
    00D2 BB88      OUT	P18,R24
(0056)   PORTA|=BIT(LEDLK);	 //输出数据
    00D3 9ADA      SBI	P1B,2
(0057)   Delayms(5);			 //调整时序
    00D4 E005      LDI	R16,5
    00D5 E010      LDI	R17,0
    00D6 DF92      RCALL	_Delayms
(0058)   PORTA&=~BIT(LEDLK);	 //锁存数据
    00D7 98DA      CBI	P1B,2
(0059)  }
(0060) }
    00D8 D055      RCALL	pop_gset1
    00D9 9508      RET
_Flow_LED:
  i                    --> R20
  MS                   --> R22
    00DA D067      RCALL	push_gset2
    00DB 2F60      MOV	R22,R16
(0061) /*******************************************
(0062) 函数名称: Flow_led
(0063) 功    能: 流水灯(循环一次)
(0064) 参    数: MS--点亮相邻LED的时间间隔,单位是毫秒
(0065) 返回值  : 无
(0066) /********************************************/
(0067) void Flow_LED(uchar MS)
(0068) {
(0069)  uchar i;
(0070)  for(i=0;i<8;i++)	//循环8次,8个LED依次点亮
    00DC 2744      CLR	R20
    00DD C009      RJMP	0x00E7
(0071)  {
(0072)   All_led(FALSE);	//全部熄灭
    00DE 2700      CLR	R16
    00DF DFE3      RCALL	_All_led
(0073)   One_led(i,TRUE);	//点亮指定的LED
    00E0 E021      LDI	R18,1
    00E1 2F04      MOV	R16,R20
    00E2 DFC0      RCALL	_One_led
(0074)   Delayms(MS);		//延时指定的时间
    00E3 2F06      MOV	R16,R22
    00E4 2711      CLR	R17
    00E5 DF83      RCALL	_Delayms
    00E6 9543      INC	R20
    00E7 3048      CPI	R20,0x8
    00E8 F3A8      BCS	0x00DE
(0075)  } 
(0076) }
    00E9 D05C      RCALL	pop_gset2
    00EA 9508      RET
_Flash_LED:
  MS                   --> R22
  number               --> R20
    00EB D056      RCALL	push_gset2
    00EC 2F62      MOV	R22,R18
    00ED 2F40      MOV	R20,R16
(0077) /*******************************************
(0078) 函数名称: Flash_led
(0079) 功    能: 闪烁指定的LED(循环一次)
(0080) 参    数: number--指定的LED
(0081) 	  	  MS--LED闪烁的时间间隔
(0082) 返回值  : 无
(0083) /********************************************/
(0084) void Flash_LED(uchar number,uchar MS)
(0085) {
(0086)  One_led(number,TRUE);		//点亮指定的LED
    00EE E021      LDI	R18,1
    00EF 2F04      MOV	R16,R20
    00F0 DFB2      RCALL	_One_led
(0087)  Delayms(MS);				//延时指定的时间
    00F1 2F06      MOV	R16,R22
    00F2 2711      CLR	R17
    00F3 DF75      RCALL	_Delayms
(0088)  All_led(FALSE);			//熄灭所有的LED
    00F4 2700      CLR	R16
    00F5 DFCD      RCALL	_All_led
(0089)  Delayms(MS);				//延时指定的时间
    00F6 2F06      MOV	R16,R22
    00F7 2711      CLR	R17
    00F8 DF70      RCALL	_Delayms
(0090)  One_led(number,FALSE);		//熄灭指定的LED 
    00F9 2722      CLR	R18
    00FA 2F04      MOV	R16,R20
    00FB DFA7      RCALL	_One_led
(0091) }
    00FC D049      RCALL	pop_gset2
    00FD 9508      RET
(0092) /*******************************************
(0093) 函数名称: main
(0094) 功    能: 1. 流水灯 2.闪烁指定的LED
(0095) 参    数: 无
(0096) 返回值  : 无
(0097) /********************************************/
(0098) void main(void)
(0099) {	 
(0100)  uchar i,bit;
(0101)  i=0;  	   					//i=0时为流水灯,i=1时为闪烁灯
_main:
  bit                  --> R20
  i                    --> R22
    00FE 2766      CLR	R22
(0102)  bit=0;						//bit指定闪烁的LED
    00FF 2744      CLR	R20
(0103)  Board_init( );	   			//初始化开发板
    0100 DF7C      RCALL	_Board_init
    0101 C013      RJMP	0x0115
(0104)  while(1)
(0105)  {
(0106)   switch(i)
    0102 2EA6      MOV	R10,R22
    0103 24BB      CLR	R11
    0104 20AA      TST	R10
    0105 F411      BNE	0x0108
    0106 20BB      TST	R11
    0107 F039      BEQ	0x010F
    0108 2D8A      MOV	R24,R10
    0109 2D9B      MOV	R25,R11
    010A 3081      CPI	R24,1
    010B E0E0      LDI	R30,0
    010C 079E      CPC	R25,R30
    010D F021      BEQ	0x0112
    010E C006      RJMP	0x0115
(0107)   {
(0108)    case 0:
(0109)   	   Flow_LED(200);		//i=0,以流水灯的方式显示
    010F EC08      LDI	R16,0xC8
    0110 DFC9      RCALL	_Flow_LED
(0110) 	   break;
    0111 C003      RJMP	0x0115
(0111)    case 1:	 				
(0112)    	   Flash_LED(bit,100);	//i=1,以闪烁灯的方式显示
    0112 E624      LDI	R18,0x64
    0113 2F04      MOV	R16,R20
    0114 DFD6      RCALL	_Flash_LED
    0115 CFEC      RJMP	0x0102
(0113)   }
(0114)  }  
(0115) }FILE: <library>
    0116 9508      RET
mpy16s:
    0117 920A      ST	R0,-Y
    0118 921A      ST	R1,-Y
    0119 2400      CLR	R0
    011A 2411      CLR	R1
    011B 3000      CPI	R16,0
    011C 0701      CPC	R16,R17
    011D F041      BEQ	0x0126
    011E 9516      LSR	R17
    011F 9507      ROR	R16
    0120 F410      BCC	0x0123
    0121 0E02      ADD	R0,R18
    0122 1E13      ADC	R1,R19
    0123 0F22      LSL	R18
    0124 1F33      ROL	R19
    0125 CFF5      RJMP	0x011B
    0126 2D00      MOV	R16,R0
    0127 2D11      MOV	R17,R1
    0128 9019      LD	R1,Y+
    0129 9009      LD	R0,Y+
    012A 9508      RET
push_gset1:
    012B 935A      ST	R21,-Y
    012C 934A      ST	R20,-Y
    012D 9508      RET
pop_gset1:
    012E E0E1      LDI	R30,1
pop:
    012F 9149      LD	R20,Y+
    0130 9159      LD	R21,Y+
    0131 FDE0      SBRC	R30,0
    0132 9508      RET
    0133 9169      LD	R22,Y+
    0134 9179      LD	R23,Y+
    0135 FDE1      SBRC	R30,1
    0136 9508      RET
    0137 90A9      LD	R10,Y+
    0138 90B9      LD	R11,Y+
    0139 FDE2      SBRC	R30,2
    013A 9508      RET
    013B 90C9      LD	R12,Y+
    013C 90D9      LD	R13,Y+
    013D FDE3      SBRC	R30,3
    013E 9508      RET
    013F 90E9      LD	R14,Y+
    0140 90F9      LD	R15,Y+
    0141 9508      RET
push_gset2:
    0142 937A      ST	R23,-Y
    0143 936A      ST	R22,-Y
    0144 940C012B  JMP	push_gset1
pop_gset2:
    0146 E0E2      LDI	R30,2
    0147 940C012F  JMP	pop
lsl8:
    0149 2311      TST	R17
    014A F019      BEQ	0x014E
    014B 0F00      LSL	R16
    014C 951A      DEC	R17
    014D CFFB      RJMP	lsl8
    014E 9508      RET

⌨️ 快捷键说明

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