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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0055) // Description : Display Initialization
(0056) //***************************************************************
(0057) void Display_Init(void)
(0058) {
(0059)     INT8U Index = 0;
    0120 2744      CLR	R20
(0060) 	for(Index = 0;Index < 8;Index++)
    0121 C009      RJMP	0x012B
(0061) 	{
(0062) 		Buffer[Index] = 0;
    0122 E683      LDI	R24,0x63
    0123 E090      LDI	R25,0
    0124 2FE4      MOV	R30,R20
    0125 27FF      CLR	R31
    0126 0FE8      ADD	R30,R24
    0127 1FF9      ADC	R31,R25
    0128 2422      CLR	R2
    0129 8220      STD	Z+0,R2
    012A 9543      INC	R20
    012B 3048      CPI	R20,0x8
    012C F3A8      BCS	0x0122
(0063) 	}
(0064) 	pBufStr = String1;
    012D EA8C      LDI	R24,0xAC
    012E E090      LDI	R25,0
    012F 9390006D  STS	_pBufStr+1,R25
    0131 9380006C  STS	_pBufStr,R24
(0065) 	DisplayCnt = 0;
    0133 2422      CLR	R2
    0134 9220006B  STS	_DisplayCnt,R2
(0066) 	Length_of_DataBase = Search_DataBase_Length();
    0136 D04B      RCALL	_Search_DataBase_Length
    0137 93000062  STS	_Length_of_DataBase,R16
(0067) }
    0139 940E01EF  CALL	pop_gset1
    013B 9508      RET
_Buffer_IN:
  pdata                --> R20
  Count                --> R22
  Index                --> R10
    013C 940E0207  CALL	push_gset3
    013E 2EA0      MOV	R10,R16
(0068) 
(0069) //***************************************************************
(0070) // Function    : DotTest
(0071) // Input       : none
(0072) // Output      : none
(0073) // Description : LED Display Test
(0074) //***************************************************************			  		       
(0075) void Buffer_IN(INT8U Index)
(0076) {
(0077)     const INT8U *pdata;
(0078) 		INT8U Count = 0;
    013F 2766      CLR	R22
(0079) 		pdata = SearchCharIndex(*pBufStr);
    0140 91E0006C  LDS	R30,_pBufStr
    0142 91F0006D  LDS	R31,_pBufStr+1
    0144 9104      LPM	R16,0(Z)
    0145 D021      RCALL	_SearchCharIndex
    0146 01A8      MOVW	R20,R16
(0080) 		if(pdata != (INT8U *)0)
    0147 3000      CPI	R16,0
    0148 0701      CPC	R16,R17
    0149 F0D1      BEQ	0x0164
(0081) 		{
(0082) 		    for(Count = 0;Count < 7;Count++)
    014A 2766      CLR	R22
    014B C00F      RJMP	0x015B
(0083) 			{
(0084) 			    Buffer[Count] = Buffer[Count+1];
    014C E684      LDI	R24,0x64
    014D E090      LDI	R25,0
    014E 2FE6      MOV	R30,R22
    014F 27FF      CLR	R31
    0150 0FE8      ADD	R30,R24
    0151 1FF9      ADC	R31,R25
    0152 8020      LDD	R2,Z+0
    0153 E683      LDI	R24,0x63
    0154 E090      LDI	R25,0
    0155 2FE6      MOV	R30,R22
    0156 27FF      CLR	R31
    0157 0FE8      ADD	R30,R24
    0158 1FF9      ADC	R31,R25
    0159 8220      STD	Z+0,R2
    015A 9563      INC	R22
    015B 3067      CPI	R22,7
    015C F378      BCS	0x014C
(0085) 			}
(0086) 			Buffer[7] = *(pdata + Index);
    015D 2DEA      MOV	R30,R10
    015E 27FF      CLR	R31
    015F 0FE4      ADD	R30,R20
    0160 1FF5      ADC	R31,R21
    0161 91E4      LPM	R30,0(Z)
    0162 93E0006A  STS	0x6A,R30
(0087) 		}
(0088) }
    0164 940E01E6  CALL	pop_gset3
    0166 9508      RET
_SearchCharIndex:
  pDataBasePtr         --> R20
  Index                --> R22
  CharCode             --> R16
    0167 940E0203  CALL	push_gset2
(0089) 
(0090) //***************************************************************
(0091) // Function    : SearchCharIndex
(0092) // Input       : CharCode - Char to be displayed
(0093) // Output      : Pointer to the display code of the input char
(0094) // Description : Get the pointer of the display char code
(0095) //***************************************************************			  		       	
(0096) const INT8U *SearchCharIndex(INT8U CharCode)
(0097) {
(0098)     INT8U Index;
(0099) 	const struct DataBaseIndex *pDataBasePtr;
(0100) 	pDataBasePtr = DataBaseIndexList;
    0169 E944      LDI	R20,0x94
    016A E050      LDI	R21,0
(0101) 	for(Index = 0;Index <= Length_of_DataBase;Index++)
    016B 2766      CLR	R22
    016C C00C      RJMP	0x0179
(0102) 	{
(0103) 	    if(pDataBasePtr->Code == CharCode)
    016D 01FA      MOVW	R30,R20
    016E 91E4      LPM	R30,0(Z)
    016F 17E0      CP	R30,R16
    0170 F429      BNE	0x0176
(0104) 		{
(0105) 		    return(pDataBasePtr->Ptr);
    0171 01FA      MOVW	R30,R20
    0172 9631      ADIW	R30,1
    0173 9105      LPM	R16,Z+
    0174 9114      LPM	R17,0(Z)
    0175 C009      RJMP	0x017F
(0106) 		}
(0107) 		else
(0108) 		{
(0109) 		    pDataBasePtr++ ;
    0176 5F4D      SUBI	R20,0xFD
    0177 4F5F      SBCI	R21,0xFF
    0178 9563      INC	R22
    0179 90200062  LDS	R2,_Length_of_DataBase
    017B 1626      CP	R2,R22
    017C F780      BCC	0x016D
(0110) 		}
(0111) 	}
(0112) 	return(0);
    017D 2700      CLR	R16
    017E 2711      CLR	R17
    017F 940E01E3  CALL	pop_gset2
    0181 9508      RET
(0113) }
(0114) 
(0115) //***************************************************************
(0116) // Function    : Search_DataBase_Length
(0117) // Input       : none
(0118) // Output      : Length of database list
(0119) // Description : Search DataBase Length
(0120) //***************************************************************			  
(0121) INT8U Search_DataBase_Length(void)
(0122) {
(0123) 	INT8U Index = 0;
_Search_DataBase_Length:
  Index                --> R16
  pDataBasePtr         --> R18
    0182 2700      CLR	R16
(0124) 	const struct DataBaseIndex *pDataBasePtr;
(0125) 	pDataBasePtr = DataBaseIndexList;
    0183 E924      LDI	R18,0x94
    0184 E030      LDI	R19,0
    0185 C003      RJMP	0x0189
(0126) 	while(pDataBasePtr->Code != 0)
(0127) 	{
(0128) 		Index++;
    0186 9503      INC	R16
(0129) 		pDataBasePtr++;
    0187 5F2D      SUBI	R18,0xFD
    0188 4F3F      SBCI	R19,0xFF
    0189 01F9      MOVW	R30,R18
    018A 91E4      LPM	R30,0(Z)
    018B 23EE      TST	R30
    018C F7C9      BNE	0x0186
(0130) 	}
(0131) 	return(Index);
    018D 9508      RET
_DotTest:
  Select               --> R10
  Index                --> R12
  wDelayCnt            --> Y+0
    018E 940E020B  CALL	push_gset4
    0190 9724      SBIW	R28,4
(0132) }
(0133) 
(0134) //***************************************************************
(0135) // Function    : DotTest
(0136) // Input       : none
(0137) // Output      : none
(0138) // Description : LED Display Test
(0139) //***************************************************************			  
(0140) void DotTest(void)
(0141) {
(0142)     INT8U Select = 0;
    0191 24AA      CLR	R10
(0143) 	INT8U Index = 0;
    0192 24CC      CLR	R12
(0144) 	INT32U wDelayCnt = 0;
    0193 E040      LDI	R20,0
    0194 E050      LDI	R21,0
    0195 E060      LDI	R22,0
    0196 E070      LDI	R23,0
    0197 01FE      MOVW	R30,R28
    0198 8340      STD	Z+0,R20
    0199 8351      STD	Z+1,R21
    019A 8362      STD	Z+2,R22
    019B 8373      STD	Z+3,R23
(0145) 	for(Select = 0;Select < 8;Select++)
    019C C03E      RJMP	0x01DB
(0146) 	{
(0147) 	    for(Index = 0;Index < 8;Index++)
    019D 24CC      CLR	R12
    019E C037      RJMP	0x01D6
(0148) 		{
(0149) 		    PORTA = 1 << Index;
    019F E001      LDI	R16,1
    01A0 2D1C      MOV	R17,R12
    01A1 940E023D  CALL	lsl8
    01A3 BB0B      OUT	0x1B,R16
(0150) 		    PORTD = ~(1 << Select);
    01A4 E001      LDI	R16,1
    01A5 2D1A      MOV	R17,R10
    01A6 940E023D  CALL	lsl8
    01A8 2E20      MOV	R2,R16
    01A9 9420      COM	R2
    01AA BA22      OUT	0x12,R2
(0151) 		    for(wDelayCnt = 0;wDelayCnt < 90000;wDelayCnt++) {;}
    01AB E040      LDI	R20,0
    01AC E050      LDI	R21,0
    01AD E060      LDI	R22,0
    01AE E070      LDI	R23,0
    01AF 01FE      MOVW	R30,R28
    01B0 8340      STD	Z+0,R20
    01B1 8351      STD	Z+1,R21
    01B2 8362      STD	Z+2,R22
    01B3 8373      STD	Z+3,R23
    01B4 C012      RJMP	0x01C7
    01B5 E041      LDI	R20,1
    01B6 E050      LDI	R21,0
    01B7 E060      LDI	R22,0
    01B8 E070      LDI	R23,0
    01B9 01FE      MOVW	R30,R28
    01BA 8020      LDD	R2,Z+0
    01BB 8031      LDD	R3,Z+1
    01BC 8042      LDD	R4,Z+2
    01BD 8053      LDD	R5,Z+3
    01BE 0E24      ADD	R2,R20
    01BF 1E35      ADC	R3,R21
    01C0 1E46      ADC	R4,R22
    01C1 1E57      ADC	R5,R23
    01C2 01FE      MOVW	R30,R28
    01C3 8220      STD	Z+0,R2
    01C4 8231      STD	Z+1,R3
    01C5 8242      STD	Z+2,R4
    01C6 8253      STD	Z+3,R5
    01C7 E940      LDI	R20,0x90
    01C8 E55F      LDI	R21,0x5F
    01C9 E061      LDI	R22,1
    01CA E070      LDI	R23,0
    01CB 01FE      MOVW	R30,R28
    01CC 8020      LDD	R2,Z+0
    01CD 8031      LDD	R3,Z+1
    01CE 8042      LDD	R4,Z+2
    01CF 8053      LDD	R5,Z+3
    01D0 1624      CP	R2,R20
    01D1 0635      CPC	R3,R21
    01D2 0646      CPC	R4,R22
    01D3 0657      CPC	R5,R23
    01D4 F300      BCS	0x01B5
    01D5 94C3      INC	R12
    01D6 2D8C      MOV	R24,R12
    01D7 3088      CPI	R24,0x8
    01D8 F408      BCC	0x01DA
    01D9 CFC5      RJMP	0x019F
    01DA 94A3      INC	R10
    01DB 2D8A      MOV	R24,R10
    01DC 3088      CPI	R24,0x8
    01DD F408      BCC	0x01DF
    01DE CFBE      RJMP	0x019D
(0152) 		}
(0153) 	}
(0154) }
FILE: <library>
    01DF 9624      ADIW	R28,4
    01E0 940E01E9  CALL	pop_gset4
    01E2 9508      RET
pop_gset2:
    01E3 E0E2      LDI	R30,2
    01E4 940C01F0  JMP	pop
pop_gset3:
    01E6 E0E4      LDI	R30,4
    01E7 940C01F0  JMP	pop
pop_gset4:
    01E9 E0E8      LDI	R30,0x8
    01EA 940C01F0  JMP	pop
push_gset1:
    01EC 935A      ST	R21,-Y
    01ED 934A      ST	R20,-Y
    01EE 9508      RET
pop_gset1:
    01EF E0E1      LDI	R30,1
pop:
    01F0 9149      LD	R20,Y+
    01F1 9159      LD	R21,Y+
    01F2 FDE0      SBRC	R30,0
    01F3 9508      RET
    01F4 9169      LD	R22,Y+
    01F5 9179      LD	R23,Y+
    01F6 FDE1      SBRC	R30,1
    01F7 9508      RET
    01F8 90A9      LD	R10,Y+
    01F9 90B9      LD	R11,Y+
    01FA FDE2      SBRC	R30,2
    01FB 9508      RET
    01FC 90C9      LD	R12,Y+
    01FD 90D9      LD	R13,Y+
    01FE FDE3      SBRC	R30,3
    01FF 9508      RET
    0200 90E9      LD	R14,Y+
    0201 90F9      LD	R15,Y+
    0202 9508      RET
push_gset2:
    0203 937A      ST	R23,-Y
    0204 936A      ST	R22,-Y
    0205 940C01EC  JMP	push_gset1
push_gset3:
    0207 92BA      ST	R11,-Y
    0208 92AA      ST	R10,-Y
    0209 940C0203  JMP	push_gset2
push_gset4:
    020B 92DA      ST	R13,-Y
    020C 92CA      ST	R12,-Y
    020D 940C0207  JMP	push_gset3
push_lset:
    020F 93FA      ST	R31,-Y
    0210 93EA      ST	R30,-Y
    0211 93BA      ST	R27,-Y
    0212 93AA      ST	R26,-Y
    0213 939A      ST	R25,-Y
    0214 938A      ST	R24,-Y
    0215 933A      ST	R19,-Y
    0216 932A      ST	R18,-Y
    0217 931A      ST	R17,-Y
    0218 930A      ST	R16,-Y
    0219 929A      ST	R9,-Y
    021A 928A      ST	R8,-Y
    021B 927A      ST	R7,-Y
    021C 926A      ST	R6,-Y
    021D 925A      ST	R5,-Y
    021E 924A      ST	R4,-Y
    021F 923A      ST	R3,-Y
    0220 922A      ST	R2,-Y
    0221 921A      ST	R1,-Y
    0222 920A      ST	R0,-Y
    0223 B60F      IN	R0,0x3F
    0224 920A      ST	R0,-Y
    0225 9508      RET
pop_lset:
    0226 9009      LD	R0,Y+
    0227 BE0F      OUT	0x3F,R0
    0228 9009      LD	R0,Y+
    0229 9019      LD	R1,Y+
    022A 9029      LD	R2,Y+
    022B 9039      LD	R3,Y+
    022C 9049      LD	R4,Y+
    022D 9059      LD	R5,Y+
    022E 9069      LD	R6,Y+
    022F 9079      LD	R7,Y+
    0230 9089      LD	R8,Y+
    0231 9099      LD	R9,Y+
    0232 9109      LD	R16,Y+
    0233 9119      LD	R17,Y+
    0234 9129      LD	R18,Y+
    0235 9139      LD	R19,Y+
    0236 9189      LD	R24,Y+
    0237 9199      LD	R25,Y+
    0238 91A9      LD	R26,Y+
    0239 91B9      LD	R27,Y+
    023A 91E9      LD	R30,Y+
    023B 91F9      LD	R31,Y+
    023C 9508      RET
lsl8:
    023D 2311      TST	R17
    023E F019      BEQ	0x0242
    023F 0F00      LSL	R16
    0240 951A      DEC	R17
    0241 CFFB      RJMP	lsl8
    0242 9508      RET

⌨️ 快捷键说明

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