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

📄 led.lst

📁 一个关于AVR单片机的例程
💻 LST
字号:
__text_start:
__start:
    0056 E5CF      LDI	R28,0x5F
    0057 E0D4      LDI	R29,4
    0058 BFCD      OUT	0x3D,R28
    0059 BFDE      OUT	0x3E,R29
    005A 51C0      SUBI	R28,0x10
    005B 40D0      SBCI	R29,0
    005C EA0A      LDI	R16,0xAA
    005D 8308      STD	Y+0,R16
    005E 2400      CLR	R0
    005F E6E0      LDI	R30,0x60
    0060 E0F0      LDI	R31,0
    0061 E010      LDI	R17,0
    0062 36E0      CPI	R30,0x60
    0063 07F1      CPC	R31,R17
    0064 F011      BEQ	0x0067
    0065 9201      ST	R0,Z+
    0066 CFFB      RJMP	0x0062
    0067 8300      STD	Z+0,R16
    0068 EAEC      LDI	R30,0xAC
    0069 E0F0      LDI	R31,0
    006A E6A0      LDI	R26,0x60
    006B E0B0      LDI	R27,0
    006C E010      LDI	R17,0
    006D 3AEC      CPI	R30,0xAC
    006E 07F1      CPC	R31,R17
    006F F021      BEQ	0x0074
    0070 95C8      LPM
    0071 9631      ADIW	R30,1
    0072 920D      ST	R0,X+
    0073 CFF9      RJMP	0x006D
    0074 940E00A0  CALL	_main
_exit:
    0076 CFFF      RJMP	_exit
_display:
  row                  --> R20
  num                  --> R22
    0077 940E014C  CALL	push_gset2
    0079 2F42      MOV	R20,R18
    007A 2F60      MOV	R22,R16
FILE: C:\DOCUME~1\administrator\桌面\教程\8x8led\main.c
(0001) 
(0002) /*********************************************
(0003) 显示向左的箭头
(0004) Chip type : ATmega16
(0005) *********************************************/
(0006) #include <iom16v.h>
(0007) #include "delay.h"
(0008) const unsigned char char_7[][8]={
(0009) {0x00,0x00,0x7c,0x82,0x82,0x7c,0x00,0x00},//0
(0010) {0x00,0x00,0x00,0x84,0xfe,0x80,0x00,0x00},//1
(0011) //{0x00,0x00,0xf2,0x92,0x92,0x9e,0x00,0x00},//正2
(0012) {0x00,0x00,0xc4,0xa2,0x92,0x8c,0x00,0x00},//2
(0013) {0x00,0x00,0x44,0x92,0x92,0x6c,0x00,0x00},//3
(0014) //{0x00,0x00,0x92,0x92,0x92,0xfe,0x00,0x00},//正3
(0015) {0x00,0x00,0x18,0x14,0xfe,0x10,0x00,0x00},//4
(0016) {0x00,0x00,0x9e,0x94,0x94,0x64,0x00,0x00},//5
(0017) {0x00,0x00,0x7c,0x92,0x92,0x64,0x00,0x00},//6
(0018) {0x00,0x00,0x02,0xf2,0x0a,0x06,0x00,0x00},//7
(0019) {0x00,0x00,0x6c,0x92,0x92,0x6c,0x00,0x00},//8
(0020) {0x00,0x00,0x4c,0x92,0x92,0x7c,0x00,0x00},//9
(0021) {0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38},//向左箭头
(0022) };
(0023) 
(0024) void display(unsigned char num,char row)
(0025) {
(0026)  if(row>7)//容错处理
    007B E087      LDI	R24,7
    007C 1784      CP	R24,R20
    007D F428      BCC	0x0083
(0027)  {
(0028)  PORTA = 0XFF;
    007E EF8F      LDI	R24,0xFF
    007F BB8B      OUT	0x1B,R24
(0029)  PORTB = 0X81; //显示中间6排
    0080 E881      LDI	R24,0x81
    0081 BB88      OUT	0x18,R24
(0030)  }
    0082 C01A      RJMP	0x009D
(0031)  else
(0032)  {
(0033)  PORTA = char_7[num][row];
    0083 E088      LDI	R24,0x8
    0084 9F86      MUL	R24,R22
    0085 0110      MOVW	R2,R0
    0086 E584      LDI	R24,0x54
    0087 E090      LDI	R25,0
    0088 0E28      ADD	R2,R24
    0089 1E39      ADC	R3,R25
    008A 2FE4      MOV	R30,R20
    008B 27FF      CLR	R31
    008C 0DE2      ADD	R30,R2
    008D 1DF3      ADC	R31,R3
    008E 91E4      LPM	R30,0(Z)
    008F BBEB      OUT	0x1B,R30
(0034)  PORTB = ~(1<<row);
    0090 E001      LDI	R16,1
    0091 2F14      MOV	R17,R20
    0092 940E0165  CALL	lsl8
    0094 2E20      MOV	R2,R16
    0095 9420      COM	R2
    0096 BA28      OUT	0x18,R2
(0035)  delay_ms(2);
    0097 E002      LDI	R16,2
    0098 E010      LDI	R17,0
    0099 940E0104  CALL	_delay_ms
(0036)  PORTB = 0xFF;
    009B EF8F      LDI	R24,0xFF
    009C BB88      OUT	0x18,R24
(0037)  }
    009D 940E0143  CALL	pop_gset2
    009F 9508      RET
(0038) }
(0039) 
(0040) 
(0041) void main(void)
(0042) {
(0043) char number=0,i = 0;
_main:
  time_counter         --> R20
  number               --> R22
  i                    --> R10
    00A0 2766      CLR	R22
    00A1 24AA      CLR	R10
(0044) int time_counter=0;
    00A2 2744      CLR	R20
    00A3 2755      CLR	R21
(0045) PORTA=0xFF;
    00A4 EF8F      LDI	R24,0xFF
    00A5 BB8B      OUT	0x1B,R24
(0046) DDRA=0xFF;
    00A6 BB8A      OUT	0x1A,R24
(0047) PORTB=0x00;
    00A7 2422      CLR	R2
    00A8 BA28      OUT	0x18,R2
(0048) DDRB=0xFF;
    00A9 BB87      OUT	0x17,R24
    00AA C015      RJMP	0x00C0
(0049) 
(0050) //delay_1s(); //全亮一秒
(0051) 
(0052) while (1)
(0053) {
(0054) 
(0055)  for(i=0;i<8;i++)
    00AB 24AA      CLR	R10
    00AC C004      RJMP	0x00B1
(0056)  {
(0057)   display(number,i);
    00AD 2D2A      MOV	R18,R10
    00AE 2F06      MOV	R16,R22
    00AF DFC7      RCALL	_display
    00B0 94A3      INC	R10
    00B1 2D8A      MOV	R24,R10
    00B2 3088      CPI	R24,0x8
    00B3 F3C8      BCS	0x00AD
(0058)  }
(0059)  
(0060)  time_counter++;
    00B4 5F4F      SUBI	R20,0xFF
    00B5 4F5F      SBCI	R21,0xFF
(0061)  if(time_counter==100)
    00B6 3644      CPI	R20,0x64
    00B7 E0E0      LDI	R30,0
    00B8 075E      CPC	R21,R30
    00B9 F431      BNE	0x00C0
(0062)  {
(0063)  time_counter=0;
    00BA 2744      CLR	R20
    00BB 2755      CLR	R21
(0064)  number++;
    00BC 9563      INC	R22
(0065)  if(number==11) number=0; //加到九返回零
    00BD 306B      CPI	R22,0xB
    00BE F409      BNE	0x00C0
    00BF 2766      CLR	R22
    00C0 CFEA      RJMP	0x00AB
    00C1 9508      RET
FILE: C:\DOCUME~1\administrator\桌面\教程\8x8led\delay.c
(0001) /****************************
(0002) ** file_name delay.c       **
(0003) ** describe  软件延时函数  **
(0004) ** auther    古欣          **
(0005) ** Time      2007-1-31     **
(0006) *****************************/
(0007) #include "delay.h"
(0008) /***********************
(0009) ** 8M晶振下 1us
(0010) ** 也可以宏定义 8个asm("nop");
(0011) ** #define delay_1us asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
(0012) ***********************/
(0013) void delay_1us(void)
(0014) {
(0015)  asm("nop");
_delay_1us:
    00C2 0000      NOP
    00C3 9508      RET
(0016) }
(0017) 
(0018) /***********************
(0019) **8M时为 1000.25us
(0020) **4M时为 999.5us
(0021) **xtal 为晶振频率,单位为Mhz
(0022) ************************/
(0023) void delay_1ms(void)
(0024) {
(0025)  unsigned int i;
(0026)  for(i=(xtal*143-2);i>0;i--)
_delay_1ms:
  i                    --> R16
    00C4 E706      LDI	R16,0x76
    00C5 E014      LDI	R17,4
    00C6 C002      RJMP	0x00C9
    00C7 5001      SUBI	R16,1
    00C8 4010      SBCI	R17,0
    00C9 3000      CPI	R16,0
    00CA 0701      CPC	R16,R17
    00CB F7D9      BNE	0x00C7
    00CC 9508      RET
_delay_1s:
  i                    --> R20
    00CD 940E014E  CALL	push_gset1
(0027)   ;
(0028) }
(0029) 
(0030) /***********************
(0031) ** 1S延时,误差可能稍大
(0032) ** 250ms*4=1000ms
(0033) ************************/
(0034) void delay_1s(void)
(0035) {
(0036)  unsigned int i;
(0037)    for(i=250;i>0;i--)   //250ms*4=1000ms
    00CF EF4A      LDI	R20,0xFA
    00D0 E050      LDI	R21,0
    00D1 C003      RJMP	0x00D5
(0038)    delay_1ms();
    00D2 DFF1      RCALL	_delay_1ms
    00D3 5041      SUBI	R20,1
    00D4 4050      SBCI	R21,0
    00D5 3040      CPI	R20,0
    00D6 0745      CPC	R20,R21
    00D7 F7D1      BNE	0x00D2
(0039)    for(i=250;i>0;i--)
    00D8 EF4A      LDI	R20,0xFA
    00D9 E050      LDI	R21,0
    00DA C003      RJMP	0x00DE
(0040)    delay_1ms();
    00DB DFE8      RCALL	_delay_1ms
    00DC 5041      SUBI	R20,1
    00DD 4050      SBCI	R21,0
    00DE 3040      CPI	R20,0
    00DF 0745      CPC	R20,R21
    00E0 F7D1      BNE	0x00DB
(0041)    for(i=250;i>0;i--)
    00E1 EF4A      LDI	R20,0xFA
    00E2 E050      LDI	R21,0
    00E3 C003      RJMP	0x00E7
(0042)    delay_1ms();
    00E4 DFDF      RCALL	_delay_1ms
    00E5 5041      SUBI	R20,1
    00E6 4050      SBCI	R21,0
    00E7 3040      CPI	R20,0
    00E8 0745      CPC	R20,R21
    00E9 F7D1      BNE	0x00E4
(0043)    for(i=250;i>0;i--)
    00EA EF4A      LDI	R20,0xFA
    00EB E050      LDI	R21,0
    00EC C003      RJMP	0x00F0
(0044)    delay_1ms();
    00ED DFD6      RCALL	_delay_1ms
    00EE 5041      SUBI	R20,1
    00EF 4050      SBCI	R21,0
    00F0 3040      CPI	R20,0
    00F1 0745      CPC	R20,R21
    00F2 F7D1      BNE	0x00ED
    00F3 940E0151  CALL	pop_gset1
    00F5 9508      RET
_delay_us:
  i                    --> R20
  n                    --> R22
    00F6 940E014C  CALL	push_gset2
    00F8 01B8      MOVW	R22,R16
(0045) }
(0046) 
(0047) /***********************
(0048) **微秒级延时
(0049) ************************/
(0050) void delay_us(unsigned int n)
(0051) {
(0052)  unsigned int i;
(0053)  for(i=n;i>0;i--)
    00F9 01AB      MOVW	R20,R22
    00FA C003      RJMP	0x00FE
(0054)  delay_1us();
    00FB DFC6      RCALL	_delay_1us
    00FC 5041      SUBI	R20,1
    00FD 4050      SBCI	R21,0
    00FE 3040      CPI	R20,0
    00FF 0745      CPC	R20,R21
    0100 F7D1      BNE	0x00FB
    0101 940E0143  CALL	pop_gset2
    0103 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0104 940E014C  CALL	push_gset2
    0106 01B8      MOVW	R22,R16
(0055) }
(0056) 
(0057) /***********************
(0058) **毫秒级延时
(0059) ************************/
(0060) void delay_ms(unsigned int n)
(0061) {
(0062)  unsigned int i;
(0063)  for(i=n;i>0;i--)
    0107 01AB      MOVW	R20,R22
    0108 C003      RJMP	0x010C
(0064)  delay_1ms();
    0109 DFBA      RCALL	_delay_1ms
    010A 5041      SUBI	R20,1
    010B 4050      SBCI	R21,0
    010C 3040      CPI	R20,0
    010D 0745      CPC	R20,R21
    010E F7D1      BNE	0x0109
    010F 940E0143  CALL	pop_gset2
    0111 9508      RET
_delay_s:
  j                    --> R20
  i                    --> R22
  n                    --> R22
    0112 940E014C  CALL	push_gset2
    0114 01B8      MOVW	R22,R16
(0065) }
(0066) 
(0067) /***********************
(0068) **秒级延时,太浪费资源,不建议使用
(0069) ************************/
(0070) void delay_s(unsigned int n)
(0071) {
(0072)  unsigned int i,j;
(0073)  for(j=n;j>0;j--)
    0115 01AB      MOVW	R20,R22
    0116 C026      RJMP	0x013D
(0074)   {
(0075)    for(i=250;i>0;i--)   //250ms*4=1000ms
    0117 EF6A      LDI	R22,0xFA
    0118 E070      LDI	R23,0
    0119 C003      RJMP	0x011D
(0076)    delay_1ms();
    011A DFA9      RCALL	_delay_1ms
    011B 5061      SUBI	R22,1
    011C 4070      SBCI	R23,0
    011D 3060      CPI	R22,0
    011E 0767      CPC	R22,R23
    011F F7D1      BNE	0x011A
(0077)    for(i=250;i>0;i--)
    0120 EF6A      LDI	R22,0xFA
    0121 E070      LDI	R23,0
    0122 C003      RJMP	0x0126
(0078)    delay_1ms();
    0123 DFA0      RCALL	_delay_1ms
    0124 5061      SUBI	R22,1
    0125 4070      SBCI	R23,0
    0126 3060      CPI	R22,0
    0127 0767      CPC	R22,R23
    0128 F7D1      BNE	0x0123
(0079)    for(i=250;i>0;i--)
    0129 EF6A      LDI	R22,0xFA
    012A E070      LDI	R23,0
    012B C003      RJMP	0x012F
(0080)    delay_1ms();
    012C DF97      RCALL	_delay_1ms
    012D 5061      SUBI	R22,1
    012E 4070      SBCI	R23,0
    012F 3060      CPI	R22,0
    0130 0767      CPC	R22,R23
    0131 F7D1      BNE	0x012C
(0081)    for(i=250;i>0;i--)
    0132 EF6A      LDI	R22,0xFA
    0133 E070      LDI	R23,0
    0134 C003      RJMP	0x0138
(0082)    delay_1ms();
FILE: <library>
    0135 DF8E      RCALL	_delay_1ms
    0136 5061      SUBI	R22,1
    0137 4070      SBCI	R23,0
    0138 3060      CPI	R22,0
    0139 0767      CPC	R22,R23
    013A F7D1      BNE	0x0135
    013B 5041      SUBI	R20,1
    013C 4050      SBCI	R21,0
    013D 3040      CPI	R20,0
    013E 0745      CPC	R20,R21
    013F F6B9      BNE	0x0117
    0140 940E0143  CALL	pop_gset2
    0142 9508      RET
pop_gset2:
    0143 E0E2      LDI	R30,2
    0144 940C0152  JMP	pop
push_gset5:
    0146 92FA      ST	R15,-Y
    0147 92EA      ST	R14,-Y
push_gset4:
    0148 92DA      ST	R13,-Y
    0149 92CA      ST	R12,-Y
push_gset3:
    014A 92BA      ST	R11,-Y
    014B 92AA      ST	R10,-Y
push_gset2:
    014C 937A      ST	R23,-Y
    014D 936A      ST	R22,-Y
push_gset1:
    014E 935A      ST	R21,-Y
    014F 934A      ST	R20,-Y
    0150 9508      RET
pop_gset1:
    0151 E0E1      LDI	R30,1
pop:
    0152 9149      LD	R20,Y+
    0153 9159      LD	R21,Y+
    0154 FDE0      SBRC	R30,0
    0155 9508      RET
    0156 9169      LD	R22,Y+
    0157 9179      LD	R23,Y+
    0158 FDE1      SBRC	R30,1
    0159 9508      RET
    015A 90A9      LD	R10,Y+
    015B 90B9      LD	R11,Y+
    015C FDE2      SBRC	R30,2
    015D 9508      RET
    015E 90C9      LD	R12,Y+
    015F 90D9      LD	R13,Y+
    0160 FDE3      SBRC	R30,3
    0161 9508      RET
    0162 90E9      LD	R14,Y+
    0163 90F9      LD	R15,Y+
    0164 9508      RET
lsl8:
    0165 2311      TST	R17
    0166 F019      BEQ	0x016A
    0167 0F00      LSL	R16
    0168 951A      DEC	R17
    0169 CFFB      RJMP	lsl8
    016A 9508      RET

⌨️ 快捷键说明

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