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

📄 uart.lst

📁 cc1020 串口通讯
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0216) 
(0217) //串行接收中断服务程序
(0218) #pragma interrupt_handler uart0_rx_isr:12
(0219) void uart0_rx_isr(void)
    0101 E585      LDI	R24,0x55
    0102 2628      EOR	R2,R24
(0220) {
    0103 9220008C  STS	xx0,R2
(0221) 	if(!(UCSRA& (1<<RXC))) 
    0105 EA8A      LDI	R24,0xAA
    0106 E090      LDI	R25,0
    0107 2433      CLR	R3
(0222) 		return;
    0108 2628      EOR	R2,R24
    0109 2639      EOR	R3,R25
    010A 9220008C  STS	xx0,R2
(0223) 	if(rsok00==0){
    010C 90200090  LDS	R2,rscnt11
    010E 9030008C  LDS	R3,xx0
    0110 2432      EOR	R3,R2
    0111 9230008C  STS	xx0,R3
    0113 2422      CLR	R2
(0224) 		rcvd1=UDR;
    0114 9220007E  STS	Tx_Rx,R2
    0116 C080      RJMP	0x0197
    0117 2422      CLR	R2
    0118 9220008A  STS	rsok00,R2
    011A C07C      RJMP	0x0197
    011B 90200088  LDS	R2,rsok20
(0225) 		if(rcvd1==0x55)rscnt01++;
(0226) 		else if(rcvd1==0xaa)rscnt01++;
    011D 2022      TST	R2
    011E F461      BNE	0x012B
    011F B02C      IN	R2,0x0C
    0120 9220008F  STS	rscnt12,R2
    0122 E081      LDI	R24,1
    0123 93800088  STS	rsok20,R24
    0125 9030008C  LDS	R3,xx0
    0127 2432      EOR	R3,R2
    0128 9230008C  STS	xx0,R3
(0227) 		else{}
    012A C06C      RJMP	0x0197
    012B 90200087  LDS	R2,rsok30
(0228) 		if((rcvd1==0xaa)&&(rscnt01>=1)){rsok00=1;
(0229) 										rscnt01=0;										
    012D 2022      TST	R2
(0230) 										}
(0231) 				}
    012E F461      BNE	0x013B
    012F B02C      IN	R2,0x0C
    0130 9220008E  STS	rscnt13,R2
(0232) 	else{
    0132 E081      LDI	R24,1
    0133 93800087  STS	rsok30,R24
(0233) 		if(rsok10==0){
(0234) 
    0135 9030008C  LDS	R3,xx0
    0137 2432      EOR	R3,R2
(0235) 			rscnt11=UDR;
    0138 9230008C  STS	xx0,R3
    013A C05C      RJMP	0x0197
    013B E982      LDI	R24,0x92
(0236) //    if((rscnt11==addressper)||(rscnt11==0x00))
    013C E090      LDI	R25,0
    013D 91E0008D  LDS	R30,rscnt01
(0237) 			if(rscnt11==addressper)
    013F 27FF      CLR	R31
(0238) 			{   rsok10=1;
(0239) 				xx0=0;xx1=0;
    0140 0FE8      ADD	R30,R24
    0141 1FF9      ADC	R31,R25
    0142 B02C      IN	R2,0x0C
    0143 8220      STD	Z+0,R2
(0240) 				xx0=xx0^0x55;
    0144 9180008E  LDS	R24,rscnt13
    0146 5F8F      SUBI	R24,0xFF
(0241) 				xx0=xx0^0xaa;
    0147 9020008D  LDS	R2,rscnt01
    0149 1628      CP	R2,R24
(0242) 				xx0=xx0^rscnt11;
    014A F4B8      BCC	0x0162
(0243) 				Tx_Rx=0;
(0244) 			}
    014B E982      LDI	R24,0x92
    014C E090      LDI	R25,0
    014D 2DE2      MOV	R30,R2
    014E 27FF      CLR	R31
(0245) 			else { rsok00=0;}
    014F 0FE8      ADD	R30,R24
    0150 1FF9      ADC	R31,R25
    0151 8020      LDD	R2,Z+0
(0246) 	      	  		}
    0152 9030008C  LDS	R3,xx0
    0154 2432      EOR	R3,R2
(0247) 		else{
    0155 9230008C  STS	xx0,R3
    0157 91E0008D  LDS	R30,rscnt01
    0159 27FF      CLR	R31
(0248) 			if(rsok20==0){
    015A 0FE8      ADD	R30,R24
(0249) 				rscnt12=UDR;
(0250) 				rsok20=1;
    015B 1FF9      ADC	R31,R25
    015C 8020      LDD	R2,Z+0
    015D 9030008B  LDS	R3,xx1
    015F 0C32      ADD	R3,R2
    0160 9230008B  STS	xx1,R3
    0162 9180008E  LDS	R24,rscnt13
(0251) 				xx0=xx0^rscnt12;
    0164 5F8F      SUBI	R24,0xFF
    0165 9020008D  LDS	R2,rscnt01
    0167 1628      CP	R2,R24
    0168 F549      BNE	0x0192
    0169 E982      LDI	R24,0x92
    016A E090      LDI	R25,0
    016B 2DE2      MOV	R30,R2
    016C 27FF      CLR	R31
    016D 0FE8      ADD	R30,R24
    016E 1FF9      ADC	R31,R25
    016F 8020      LDD	R2,Z+0
    0170 9030008C  LDS	R3,xx0
    0172 1432      CP	R3,R2
    0173 F451      BNE	0x017E
    0174 E081      LDI	R24,1
    0175 93800086  STS	rsok40,R24
(0252) 						}
    0177 2422      CLR	R2
    0178 9220007D  STS	Rx_Time,R2
    017A E082      LDI	R24,2
    017B 9380007E  STS	Tx_Rx,R24
    017D C014      RJMP	0x0192
    017E 2422      CLR	R2
    017F 9220008A  STS	rsok00,R2
    0181 92200089  STS	rsok10,R2
(0253) 			else {
(0254) 				if(rsok30==0){
    0183 92200088  STS	rsok20,R2
    0185 92200087  STS	rsok30,R2
    0187 92200086  STS	rsok40,R2
(0255) 		   			rscnt13=UDR;
    0189 9220008D  STS	rscnt01,R2
    018B 92200090  STS	rscnt11,R2
    018D E082      LDI	R24,2
    018E 9380007E  STS	Tx_Rx,R24
    0190 9220007D  STS	Rx_Time,R2
    0192 9180008D  LDS	R24,rscnt01
(0256) 					rsok30=1;
    0194 5F8F      SUBI	R24,0xFF
    0195 9380008D  STS	rscnt01,R24
    0197 9029      LD	R2,Y+
(0257) 					xx0=xx0^rscnt13;
(0258) 							}
(0259) 				else{		
    0198 BE2F      OUT	0x3F,R2
    0199 91F9      LD	R31,Y+
    019A 91E9      LD	R30,Y+
(0260) 					rcv1[rscnt01]=UDR;
    019B 9199      LD	R25,Y+
    019C 9189      LD	R24,Y+
(0261) 	       			if(rscnt01<(rscnt13+1)){	xx0=xx0^rcv1[rscnt01];
    019D 9039      LD	R3,Y+
    019E 9029      LD	R2,Y+
(0262) 										xx1+=rcv1[rscnt01];
    019F 9518      RETI
_delay:
    01A0 D535      RCALL	push_arg4
(0263) 											}
    01A1 D545      RCALL	push_gset3
    01A2 9724      SBIW	R28,4
    01A3 C006      RJMP	0x01AA
(0264) 					if(rscnt01==(rscnt13+1)){
    01A4 24AA      CLR	R10
    01A5 C001      RJMP	0x01A7
(0265) 						if(xx0==rcv1[rscnt01])
    01A6 94A3      INC	R10
    01A7 2D8A      MOV	R24,R10
(0266) 						{	rsok40=1;	
(0267) 							Rx_Time	= 0;
(0268) 							Tx_Rx   = 2;
    01A8 3082      CPI	R24,2
    01A9 F3E0      BCS	0x01A6
    01AA 01FE      MOVW	R30,R28
    01AB 8422      LDD	R2,Z+10
    01AC 8433      LDD	R3,Z+11
(0269) 						}
(0270) 						else {
(0271) 			//	 	   		 UCSRB=UCSRB|0x08;
(0272)                              rsok00=0;
    01AD 8444      LDD	R4,Z+12
    01AE 8455      LDD	R5,Z+13
    01AF 01FE      MOVW	R30,R28
    01B0 8220      STD	Z+0,R2
    01B1 8231      STD	Z+1,R3
    01B2 8242      STD	Z+2,R4
    01B3 8253      STD	Z+3,R5
    01B4 E041      LDI	R20,1
    01B5 E050      LDI	R21,0
(0273) 							 rsok10=0;
(0274) 							 rsok20=0;
(0275) 							 rsok30=0;
(0276) 							 rsok40=0;
(0277) 							 rscnt01=0;
(0278) 							 rscnt11=0;		
(0279) 							 Tx_Rx=2;
_UnLoad:
    01B6 E060      LDI	R22,0
    01B7 E070      LDI	R23,0
    01B8 01FE      MOVW	R30,R28
(0280) 							 Rx_Time=0;
    01B9 8020      LDD	R2,Z+0
    01BA 8031      LDD	R3,Z+1
    01BB 8042      LDD	R4,Z+2
(0281) 							 }
    01BC 8053      LDD	R5,Z+3
    01BD 1A24      SUB	R2,R20
    01BE 0A35      SBC	R3,R21
    01BF 0A46      SBC	R4,R22
    01C0 0A57      SBC	R5,R23
    01C1 01FE      MOVW	R30,R28
    01C2 8622      STD	Z+10,R2
(0282) 											}
(0283) 					rscnt01++;
(0284) 					}
(0285) 			}
(0286) 		}
(0287) 	}
_Switch_Range:
    01C3 8633      STD	Z+11,R3
    01C4 8644      STD	Z+12,R4
    01C5 8655      STD	Z+13,R5
(0288) }
(0289) 
(0290) void delay(unsigned long delay_count)
    01C6 E040      LDI	R20,0
    01C7 E050      LDI	R21,0
    01C8 E060      LDI	R22,0
    01C9 E070      LDI	R23,0
    01CA 01FE      MOVW	R30,R28
    01CB 8020      LDD	R2,Z+0
    01CC 8031      LDD	R3,Z+1
    01CD 8042      LDD	R4,Z+2
    01CE 8053      LDD	R5,Z+3
    01CF 1624      CP	R2,R20
    01D0 0635      CPC	R3,R21
    01D1 0646      CPC	R4,R22
    01D2 0657      CPC	R5,R23
    01D3 F009      BEQ	0x01D5
    01D4 CFCF      RJMP	0x01A4
    01D5 9624      ADIW	R28,4
    01D6 D506      RCALL	pop_gset3
    01D7 9624      ADIW	R28,4
    01D8 9508      RET
_puts:
  s                    --> R20
    01D9 D511      RCALL	push_gset1
(0291) {
(0292)    unsigned char loopi;
(0293)    while(delay_count-- != 0)
    01DA 01A8      MOVW	R20,R16
(0294)    {
    01DB C005      RJMP	0x01E1
(0295)       for(loopi=0;loopi<2;loopi++);
(0296)    }
    01DC 01FA      MOVW	R30,R20
(0297) }
(0298) 
(0299) 
    01DD 8100      LDD	R16,Z+0
(0300) 	
(0301) /*			字符串输出函数	   	 */	
    01DE DE6E      RCALL	_putchar
(0302) void puts(char *s)
(0303) 	{
    01DF 5F4F      SUBI	R20,0xFF
(0304) 	while (*s)
(0305) 		{
    01E0 4F5F      SBCI	R21,0xFF
(0306) 		putchar(*s);
(0307) 		s++;
    01E1 01FA      MOVW	R30,R20
_Auto_Range:
  advalue              --> Y+0
    01E2 8020      LDD	R2,Z+0
    01E3 2022      TST	R2
    01E4 F7B9      BNE	0x01DC
(0308) 		}	
(0309)     putchar(0x0a);//回车换行
(0310) 	putchar(0x0d);
(0311) 	}
(0312) 
(0313) 
(0314) /*			UART初始化				*/	
(0315) void uart_init(void)
    01E5 E00A      LDI	R16,0xA
    01E6 DE66      RCALL	_putchar
    01E7 E00D      LDI	R16,0xD
(0316) {
    01E8 DE64      RCALL	_putchar
    01E9 D504      RCALL	pop_gset1
    01EA 9508      RET
(0317) // OSCCAL=read_flash(0x1f20);
(0318)  rsok00=0;
(0319)  rsok10=0;
(0320)  rsok20=0;
_uart_init:
    01EB 2422      CLR	R2
(0321)  rsok30=0;
(0322)  rsok40=0;
    01EC 9220008A  STS	rsok00,R2
    01EE 92200089  STS	rsok10,R2
(0323)  rcvd1=0x00;
(0324)  rscnt11=0x00;
    01F0 92200088  STS	rsok20,R2
(0325)  rscnt12=0x00;
    01F2 92200087  STS	rsok30,R2
(0326)  rscnt13=0x00;
(0327)  rscnt01=0x00;
(0328)  xx0=0;xx1=0;
    01F4 92200086  STS	rsok40,R2
    01F6 92200091  STS	rcvd1,R2
    01F8 92200090  STS	rscnt11,R2
    01FA 9220008F  STS	rscnt12,R2
    01FC 9220008E  STS	rscnt13,R2
    01FE 9220008D  STS	rscnt01,R2
    0200 9220008C  STS	xx0,R2
(0329)  //UCSRB=0x90;//允许发送并开接收中断,发送不使能
(0330)  UCSRB = 0x00;
(0331)  UCSRA = 0x00;
    0202 9220008B  STS	xx1,R2
    0204 B82A      OUT	0x0A,R2
(0332)  UBRRL=(fosc/16/(baud+1))%256;
(0333)  UBRRH=(fosc/16/(baud+1))/256;
    0205 B82B      OUT	0x0B,R2
    0206 E688      LDI	R24,0x68
    0207 B989      OUT	0x09,R24
(0334)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    0208 BC20      OUT	0x20,R2
    0209 E886      LDI	R24,0x86
    020A BD80      OUT	0x20,R24
    020B E988      LDI	R24,0x98
    020C B98A      OUT	0x0A,R24
(0335)  UCSRB=0x98;
(0336) }
    020D 9508      RET
_port_init:
    020E 2422      CLR	R2
    020F BA28      OUT	0x18,R2
(0337) 
    0210 E083      LDI	R24,3
    0211 BB87      OUT	0x17,R24
    0212 E280      LDI	R24,0x20
(0338) void port_init(void)
(0339) {
(0340) 	//PB1-PCLK
(0341) 	//PB0-PDIO
(0342)  	PORTB = 0x00;
(0343)  	DDRB  = 0x03;
    0213 BB82      OUT	0x12,R24
(0344)   //PD5-PSEL
(0345)  //PD3-DCLK
(0346)  //PD4-DIO
(0347)  	PORTD = 0x20;
    0214 E380      LDI	R24,0x30
    0215 BB81      OUT	0x11,R24
    0216 9508      RET
_entcomm:
    0217 2422      CLR	R2
    0218 9220008C  STS	xx0,R2
    021A 9220008B  STS	xx1,R2
    021C E585      LDI	R24,0x55
    021D B98C      OUT	0x0C,R24
    021E 2628      EOR	R2,R24
    021F 9220008C  STS	xx0,R2
    0221 9180008B  LDS	R24,xx1
    0223 5A8B      SUBI	R24,0xAB
    0224 9380008B  STS	xx1,R24
    0226 9B5D      SBIS	0x0B,5
    0227 CFFE      RJMP	0x0226
    0228 EA8A      LDI	R24,0xAA
(0348)  	DDRD  = 0x30;
(0349) }
(0350) 
    0229 B98C      OUT	0x0C,R24
    022A 2799      CLR	R25
    022B 9020008C  LDS	R2,xx0
(0351) /* 确认帧 */
(0352) void entcomm(void)
    022D 2433      CLR	R3
    022E 2628      EOR	R2,R24
    022F 2639      EOR	R3,R25
(0353) {
    0230 9220008C  STS	xx0,R2
    0232 9180008B  LDS	R24,xx1
(0354) 	xx0=0;xx1=0;
    0234 5586      SUBI	R24,0x56
    0235 9380008B  STS	xx1,R24
    0237 9B5D      SBIS	0x0B,5
(0355) 	UDR=0x55;
    0238 CFFE      RJMP	0x0237
(0356) 	xx0=xx0^0x55;
(0357) 	xx1+=0x55;
(0358) 	while (!(UCSRA&(1<<UDRE)));
    0239 E180      LDI	R24,0x10
    023A B98C      OUT	0x0C,R24
    023B 9020008C  LDS	R2,xx0
(0359) 	UDR=0xaa;  
(0360) 	xx0=xx0^0xaa;
    023D 2628      EOR	R2,R24
    023E 9220008C  STS	xx0,R2
    0240 9180008B  LDS	R24,xx1
(0361) 	xx1+=0xaa;
(0362) 	while (!(UCSRA&(1<<UDRE)));
(0363) 	UDR=addressper;
(0364) 	xx0=xx0^addressper;
    0242 5F80      SUBI	R24,0xF0
    0243 9380008B  STS	xx1,R24
(0365) 	xx1+=addressper;
    0245 9B5D      SBIS	0x0B,5
    0246 CFFE      RJMP	0x0245
(0366) 	while (!(UCSRA&(1<<UDRE)));

⌨️ 快捷键说明

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