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

📄 led.lst

📁 meg16 的所有功能实例
💻 LST
字号:
__start:
__text_start:
    0031 E5CF      LDI	R28,0x5F
    0032 E0D4      LDI	R29,4
    0033 BFCD      OUT	0x3D,R28
    0034 BFDE      OUT	0x3E,R29
    0035 51C0      SUBI	R28,0x10
    0036 40D0      SBCI	R29,0
    0037 EA0A      LDI	R16,0xAA
    0038 8308      STD	Y+0,R16
    0039 2400      CLR	R0
    003A E6EE      LDI	R30,0x6E
    003B E0F0      LDI	R31,0
    003C E010      LDI	R17,0
    003D 37E6      CPI	R30,0x76
    003E 07F1      CPC	R31,R17
    003F F011      BEQ	0x0042
    0040 9201      ST	R0,Z+
    0041 CFFB      RJMP	0x003D
    0042 8300      STD	Z+0,R16
    0043 E5E4      LDI	R30,0x54
    0044 E0F0      LDI	R31,0
    0045 E6A0      LDI	R26,0x60
    0046 E0B0      LDI	R27,0
    0047 E010      LDI	R17,0
    0048 36E2      CPI	R30,0x62
    0049 07F1      CPC	R31,R17
    004A F021      BEQ	0x004F
    004B 95C8      LPM
    004C 9631      ADIW	R30,1
    004D 920D      ST	R0,X+
    004E CFF9      RJMP	0x0048
    004F 940E00F8  CALL	_main
_exit:
    0051 CFFF      RJMP	_exit
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **                               ADEmbed Development Co.,LTD.                                    
(0003) **                                 http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name:			main.c
(0006) ** Last modified Date:  2008-12-13
(0007) ** Last Version:		1.0
(0008) ** Descriptions:		Nixie Light Test.
(0009) ** 
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by:			junbolu
(0012) ** Created date:		2008-12-13
(0013) ** Version:				1.0
(0014) ** Descriptions:		
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **PA0~PA7口接LED的段码
(0027) **PB0~PB3口接LED的位选
(0028) **描述:这是一个秒表实验,最大支持99.99秒。由按键K0完成启动计时和停止计时。
(0029) **涉及知识点:
(0030) **          T/C0的CTC工作模式
(0031) **          INT0的下降沿中断工作模式
(0032) *******************************************************************************************************/
(0033) #include<iom16v.h>
(0034) #include<macros.h>
(0035) 
(0036) #define		fose	7372800
(0037) 
(0038) #define 	START   0
(0039) #define 	STOP	1
(0040) #define 	CLEAR   3
(0041) unsigned char Nixie_State;
(0042) unsigned int time_10ms;
(0043) unsigned char DISP_NUM;							//显示的位数
(0044) unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7};	//三位位选码
(0045) unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
(0046) unsigned char DISP_DATA[4];		//显示的数字
(0047) 
(0048) void Display(void);
(0049) 
(0050) void INT0_Init()
(0051) {
(0052)  GIFR |=0X40;              //清楚标志位
_INT0_Init:
    0052 B78A      IN	R24,0x3A
    0053 6480      ORI	R24,0x40
    0054 BF8A      OUT	0x3A,R24
(0053)  //MCUCR|=0X03; 			   //上升沿触发中断	
(0054)  MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断	
    0055 B785      IN	R24,0x35
    0056 6082      ORI	R24,2
    0057 BF85      OUT	0x35,R24
    0058 B785      IN	R24,0x35
    0059 7F8E      ANDI	R24,0xFE
    005A BF85      OUT	0x35,R24
(0055)  GICR |=0X40;  			   //使能外部中断0
    005B B78B      IN	R24,0x3B
    005C 6480      ORI	R24,0x40
    005D BF8B      OUT	0x3B,R24
    005E 9508      RET
_int0_isr:
    005F 922A      ST	R2,-Y
    0060 923A      ST	R3,-Y
    0061 938A      ST	R24,-Y
    0062 B62F      IN	R2,0x3F
    0063 922A      ST	R2,-Y
(0056) }
(0057) 
(0058) #pragma interrupt_handler int0_isr:2
(0059) void int0_isr(void)
(0060) {
(0061)  
(0062)  if((PIND&0x04)!=0x00)  //读取按键状态
    0064 9B82      SBIS	0x10,2
    0065 C001      RJMP	0x0067
(0063)     {
(0064) 	return;
    0066 C010      RJMP	0x0077
(0065) 	}
(0066)  if(Nixie_State ==STOP)
    0067 91800075  LDS	R24,Nixie_State
    0069 3081      CPI	R24,1
    006A F449      BNE	0x0074
(0067)  	{
(0068) 	time_10ms = 0;
    006B 2422      CLR	R2
    006C 2433      CLR	R3
    006D 92300074  STS	time_10ms+1,R3
    006F 92200073  STS	time_10ms,R2
(0069) 	Nixie_State = START;
    0071 92200075  STS	Nixie_State,R2
(0070) 	}
    0073 C003      RJMP	0x0077
(0071)  else
(0072)  	{
(0073) 	Nixie_State = STOP;
    0074 E081      LDI	R24,1
    0075 93800075  STS	Nixie_State,R24
(0074) 	}
    0077 9029      LD	R2,Y+
    0078 BE2F      OUT	0x3F,R2
    0079 9189      LD	R24,Y+
    007A 9039      LD	R3,Y+
    007B 9029      LD	R2,Y+
    007C 9518      RETI
(0075)  	
(0076) }
(0077) 
(0078) //显示函数,DISP_NUM决定显示哪个LED
(0079) //采用共阴LED动态显示方法,定时中断函数里面调用
(0080) void Display(void)		
(0081) {
(0082)  PORTA=0x00;					   			//清除显示再位选
_Display:
    007D 2422      CLR	R2
    007E BA2B      OUT	0x1B,R2
(0083)  PORTB=BitTab[DISP_NUM];					//PB口接位选
    007F E680      LDI	R24,0x60
    0080 E090      LDI	R25,0
    0081 91E00072  LDS	R30,DISP_NUM
    0083 27FF      CLR	R31
    0084 0FE8      ADD	R30,R24
    0085 1FF9      ADC	R31,R25
    0086 8020      LDD	R2,Z+0
    0087 BA28      OUT	0x18,R2
(0084)  PORTA=DispTab[DISP_DATA[DISP_NUM]];		//PA口接LED的段码
    0088 E68E      LDI	R24,0x6E
    0089 E090      LDI	R25,0
    008A 91E00072  LDS	R30,DISP_NUM
    008C 27FF      CLR	R31
    008D 0FE8      ADD	R30,R24
    008E 1FF9      ADC	R31,R25
    008F 81E0      LDD	R30,Z+0
    0090 27FF      CLR	R31
    0091 E684      LDI	R24,0x64
    0092 E090      LDI	R25,0
    0093 0FE8      ADD	R30,R24
    0094 1FF9      ADC	R31,R25
    0095 8020      LDD	R2,Z+0
    0096 BA2B      OUT	0x1B,R2
(0085)  
(0086)  if(DISP_NUM==1)
    0097 91800072  LDS	R24,DISP_NUM
    0099 3081      CPI	R24,1
    009A F409      BNE	0x009C
(0087)     PORTA|=0x80;		//PA口接LED的段码 
    009B 9ADF      SBI	0x1B,7
(0088)  
(0089)  DISP_NUM++;			//先显示低位,再显示高位
    009C 91800072  LDS	R24,DISP_NUM
    009E 5F8F      SUBI	R24,0xFF
    009F 93800072  STS	DISP_NUM,R24
(0090)  if(DISP_NUM==4)
    00A1 3084      CPI	R24,4
    00A2 F419      BNE	0x00A6
(0091)     DISP_NUM=0;
    00A3 2422      CLR	R2
    00A4 92200072  STS	DISP_NUM,R2
    00A6 9508      RET
_timer0comp:
    00A7 940E0131  CALL	push_lset
(0092) }
(0093) 
(0094) #pragma interrupt_handler timer0comp:20
(0095) void timer0comp (void)
(0096) {
(0097)  if(Nixie_State == START)
    00A9 90200075  LDS	R2,Nixie_State
    00AB 2022      TST	R2
    00AC F469      BNE	0x00BA
(0098)      {
(0099) 	 if(time_10ms<9999)
    00AD 91800073  LDS	R24,time_10ms
    00AF 91900074  LDS	R25,time_10ms+1
    00B1 308F      CPI	R24,0xF
    00B2 E2E7      LDI	R30,0x27
    00B3 079E      CPC	R25,R30
    00B4 F428      BCC	0x00BA
(0100) 	 	 {
(0101) 		 time_10ms++;
    00B5 9601      ADIW	R24,1
    00B6 93900074  STS	time_10ms+1,R25
    00B8 93800073  STS	time_10ms,R24
(0102) 		 } 
(0103) 	 }
(0104)  
(0105)  
(0106)  
(0107)  DISP_DATA[0]=time_10ms/1000;
    00BA EE28      LDI	R18,0xE8
    00BB E033      LDI	R19,3
    00BC 91000073  LDS	R16,time_10ms
    00BE 91100074  LDS	R17,time_10ms+1
    00C0 940E0117  CALL	div16u
    00C2 9300006E  STS	DISP_DATA,R16
(0108)  DISP_DATA[1]=(time_10ms/100)-(DISP_DATA[0]*10);
    00C4 2E20      MOV	R2,R16
    00C5 E08A      LDI	R24,0xA
    00C6 9D82      MUL	R24,R2
    00C7 0110      MOVW	R2,R0
    00C8 E624      LDI	R18,0x64
    00C9 E030      LDI	R19,0
    00CA 91000073  LDS	R16,time_10ms
    00CC 91100074  LDS	R17,time_10ms+1
    00CE 940E0117  CALL	div16u
    00D0 0128      MOVW	R4,R16
    00D1 1842      SUB	R4,R2
    00D2 0853      SBC	R5,R3
    00D3 9240006F  STS	DISP_DATA+1,R4
(0109)  DISP_DATA[3]=time_10ms%10;
    00D5 E02A      LDI	R18,0xA
    00D6 E030      LDI	R19,0
    00D7 91000073  LDS	R16,time_10ms
    00D9 91100074  LDS	R17,time_10ms+1
    00DB 940E0115  CALL	mod16u
    00DD 93000071  STS	DISP_DATA+3,R16
(0110)  DISP_DATA[2]=((time_10ms%100)-DISP_DATA[3])/10;
    00DF E624      LDI	R18,0x64
    00E0 E030      LDI	R19,0
    00E1 91000073  LDS	R16,time_10ms
    00E3 91100074  LDS	R17,time_10ms+1
    00E5 940E0115  CALL	mod16u
    00E7 0118      MOVW	R2,R16
    00E8 90400071  LDS	R4,DISP_DATA+3
    00EA 2455      CLR	R5
    00EB 1824      SUB	R2,R4
    00EC 0835      SBC	R3,R5
    00ED E02A      LDI	R18,0xA
    00EE E030      LDI	R19,0
    00EF 0181      MOVW	R16,R2
    00F0 940E0117  CALL	div16u
    00F2 93000070  STS	DISP_DATA+2,R16
(0111)  
(0112)  Display();
    00F4 DF88      RCALL	_Display
    00F5 940E0148  CALL	pop_lset
    00F7 9518      RETI
(0113) } 
(0114) 
(0115) void main(void)
(0116) {
(0117)  DDRA=0XFF;
_main:
    00F8 EF8F      LDI	R24,0xFF
    00F9 BB8A      OUT	0x1A,R24
(0118)  PORTA=0X00;
    00FA 2422      CLR	R2
    00FB BA2B      OUT	0x1B,R2
(0119)  DDRB=0X0F;
    00FC E08F      LDI	R24,0xF
    00FD BB87      OUT	0x17,R24
(0120)  PORTB=0X00;
    00FE BA28      OUT	0x18,R2
(0121)  
(0122)  //按键0端口初始化
(0123)  DDRD &=~0x04;	   	//设置PD2为输入   	   						
    00FF 988A      CBI	0x11,2
(0124)  PORTD|=0x04;		//设置PD2为上拉
    0100 9A92      SBI	0x12,2
(0125)  
(0126)  INT0_Init();                 //TART初始化
    0101 DF50      RCALL	_INT0_Init
(0127)  
(0128)  //t/c0初始化(10ms)
(0129)  TCCR0=0X0d;
    0102 E08D      LDI	R24,0xD
    0103 BF83      OUT	0x33,R24
(0130)  TCNT0=0X00;
    0104 2422      CLR	R2
    0105 BE22      OUT	0x32,R2
(0131)  OCR0=0X48;
    0106 E488      LDI	R24,0x48
    0107 BF8C      OUT	0x3C,R24
(0132)  TIMSK=0X02;
    0108 E082      LDI	R24,2
    0109 BF89      OUT	0x39,R24
(0133)  
(0134)  time_10ms=0;
    010A 2433      CLR	R3
    010B 92300074  STS	time_10ms+1,R3
    010D 92200073  STS	time_10ms,R2
(0135)  
(0136)  //asm("sei");
(0137)  SEI();                       //全局中断使能
    010F 9478      BSET	7
(0138)  
(0139)  Nixie_State = STOP;
    0110 E081      LDI	R24,1
    0111 93800075  STS	Nixie_State,R24
(0140)  for(;;)
FILE: <library>
    0113 CFFF      RJMP	0x0113
    0114 9508      RET
mod16u:
    0115 9468      BSET	6
    0116 C001      RJMP	xdiv16u
div16u:
    0117 94E8      BCLR	6
xdiv16u:
    0118 92EA      ST	R14,-Y
    0119 92FA      ST	R15,-Y
    011A 938A      ST	R24,-Y
    011B 24EE      CLR	R14
    011C 24FF      CLR	R15
    011D E180      LDI	R24,0x10
    011E 0F00      LSL	R16
    011F 1F11      ROL	R17
    0120 1CEE      ROL	R14
    0121 1CFF      ROL	R15
    0122 16E2      CP	R14,R18
    0123 06F3      CPC	R15,R19
    0124 F018      BCS	0x0128
    0125 1AE2      SUB	R14,R18
    0126 0AF3      SBC	R15,R19
    0127 9503      INC	R16
    0128 958A      DEC	R24
    0129 F7A1      BNE	0x011E
    012A F416      BRTC	0x012D
    012B 2D0E      MOV	R16,R14
    012C 2D1F      MOV	R17,R15
    012D 9189      LD	R24,Y+
    012E 90F9      LD	R15,Y+
    012F 90E9      LD	R14,Y+
    0130 9508      RET
push_lset:
    0131 93FA      ST	R31,-Y
    0132 93EA      ST	R30,-Y
    0133 93BA      ST	R27,-Y
    0134 93AA      ST	R26,-Y
    0135 939A      ST	R25,-Y
    0136 938A      ST	R24,-Y
    0137 933A      ST	R19,-Y
    0138 932A      ST	R18,-Y
    0139 931A      ST	R17,-Y
    013A 930A      ST	R16,-Y
    013B 929A      ST	R9,-Y
    013C 928A      ST	R8,-Y
    013D 927A      ST	R7,-Y
    013E 926A      ST	R6,-Y
    013F 925A      ST	R5,-Y
    0140 924A      ST	R4,-Y
    0141 923A      ST	R3,-Y
    0142 922A      ST	R2,-Y
    0143 921A      ST	R1,-Y
    0144 920A      ST	R0,-Y
    0145 B60F      IN	R0,0x3F
    0146 920A      ST	R0,-Y
    0147 9508      RET
pop_lset:
    0148 9009      LD	R0,Y+
    0149 BE0F      OUT	0x3F,R0
    014A 9009      LD	R0,Y+
    014B 9019      LD	R1,Y+
    014C 9029      LD	R2,Y+
    014D 9039      LD	R3,Y+
    014E 9049      LD	R4,Y+
    014F 9059      LD	R5,Y+
    0150 9069      LD	R6,Y+
    0151 9079      LD	R7,Y+
    0152 9089      LD	R8,Y+
    0153 9099      LD	R9,Y+
    0154 9109      LD	R16,Y+
    0155 9119      LD	R17,Y+
    0156 9129      LD	R18,Y+
    0157 9139      LD	R19,Y+
    0158 9189      LD	R24,Y+
    0159 9199      LD	R25,Y+
    015A 91A9      LD	R26,Y+
    015B 91B9      LD	R27,Y+
    015C 91E9      LD	R30,Y+
    015D 91F9      LD	R31,Y+
    015E 9508      RET

⌨️ 快捷键说明

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