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

📄 count.lst

📁 AVR mega16系列单片机开发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    003B E5CF      LDI	R28,0x5F
    003C E0D4      LDI	R29,4
    003D BFCD      OUT	0x3D,R28
    003E BFDE      OUT	0x3E,R29
    003F 51C0      SUBI	R28,0x10
    0040 40D0      SBCI	R29,0
    0041 EA0A      LDI	R16,0xAA
    0042 8308      STD	Y+0,R16
    0043 2400      CLR	R0
    0044 E6E0      LDI	R30,0x60
    0045 E0F0      LDI	R31,0
    0046 E010      LDI	R17,0
    0047 36E3      CPI	R30,0x63
    0048 07F1      CPC	R31,R17
    0049 F011      BEQ	0x004C
    004A 9201      ST	R0,Z+
    004B CFFB      RJMP	0x0047
    004C 8300      STD	Z+0,R16
    004D E7E6      LDI	R30,0x76
    004E E0F0      LDI	R31,0
    004F E6A0      LDI	R26,0x60
    0050 E0B0      LDI	R27,0
    0051 E010      LDI	R17,0
    0052 37E6      CPI	R30,0x76
    0053 07F1      CPC	R31,R17
    0054 F021      BEQ	0x0059
    0055 95C8      LPM
    0056 9631      ADIW	R30,1
    0057 920D      ST	R0,X+
    0058 CFF9      RJMP	0x0052
    0059 940E00FF  CALL	_main
_exit:
    005B CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\count\led.c
(0001) #include "config.h"
(0002) 
(0003) const led_data[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
(0004) 
(0005) void led_init(void)
(0006) {
(0007)   led_ddr = 0xFF;                                                    //abcdefg dpi 各位设为输出
_led_init:
    005C EF8F      LDI	R24,0xFF
    005D BB8A      OUT	0x1A,R24
(0008)   led_contrl_ddr |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);     //ABCD四个控制设为输出
    005E B384      IN	R24,0x14
    005F 608F      ORI	R24,0xF
    0060 BB84      OUT	0x14,R24
    0061 9508      RET
_display_one:
  data                 --> R22
  count                --> R20
    0062 940E01C5  CALL	push_gset2
    0064 2F62      MOV	R22,R18
    0065 2F40      MOV	R20,R16
(0009) }
(0010) 
(0011) /***********************
(0012) ** 显示一位
(0013) ** 输入:count显示在第几位(3210),data 要显示的数(0~f)
(0014) ************************/
(0015) void display_one(uint8 count, uint8 data)
(0016) {
(0017)   led_port = led_data[data];                         //显示的数
    0066 E082      LDI	R24,2
    0067 9F86      MUL	R24,R22
    0068 01F0      MOVW	R30,R0
    0069 E584      LDI	R24,0x54
    006A E090      LDI	R25,0
    006B 0FE8      ADD	R30,R24
    006C 1FF9      ADC	R31,R25
    006D 9005      LPM	R0,Z+
    006E 9014      LPM	R1,0(Z)
    006F 01F0      MOVW	R30,R0
    0070 BBEB      OUT	0x1B,R30
(0018)   led_contrl_port &= ~(1<<count);                    //选中对应要显示的位,从右至左,0123
    0071 E001      LDI	R16,1
    0072 2F14      MOV	R17,R20
    0073 940E01DE  CALL	lsl8
    0075 2E20      MOV	R2,R16
    0076 9420      COM	R2
    0077 B235      IN	R3,0x15
    0078 2032      AND	R3,R2
    0079 BA35      OUT	0x15,R3
    007A 940E01BC  CALL	pop_gset2
    007C 9508      RET
_display:
  temp                 --> R20
  data                 --> R22
    007D 940E01C5  CALL	push_gset2
    007F 01B8      MOVW	R22,R16
(0019)                                                      //如果对位进行了调整,就不在是0123,而是对应的值
(0020) }
(0021) 
(0022) /***********************
(0023) ** 显示四位整数
(0024) ** 输入:要显示的四位数data,显示模式mode,1为补零显示模式,默认不显示零
(0025) ** 说明:可以小于四位数,mode=1时 自动补零
(0026) ************************/
(0027) void display(uint16 data)
(0028) {
(0029)  uint8 temp;
(0030)  if(data>1000)                           //千位
    0080 EE88      LDI	R24,0xE8
    0081 E093      LDI	R25,3
    0082 1786      CP	R24,R22
    0083 0797      CPC	R25,R23
    0084 F478      BCC	0x0094
(0031)    {
(0032)      temp=data/1000;
    0085 EE28      LDI	R18,0xE8
    0086 E033      LDI	R19,3
    0087 018B      MOVW	R16,R22
    0088 940E01A2  CALL	div16u
    008A 2F40      MOV	R20,R16
(0033)      display_one(0,temp);
    008B 2F24      MOV	R18,R20
    008C 2700      CLR	R16
    008D DFD4      RCALL	_display_one
(0034)      delay_ms(1);                          //是个经验值,刚好无闪烁,并且亮度较高
    008E E001      LDI	R16,1
    008F E010      LDI	R17,0
    0090 940E0161  CALL	_delay_ms
(0035)      led_contrl_port |= (1<<0);
    0092 9AA8      SBI	0x15,0
(0036)    }
    0093 C008      RJMP	0x009C
(0037)  else
(0038)    {
(0039)      display_one(0,16);
    0094 E120      LDI	R18,0x10
    0095 2700      CLR	R16
    0096 DFCB      RCALL	_display_one
(0040)      delay_ms(1);
    0097 E001      LDI	R16,1
    0098 E010      LDI	R17,0
    0099 940E0161  CALL	_delay_ms
(0041)      led_contrl_port |= (1<<0); 
    009B 9AA8      SBI	0x15,0
(0042)    }
(0043) 
(0044)  if(data>100)                            //百位
    009C E684      LDI	R24,0x64
    009D E090      LDI	R25,0
    009E 1786      CP	R24,R22
    009F 0797      CPC	R25,R23
    00A0 F498      BCC	0x00B4
(0045)    {
(0046)      temp=(data%1000)/100;
    00A1 EE28      LDI	R18,0xE8
    00A2 E033      LDI	R19,3
    00A3 018B      MOVW	R16,R22
    00A4 940E01A0  CALL	mod16u
    00A6 E624      LDI	R18,0x64
    00A7 E030      LDI	R19,0
    00A8 940E01A2  CALL	div16u
    00AA 2F40      MOV	R20,R16
(0047)      display_one(1,temp);
    00AB 2F24      MOV	R18,R20
    00AC E001      LDI	R16,1
    00AD DFB4      RCALL	_display_one
(0048)      delay_ms(1);
    00AE E001      LDI	R16,1
    00AF E010      LDI	R17,0
    00B0 940E0161  CALL	_delay_ms
(0049)      led_contrl_port |= (1<<1);
    00B2 9AA9      SBI	0x15,1
(0050)    }
    00B3 C008      RJMP	0x00BC
(0051)  else
(0052)    {
(0053)      display_one(1,16);
    00B4 E120      LDI	R18,0x10
    00B5 E001      LDI	R16,1
    00B6 DFAB      RCALL	_display_one
(0054)      delay_ms(1);
    00B7 E001      LDI	R16,1
    00B8 E010      LDI	R17,0
    00B9 940E0161  CALL	_delay_ms
(0055)     led_contrl_port |= (1<<1);
    00BB 9AA9      SBI	0x15,1
(0056)    }
(0057)  
(0058)  if(data>10)                            //十位
    00BC E08A      LDI	R24,0xA
    00BD E090      LDI	R25,0
    00BE 1786      CP	R24,R22
    00BF 0797      CPC	R25,R23
    00C0 F498      BCC	0x00D4
(0059)    {
(0060)      temp=(data%100)/10;
    00C1 E624      LDI	R18,0x64
    00C2 E030      LDI	R19,0
    00C3 018B      MOVW	R16,R22
    00C4 940E01A0  CALL	mod16u
    00C6 E02A      LDI	R18,0xA
    00C7 E030      LDI	R19,0
    00C8 940E01A2  CALL	div16u
    00CA 2F40      MOV	R20,R16
(0061)      display_one(2,temp);
    00CB 2F24      MOV	R18,R20
    00CC E002      LDI	R16,2
    00CD DF94      RCALL	_display_one
(0062)      delay_ms(1);
    00CE E001      LDI	R16,1
    00CF E010      LDI	R17,0
    00D0 940E0161  CALL	_delay_ms
(0063)      led_contrl_port |= (1<<2);
    00D2 9AAA      SBI	0x15,2
(0064)    }
    00D3 C008      RJMP	0x00DC
(0065)  else
(0066)    {
(0067)      display_one(2,16);
    00D4 E120      LDI	R18,0x10
    00D5 E002      LDI	R16,2
    00D6 DF8B      RCALL	_display_one
(0068)      delay_ms(1);
    00D7 E001      LDI	R16,1
    00D8 E010      LDI	R17,0
    00D9 940E0161  CALL	_delay_ms
(0069)      led_contrl_port |= (1<<2);  
    00DB 9AAA      SBI	0x15,2
(0070)  }
(0071)                                         //个位
(0072)  temp=data%10;
    00DC E02A      LDI	R18,0xA
    00DD E030      LDI	R19,0
    00DE 018B      MOVW	R16,R22
    00DF 940E01A0  CALL	mod16u
    00E1 2F40      MOV	R20,R16
(0073)  display_one(3,temp);
    00E2 2F24      MOV	R18,R20
    00E3 E003      LDI	R16,3
    00E4 DF7D      RCALL	_display_one
(0074)  delay_ms(1);
    00E5 E001      LDI	R16,1
    00E6 E010      LDI	R17,0
    00E7 940E0161  CALL	_delay_ms
(0075)  led_contrl_port |= (1<<3);
    00E9 9AAB      SBI	0x15,3
    00EA 940E01BC  CALL	pop_gset2
    00EC 9508      RET
_int0_isr:
    00ED 938A      ST	R24,-Y
    00EE B78F      IN	R24,0x3F
    00EF 938A      ST	R24,-Y
FILE: C:\DOCUME~1\Administrator\桌面\count\main.c
(0001) 
(0002) #include "config.h"
(0003) 
(0004) unsigned int i;
(0005) unsigned char flag;
(0006) 
(0007) #pragma interrupt_handler int0_isr:2
(0008) void int0_isr(void)
(0009) {
(0010)   flag = 1;
    00F0 E081      LDI	R24,1
    00F1 93800060  STS	flag,R24
    00F3 9189      LD	R24,Y+
    00F4 BF8F      OUT	0x3F,R24
    00F5 9189      LD	R24,Y+
    00F6 9518      RETI
(0011) }
(0012) 
(0013) void init_devices(void)
(0014) {
(0015)  CLI();                 //disable all interrupts
_init_devices:
    00F7 94F8      BCLR	7
(0016)  MCUCR = 0x00;
    00F8 2422      CLR	R2
    00F9 BE25      OUT	0x35,R2
(0017)  GICR  = 0x40;
    00FA E480      LDI	R24,0x40
    00FB BF8B      OUT	0x3B,R24
(0018)  TIMSK = 0x00;         //timer interrupt sources
    00FC BE29      OUT	0x39,R2
(0019)  SEI();                //re-enable interrupts
    00FD 9478      BSET	7
    00FE 9508      RET
(0020) }
(0021) 
(0022) void main(void)
(0023) {  
(0024)   led_init();  
_main:
    00FF 940E005C  CALL	_led_init
(0025)   init_devices(); 
    0101 DFF5      RCALL	_init_devices
    0102 C01A      RJMP	0x011D
(0026)   
(0027)    while(1)
(0028)      { 
(0029) 	 if(flag==1)  
    0103 91800060  LDS	R24,flag
    0105 3081      CPI	R24,1
    0106 F449      BNE	0x0110
(0030) 	   i++;
    0107 91800061  LDS	R24,i

⌨️ 快捷键说明

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