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

📄 1.lst

📁 用与单片机开发,会个朋友们带来方便. 原代码驱动程序(ch451)
💻 LST
字号:
__start:
__text_start:
    0002 E5CF      LDI	R28,0x5F
    0003 E0D2      LDI	R29,2
    0004 BFCD      OUT	0x3D,R28
    0005 BFDE      OUT	0x3E,R29
    0006 51C0      SUBI	R28,0x10
    0007 40D0      SBCI	R29,0
    0008 EA0A      LDI	R16,0xAA
    0009 8308      STD	Y+0,R16
    000A 2400      CLR	R0
    000B E6E0      LDI	R30,0x60
    000C E0F0      LDI	R31,0
    000D E010      LDI	R17,0
    000E 36E0      CPI	R30,0x60
    000F 07F1      CPC	R31,R17
    0010 F011      BEQ	0x0013
    0011 9201      ST	R0,Z+
    0012 CFFB      RJMP	0x000E
    0013 8300      STD	Z+0,R16
    0014 E0E4      LDI	R30,4
    0015 E0F0      LDI	R31,0
    0016 E6A0      LDI	R26,0x60
    0017 E0B0      LDI	R27,0
    0018 E010      LDI	R17,0
    0019 30E4      CPI	R30,4
    001A 07F1      CPC	R31,R17
    001B F021      BEQ	0x0020
    001C 95C8      LPM
    001D 9631      ADIW	R30,1
    001E 920D      ST	R0,X+
    001F CFF9      RJMP	0x0019
    0020 D0CC      RCALL	_main
_exit:
    0021 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\新建文件夹\1.c
(0001) #include <iom16v.h>
(0002) #define clk   4   //pd4
(0003) #define dat   3   //pd5
(0004) #define load  5   //pd6
(0005) #define load1 6   //pd7
(0006) #define XTAL 4    //晶振频率,单位MHz
(0007) #define uchar unsigned char
(0008) /*******************************延时函数***********************************/
(0009) void delay_1us(void)                 //1us延时函数
(0010)   {
(0011)    asm("nop");
_delay_1us:
    0022 0000      NOP
    0023 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0024 D11E      RCALL	push_gset2
    0025 2F60      MOV	R22,R16
    0026 2F71      MOV	R23,R17
(0012)   }
(0013) 
(0014) void delay_nus(unsigned int n)       //N us延时函数
(0015)   {
(0016)    unsigned int i=0;
    0027 2744      CLR	R20
    0028 2755      CLR	R21
(0017)    for (i=0;i<n;i++)
    0029 C003      RJMP	0x002D
(0018)    delay_1us();
    002A DFF7      RCALL	_delay_1us
    002B 5F4F      SUBI	R20,0xFF
    002C 4F5F      SBCI	R21,0xFF
    002D 1746      CP	R20,R22
    002E 0757      CPC	R21,R23
    002F F3D0      BCS	0x002A
    0030 D108      RCALL	pop_gset2
    0031 9508      RET
(0019)   }
(0020) 
(0021) void delay_1ms(void)                 //1ms延时函数
(0022)   {
(0023)    unsigned int i;
(0024)    for (i=0;i<(unsigned int)(XTAL*143-2);i++);
_delay_1ms:
  i                    --> R16
    0032 2700      CLR	R16
    0033 2711      CLR	R17
    0034 C002      RJMP	0x0037
    0035 5F0F      SUBI	R16,0xFF
    0036 4F1F      SBCI	R17,0xFF
    0037 E38A      LDI	R24,0x3A
    0038 E092      LDI	R25,2
    0039 1708      CP	R16,R24
    003A 0719      CPC	R17,R25
    003B F3C8      BCS	0x0035
    003C 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    003D D105      RCALL	push_gset2
    003E 2F60      MOV	R22,R16
    003F 2F71      MOV	R23,R17
(0025)   }
(0026) 
(0027) void delay_nms(unsigned int n)       //N ms延时函数
(0028) {
(0029)    unsigned int i=0;
    0040 2744      CLR	R20
    0041 2755      CLR	R21
(0030)    for (i=0;i<n;i++)
    0042 C003      RJMP	0x0046
(0031)    {
(0032)       delay_1ms();
    0043 DFEE      RCALL	_delay_1ms
    0044 5F4F      SUBI	R20,0xFF
    0045 4F5F      SBCI	R21,0xFF
    0046 1746      CP	R20,R22
    0047 0757      CPC	R21,R23
    0048 F3D0      BCS	0x0043
    0049 D0EF      RCALL	pop_gset2
    004A 9508      RET
_write:
  i                    --> R10
  ch                   --> Y+0
  x                    --> Y+10
    004B D0E8      RCALL	push_arg4
    004C D0F4      RCALL	push_gset3
    004D 9724      SBIW	R28,4
(0033)    }
(0034) }
(0035) /*******************************451写指令***********************************/
(0036) 
(0037) void  write(long  int x)
(0038) {
(0039)     long  int ch;
(0040)     int  i;
(0041)     ch = x;
    004E 842A      LDD	R2,Y+10
    004F 843B      LDD	R3,Y+11
    0050 844C      LDD	R4,Y+12
    0051 845D      LDD	R5,Y+13
    0052 8228      STD	Y+0,R2
    0053 8239      STD	Y+1,R3
    0054 824A      STD	Y+2,R4
    0055 825B      STD	Y+3,R5
(0042)     PORTD&= ~(1<<clk);      //  CLK
    0056 9894      CBI	0x12,4
(0043) 	PORTD&= ~(1<<load);
    0057 9895      CBI	0x12,5
(0044)     for(i=0; i<12; i++)
    0058 24AA      CLR	R10
    0059 24BB      CLR	R11
(0045) {
(0046)         if(ch&0x001)
    005A E041      LDI	R20,1
    005B E050      LDI	R21,0
    005C E060      LDI	R22,0
    005D E070      LDI	R23,0
    005E 8028      LDD	R2,Y+0
    005F 8039      LDD	R3,Y+1
    0060 804A      LDD	R4,Y+2
    0061 805B      LDD	R5,Y+3
    0062 2224      AND	R2,R20
    0063 2235      AND	R3,R21
    0064 2246      AND	R4,R22
    0065 2257      AND	R5,R23
    0066 E040      LDI	R20,0
    0067 E050      LDI	R21,0
    0068 E060      LDI	R22,0
    0069 E070      LDI	R23,0
    006A 1624      CP	R2,R20
    006B 0635      CPC	R3,R21
    006C 0646      CPC	R4,R22
    006D 0657      CPC	R5,R23
    006E F081      BEQ	0x007F
(0047)         {
(0048)             PORTD|= 0x08;   //数据为1   00100000
    006F 9A93      SBI	0x12,3
(0049) 			ch >>= 1;
    0070 8028      LDD	R2,Y+0
    0071 8039      LDD	R3,Y+1
    0072 804A      LDD	R4,Y+2
    0073 805B      LDD	R5,Y+3
    0074 9455      ASR	R5
    0075 9447      ROR	R4
    0076 9437      ROR	R3
    0077 9427      ROR	R2
    0078 8228      STD	Y+0,R2
    0079 8239      STD	Y+1,R3
    007A 824A      STD	Y+2,R4
    007B 825B      STD	Y+3,R5
(0050) 			PORTD&= ~(1<<clk);
    007C 9894      CBI	0x12,4
(0051) 			PORTD|= (1<<clk);
    007D 9A94      SBI	0x12,4
(0052) 			
(0053)         }
    007E C00F      RJMP	0x008E
(0054)         else
(0055)         {
(0056)             PORTD&= ~(0x08);  //数据为0
    007F 9893      CBI	0x12,3
(0057) 			ch >>= 1;
    0080 8028      LDD	R2,Y+0
    0081 8039      LDD	R3,Y+1
    0082 804A      LDD	R4,Y+2
    0083 805B      LDD	R5,Y+3
    0084 9455      ASR	R5
    0085 9447      ROR	R4
    0086 9437      ROR	R3
    0087 9427      ROR	R2
    0088 8228      STD	Y+0,R2
    0089 8239      STD	Y+1,R3
    008A 824A      STD	Y+2,R4
    008B 825B      STD	Y+3,R5
(0058) 			PORTD&= ~(1<<clk);
    008C 9894      CBI	0x12,4
(0059) 			PORTD|= (1<<clk);
    008D 9A94      SBI	0x12,4
    008E 2D8A      MOV	R24,R10
    008F 2D9B      MOV	R25,R11
    0090 9601      ADIW	R24,1
    0091 2EA8      MOV	R10,R24
    0092 2EB9      MOV	R11,R25
    0093 308C      CPI	R24,0xC
    0094 E0E0      LDI	R30,0
    0095 079E      CPC	R25,R30
    0096 F21C      BLT	0x005A
(0060) 			
(0061)         }       
(0062) 		
(0063) 		}
(0064) 		PORTD|= 1<<load;
    0097 9A95      SBI	0x12,5
    0098 9624      ADIW	R28,4
    0099 D0A1      RCALL	pop_gset3
    009A 9624      ADIW	R28,4
    009B 9508      RET
_write1:
  i                    --> R10
  ch                   --> Y+0
  x                    --> Y+10
    009C D097      RCALL	push_arg4
    009D D0A3      RCALL	push_gset3
    009E 9724      SBIW	R28,4
(0065) 
(0066) }
(0067) 
(0068) void  write1(long  int x)
(0069) {
(0070)     long  int ch;
(0071)     int  i;
(0072)     ch = x;
    009F 842A      LDD	R2,Y+10
    00A0 843B      LDD	R3,Y+11
    00A1 844C      LDD	R4,Y+12
    00A2 845D      LDD	R5,Y+13
    00A3 8228      STD	Y+0,R2
    00A4 8239      STD	Y+1,R3
    00A5 824A      STD	Y+2,R4
    00A6 825B      STD	Y+3,R5
(0073)     PORTD&= ~(1<<clk);      //  CLK
    00A7 9894      CBI	0x12,4
(0074) 	PORTD&= ~(1<<load1);
    00A8 9896      CBI	0x12,6
(0075)     for(i=0; i<12; i++)
    00A9 24AA      CLR	R10
    00AA 24BB      CLR	R11
(0076) {
(0077)         if(ch&0x001)
    00AB E041      LDI	R20,1
    00AC E050      LDI	R21,0
    00AD E060      LDI	R22,0
    00AE E070      LDI	R23,0
    00AF 8028      LDD	R2,Y+0
    00B0 8039      LDD	R3,Y+1
    00B1 804A      LDD	R4,Y+2
    00B2 805B      LDD	R5,Y+3
    00B3 2224      AND	R2,R20
    00B4 2235      AND	R3,R21
    00B5 2246      AND	R4,R22
    00B6 2257      AND	R5,R23
    00B7 E040      LDI	R20,0
    00B8 E050      LDI	R21,0
    00B9 E060      LDI	R22,0
    00BA E070      LDI	R23,0
    00BB 1624      CP	R2,R20
    00BC 0635      CPC	R3,R21
    00BD 0646      CPC	R4,R22
    00BE 0657      CPC	R5,R23
    00BF F081      BEQ	0x00D0
(0078)         {
(0079)             PORTD|= 0x08;   //数据为1   00100000
    00C0 9A93      SBI	0x12,3
(0080) 			ch >>= 1;
    00C1 8028      LDD	R2,Y+0
    00C2 8039      LDD	R3,Y+1
    00C3 804A      LDD	R4,Y+2
    00C4 805B      LDD	R5,Y+3
    00C5 9455      ASR	R5
    00C6 9447      ROR	R4
    00C7 9437      ROR	R3
    00C8 9427      ROR	R2
    00C9 8228      STD	Y+0,R2
    00CA 8239      STD	Y+1,R3
    00CB 824A      STD	Y+2,R4
    00CC 825B      STD	Y+3,R5
(0081) 			PORTD&= ~(1<<clk);
    00CD 9894      CBI	0x12,4
(0082) 			PORTD|= (1<<clk);
    00CE 9A94      SBI	0x12,4
(0083) 			
(0084)         }
    00CF C00F      RJMP	0x00DF
(0085)         else
(0086)         {
(0087)             PORTD&= ~(0x08);  //数据为0
    00D0 9893      CBI	0x12,3
(0088) 			ch >>= 1;
    00D1 8028      LDD	R2,Y+0
    00D2 8039      LDD	R3,Y+1
    00D3 804A      LDD	R4,Y+2
    00D4 805B      LDD	R5,Y+3
    00D5 9455      ASR	R5
    00D6 9447      ROR	R4
    00D7 9437      ROR	R3
    00D8 9427      ROR	R2
    00D9 8228      STD	Y+0,R2
    00DA 8239      STD	Y+1,R3
    00DB 824A      STD	Y+2,R4
    00DC 825B      STD	Y+3,R5
(0089) 			PORTD&= ~(1<<clk);
    00DD 9894      CBI	0x12,4
(0090) 			PORTD|= (1<<clk);
    00DE 9A94      SBI	0x12,4
    00DF 2D8A      MOV	R24,R10
    00E0 2D9B      MOV	R25,R11
    00E1 9601      ADIW	R24,1
    00E2 2EA8      MOV	R10,R24
    00E3 2EB9      MOV	R11,R25
    00E4 308C      CPI	R24,0xC
    00E5 E0E0      LDI	R30,0
    00E6 079E      CPC	R25,R30
    00E7 F21C      BLT	0x00AB
(0091) 			
(0092)         }       
(0093) 		
(0094) 		}
(0095) 		PORTD|= 1<<load1;
    00E8 9A96      SBI	0x12,6
    00E9 9624      ADIW	R28,4
    00EA D050      RCALL	pop_gset3
    00EB 9624      ADIW	R28,4
    00EC 9508      RET
(0096) 
(0097) }
(0098) 
(0099) /*******************************主函数***********************************/
(0100) int main( void )
(0101) {   
(0102)     int i=0,n=0,m=0;
_main:
  m                    --> R10
  n                    --> R10
  i                    --> R10
    00ED 24AA      CLR	R10
    00EE 24BB      CLR	R11
(0103) 	DDRD=0xff;    //设置为输出
    00EF EF8F      LDI	R24,0xFF
    00F0 BB81      OUT	0x11,R24
(0104) 	PORTD |=1<<dat;
    00F1 9A93      SBI	0x12,3
(0105) 	PORTD &=~(1<<dat);
    00F2 9893      CBI	0x12,3
(0106) 	delay_nms(20);
    00F3 E104      LDI	R16,0x14
    00F4 E010      LDI	R17,0
    00F5 DF47      RCALL	_delay_nms
(0107)     PORTD |=1<<dat;	
    00F6 9A93      SBI	0x12,3
(0108) 	write(0x201);
    00F7 E001      LDI	R16,1
    00F8 E012      LDI	R17,2
    00F9 E020      LDI	R18,0
    00FA E030      LDI	R19,0
    00FB DF4F      RCALL	_write
(0109) 	write(0x401);
    00FC E001      LDI	R16,1
    00FD E014      LDI	R17,4
    00FE E020      LDI	R18,0
    00FF E030      LDI	R19,0
    0100 DF4A      RCALL	_write
(0110) 	write(0x500);	
    0101 E000      LDI	R16,0
    0102 E015      LDI	R17,5
    0103 E020      LDI	R18,0
    0104 E030      LDI	R19,0
    0105 DF45      RCALL	_write
(0111) 	write1(0x201);
    0106 E001      LDI	R16,1
    0107 E012      LDI	R17,2
    0108 E020      LDI	R18,0
    0109 E030      LDI	R19,0
    010A DF91      RCALL	_write1
(0112) 	write1(0x401);
    010B E001      LDI	R16,1
    010C E014      LDI	R17,4
    010D E020      LDI	R18,0
    010E E030      LDI	R19,0
    010F DF8C      RCALL	_write1
(0113) 	write1(0x500);
    0110 E000      LDI	R16,0
    0111 E015      LDI	R17,5
    0112 E020      LDI	R18,0
    0113 E030      LDI	R19,0
    0114 DF87      RCALL	_write1
    0115 C01C      RJMP	0x0132
(0114)     while(1)
(0115) 	{
(0116) 	 	write(0x8ff);
    0116 EF0F      LDI	R16,0xFF
    0117 E018      LDI	R17,0x8
    0118 E020      LDI	R18,0
    0119 E030      LDI	R19,0
    011A DF30      RCALL	_write
(0117) 		write1(0x8ff);
    011B EF0F      LDI	R16,0xFF
    011C E018      LDI	R17,0x8
    011D E020      LDI	R18,0
    011E E030      LDI	R19,0
    011F DF7C      RCALL	_write1
(0118) 		write1(0x9ff);
    0120 EF0F      LDI	R16,0xFF
    0121 E019      LDI	R17,0x9
    0122 E020      LDI	R18,0
    0123 E030      LDI	R19,0
    0124 DF77      RCALL	_write1
(0119) 		write1(0xaff);
    0125 EF0F      LDI	R16,0xFF
    0126 E01A      LDI	R17,0xA
    0127 E020      LDI	R18,0
    0128 E030      LDI	R19,0
    0129 DF72      RCALL	_write1
(0120) 		write1(0xbff);
    012A EF0F      LDI	R16,0xFF
    012B E01B      LDI	R17,0xB
    012C E020      LDI	R18,0
    012D E030      LDI	R19,0
    012E DF6D      RCALL	_write1
(0121) 		delay_nms(1000);	
FILE: <library>
    012F EE08      LDI	R16,0xE8
    0130 E013      LDI	R17,3
    0131 DF0B      RCALL	_delay_nms
    0132 CFE3      RJMP	0x0116
    0133 9508      RET
push_arg4:
    0134 933A      ST	R19,-Y
    0135 932A      ST	R18,-Y
push_arg2:
    0136 931A      ST	R17,-Y
    0137 930A      ST	R16,-Y
    0138 9508      RET
pop_gset2:
    0139 E0E2      LDI	R30,2
    013A C00E      RJMP	pop
pop_gset3:
    013B E0E4      LDI	R30,4
    013C C00C      RJMP	pop
push_gset5:
    013D 92FA      ST	R15,-Y
    013E 92EA      ST	R14,-Y
push_gset4:
    013F 92DA      ST	R13,-Y
    0140 92CA      ST	R12,-Y
push_gset3:
    0141 92BA      ST	R11,-Y
    0142 92AA      ST	R10,-Y
push_gset2:
    0143 937A      ST	R23,-Y
    0144 936A      ST	R22,-Y
push_gset1:
    0145 935A      ST	R21,-Y
    0146 934A      ST	R20,-Y
    0147 9508      RET
pop_gset1:
    0148 E0E1      LDI	R30,1
pop:
    0149 9149      LD	R20,Y+
    014A 9159      LD	R21,Y+
    014B FDE0      SBRC	R30,0
    014C 9508      RET
    014D 9169      LD	R22,Y+
    014E 9179      LD	R23,Y+
    014F FDE1      SBRC	R30,1
    0150 9508      RET
    0151 90A9      LD	R10,Y+
    0152 90B9      LD	R11,Y+
    0153 FDE2      SBRC	R30,2
    0154 9508      RET
    0155 90C9      LD	R12,Y+
    0156 90D9      LD	R13,Y+
    0157 FDE3      SBRC	R30,3
    0158 9508      RET
    0159 90E9      LD	R14,Y+
    015A 90F9      LD	R15,Y+
    015B 9508      RET

⌨️ 快捷键说明

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