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

📄 m16uart.lst

📁 AVR程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    008C 939A      ST	R25,-Y
    008D 93EA      ST	R30,-Y
    008E 93FA      ST	R31,-Y
    008F B62F      IN	R2,0x3F
    0090 922A      ST	R2,-Y
(0040) }
(0041) /*-----------------------------------------------------------------
(0042) 函数名称: void Uart0Init(void) 
(0043) 函数功能: 串口初始化
(0044) 		  波特率 9600 0.2% 字符长度 8bit 无奇偶校验
(0045) 参    数: 
(0046) 返 回 值: 无
(0047) -----------------------------------------------------------------*/
(0048) #pragma interrupt_handler UartRecvData:12
(0049) void UartRecvData(void)
(0050) {
(0051)  	uchar temp;
(0052) 	temp = UDR;
    0091 B10C      IN	R16,0x0C
(0053) 	if( temp == '*')   	  				 //判断是否是数据开始标志
    0092 320A      CPI	R16,0x2A
    0093 F431      BNE	0x009A
(0054) 	{
(0055) 	 	NewBeginFlag = 1;
    0094 E081      LDI	R24,1
    0095 93800061  STS	NewBeginFlag,R24
(0056) 		RecvDataFlag = 1;
    0097 93800062  STS	RecvDataFlag,R24
(0057) 	}
    0099 C020      RJMP	0x00BA
(0058) 	else if( RecvDataFlag)
    009A 90200062  LDS	R2,RecvDataFlag
    009C 2022      TST	R2
    009D F0A9      BEQ	0x00B3
(0059) 		 {
(0060) 		  	 if( temp == '#')			 //判断是否是数据结束标志
    009E 3203      CPI	R16,0x23
    009F F421      BNE	0x00A4
(0061) 			 {
(0062) 			  	 RecvDataFlag = 0;		 //置接收结束标志
    00A0 2422      CLR	R2
    00A1 92200062  STS	RecvDataFlag,R2
(0063) 			 }
    00A3 C016      RJMP	0x00BA
(0064) 			 else
(0065) 			 {
(0066) 			  	 RecvData[i++] = temp;	 //暂存数据
    00A4 90200060  LDS	R2,i
    00A6 2433      CLR	R3
    00A7 2D82      MOV	R24,R2
    00A8 5F8F      SUBI	R24,0xFF
    00A9 93800060  STS	i,R24
    00AB E684      LDI	R24,0x64
    00AC E090      LDI	R25,0
    00AD 2DE2      MOV	R30,R2
    00AE 27FF      CLR	R31
    00AF 0FE8      ADD	R30,R24
    00B0 1FF9      ADC	R31,R25
    00B1 8300      STD	Z+0,R16
(0067) 			 }
(0068) 		 }
    00B2 C007      RJMP	0x00BA
(0069) 	else if((temp == 'R')||(temp == 'r'))
    00B3 3502      CPI	R16,0x52
    00B4 F011      BEQ	0x00B7
    00B5 3702      CPI	R16,0x72
    00B6 F419      BNE	0x00BA
(0070) 		 {
(0071) 		  	 ReadFlag = 1;
    00B7 E081      LDI	R24,1
    00B8 93800063  STS	ReadFlag,R24
(0072) 		 }
    00BA 9029      LD	R2,Y+
    00BB BE2F      OUT	0x3F,R2
    00BC 91F9      LD	R31,Y+
    00BD 91E9      LD	R30,Y+
    00BE 9199      LD	R25,Y+
    00BF 9189      LD	R24,Y+
    00C0 9109      LD	R16,Y+
    00C1 9039      LD	R3,Y+
    00C2 9029      LD	R2,Y+
    00C3 9518      RETI
_UartTransmitData:
  Er                   --> Y+0
  j                    --> R20
    00C4 940E0140  CALL	push_gset1
    00C6 9726      SBIW	R28,6
(0073) }
(0074) /*-----------------------------------------------------------------
(0075) 函数名称: void UartTransmitData(void)
(0076) 函数功能: 发送字符串
(0077) 参    数: 
(0078) 返 回 值: 无
(0079) -----------------------------------------------------------------*/
(0080) void UartTransmitData(void)
(0081) {
(0082)  	uchar j,Er[6] = "ERROR";
    00C7 E584      LDI	R24,0x54
    00C8 E090      LDI	R25,0
    00C9 01FE      MOVW	R30,R28
    00CA E006      LDI	R16,6
    00CB E010      LDI	R17,0
    00CC 93FA      ST	R31,-Y
    00CD 93EA      ST	R30,-Y
    00CE 939A      ST	R25,-Y
    00CF 938A      ST	R24,-Y
    00D0 940E0157  CALL	asgncblk
(0083) 	if( i == 0)			   				//判断接收到的数据是否为空
    00D2 90200060  LDS	R2,i
    00D4 2022      TST	R2
    00D5 F479      BNE	0x00E5
(0084) 	{
(0085) 	 	for( j = 0;j < 5; j++)
    00D6 2744      CLR	R20
    00D7 C00A      RJMP	0x00E2
(0086) 		{
(0087) 	 	 	while(!(UCSRA&0x20));		//等待数据寄存器为空
    00D8 9B5D      SBIS	0x0B,5
    00D9 CFFE      RJMP	0x00D8
(0088) 				UDR = Er[j];		//发送字符
    00DA 01CE      MOVW	R24,R28
    00DB 2FE4      MOV	R30,R20
    00DC 27FF      CLR	R31
    00DD 0FE8      ADD	R30,R24
    00DE 1FF9      ADC	R31,R25
    00DF 8020      LDD	R2,Z+0
    00E0 B82C      OUT	0x0C,R2
    00E1 9543      INC	R20
    00E2 3045      CPI	R20,5
    00E3 F3A0      BCS	0x00D8
(0089) 		}		
(0090) 	}
    00E4 C011      RJMP	0x00F6
(0091) 	else
(0092) 	{
(0093) 	 	for( j = 0;j < i; j++)
    00E5 2744      CLR	R20
    00E6 C00B      RJMP	0x00F2
(0094) 		{
(0095) 	 	 	while(!(UCSRA&0x20));			//等待数据寄存器为空
    00E7 9B5D      SBIS	0x0B,5
    00E8 CFFE      RJMP	0x00E7
(0096) 				UDR = RecvData[j];			//发送字符
    00E9 E684      LDI	R24,0x64
    00EA E090      LDI	R25,0
    00EB 2FE4      MOV	R30,R20
    00EC 27FF      CLR	R31
    00ED 0FE8      ADD	R30,R24
    00EE 1FF9      ADC	R31,R25
    00EF 8020      LDD	R2,Z+0
    00F0 B82C      OUT	0x0C,R2
    00F1 9543      INC	R20
    00F2 90200060  LDS	R2,i
    00F4 1542      CP	R20,R2
    00F5 F388      BCS	0x00E7
(0097) 		}
(0098) 	}
    00F6 9626      ADIW	R28,6
    00F7 940E0143  CALL	pop_gset1
    00F9 9508      RET
(0099) }
(0100) /*-----------------------------------------------------------------
(0101) 函数名称: void InitDevices(void) 
(0102) 函数功能: 初始化各种信息
(0103) 参    数: 
(0104) 返 回 值: 无
(0105) -----------------------------------------------------------------*/
(0106) void InitDevices(void)
(0107) {
(0108)  	CLI(); //关全部中断
_InitDevices:
    00FA 94F8      BCLR	7
(0109)  	Uart0Init();
    00FB DF81      RCALL	_Uart0Init
(0110) 
(0111)  	MCUCR = 0x00;
    00FC 2422      CLR	R2
    00FD BE25      OUT	0x35,R2
(0112)  	SEI(); 
    00FE 9478      BSET	7
    00FF 9508      RET
(0113) }
(0114) 
(0115) void main( void)
(0116) {
(0117)  	uchar j;
(0118)  	InitDevices();
_main:
  j                    --> R20
    0100 DFF9      RCALL	_InitDevices
    0101 C01C      RJMP	0x011E
(0119) 	while(1)
(0120) 	{
(0121) 	 	if( NewBeginFlag)					//有新的数据接收,清除原有数据
    0102 90200061  LDS	R2,NewBeginFlag
    0104 2022      TST	R2
    0105 F081      BEQ	0x0116
(0122) 		{
(0123) 			NewBeginFlag = 0;
    0106 2422      CLR	R2
    0107 92200061  STS	NewBeginFlag,R2
(0124) 			for( j = 1; j ; j++ )
    0109 E041      LDI	R20,1
    010A C009      RJMP	0x0114
(0125) 			{
(0126) 			 	RecvData[j] = 0;
    010B E684      LDI	R24,0x64
    010C E090      LDI	R25,0
    010D 2FE4      MOV	R30,R20
    010E 27FF      CLR	R31
    010F 0FE8      ADD	R30,R24
    0110 1FF9      ADC	R31,R25
    0111 2422      CLR	R2
    0112 8220      STD	Z+0,R2
    0113 9543      INC	R20
    0114 2344      TST	R20
    0115 F7A9      BNE	0x010B
(0127) 			}
(0128) 		}
(0129) 		if( ReadFlag)
    0116 90200063  LDS	R2,ReadFlag
    0118 2022      TST	R2
    0119 F021      BEQ	0x011E
(0130) 		{
(0131) 		 	UartTransmitData();
    011A DFA9      RCALL	_UartTransmitData
(0132) 			ReadFlag = 0;
FILE: <library>
    011B 2422      CLR	R2
    011C 92200063  STS	ReadFlag,R2
    011E CFE3      RJMP	0x0102
    011F 9508      RET
mod8u:
    0120 9468      BSET	6
    0121 C001      RJMP	xdiv8u
div8u:
    0122 94E8      BCLR	6
xdiv8u:
    0123 932A      ST	R18,-Y
    0124 92FA      ST	R15,-Y
    0125 92EA      ST	R14,-Y
    0126 24FF      CLR	R15
    0127 24EE      CLR	R14
    0128 E120      LDI	R18,0x10
    0129 0F00      LSL	R16
    012A 1CFF      ROL	R15
    012B 1CEE      ROL	R14
    012C 16E1      CP	R14,R17
    012D F010      BCS	0x0130
    012E 1AE1      SUB	R14,R17
    012F 9503      INC	R16
    0130 952A      DEC	R18
    0131 F7B9      BNE	0x0129
    0132 F40E      BRTC	0x0134
    0133 2D0E      MOV	R16,R14
    0134 90E9      LD	R14,Y+
    0135 90F9      LD	R15,Y+
    0136 9129      LD	R18,Y+
    0137 9508      RET
push_gset5:
    0138 92FA      ST	R15,-Y
    0139 92EA      ST	R14,-Y
push_gset4:
    013A 92DA      ST	R13,-Y
    013B 92CA      ST	R12,-Y
push_gset3:
    013C 92BA      ST	R11,-Y
    013D 92AA      ST	R10,-Y
push_gset2:
    013E 937A      ST	R23,-Y
    013F 936A      ST	R22,-Y
push_gset1:
    0140 935A      ST	R21,-Y
    0141 934A      ST	R20,-Y
    0142 9508      RET
pop_gset1:
    0143 E0E1      LDI	R30,1
pop:
    0144 9149      LD	R20,Y+
    0145 9159      LD	R21,Y+
    0146 FDE0      SBRC	R30,0
    0147 9508      RET
    0148 9169      LD	R22,Y+
    0149 9179      LD	R23,Y+
    014A FDE1      SBRC	R30,1
    014B 9508      RET
    014C 90A9      LD	R10,Y+
    014D 90B9      LD	R11,Y+
    014E FDE2      SBRC	R30,2
    014F 9508      RET
    0150 90C9      LD	R12,Y+
    0151 90D9      LD	R13,Y+
    0152 FDE3      SBRC	R30,3
    0153 9508      RET
    0154 90E9      LD	R14,Y+
    0155 90F9      LD	R15,Y+
    0156 9508      RET
asgncblk:
    0157 93AA      ST	R26,-Y
    0158 93BA      ST	R27,-Y
    0159 93EA      ST	R30,-Y
    015A 93FA      ST	R31,-Y
    015B 920A      ST	R0,-Y
    015C 81AF      LDD	R26,Y+7
    015D 85B8      LDD	R27,Y+8
    015E 81ED      LDD	R30,Y+5
    015F 81FE      LDD	R31,Y+6
    0160 3000      CPI	R16,0
    0161 0701      CPC	R16,R17
    0162 F031      BEQ	0x0169
    0163 95C8      LPM
    0164 920D      ST	R0,X+
    0165 9631      ADIW	R30,1
    0166 5001      SUBI	R16,1
    0167 4010      SBCI	R17,0
    0168 CFF7      RJMP	0x0160
    0169 9009      LD	R0,Y+
    016A 91F9      LD	R31,Y+
    016B 91E9      LD	R30,Y+
    016C 91B9      LD	R27,Y+
    016D 91A9      LD	R26,Y+
    016E 9624      ADIW	R28,4
    016F 9508      RET

⌨️ 快捷键说明

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