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

📄 uart.lst

📁 使用Atmel88芯片实现RS485通讯,Modbus通讯协议.在IVR_AVR环境中编译,文件完整.
💻 LST
📖 第 1 页 / 共 4 页
字号:
    03C1 B18B      IN	R24,0x0B
    03C2 7B8F      ANDI	R24,0xBF
    03C3 B98B      OUT	0x0B,R24
    03C4 9508      RET
(0049) }
(0050) 
(0051) void light_5(void)
(0052) {	 //01001001
(0053)  	 PORTB &= 0b11010010;
_light_5:
    03C5 B185      IN	R24,0x05
    03C6 7D82      ANDI	R24,0xD2
    03C7 B985      OUT	0x05,R24
(0054) 	 PORTB |= 0b00010010;
    03C8 B185      IN	R24,0x05
    03C9 6182      ORI	R24,0x12
    03CA B985      OUT	0x05,R24
(0055)  	 PORTD &= 0b10111111; 	
    03CB B18B      IN	R24,0x0B
    03CC 7B8F      ANDI	R24,0xBF
    03CD B98B      OUT	0x0B,R24
    03CE 9508      RET
(0056) }
(0057) 
(0058) void light_6(void)
(0059) {   //01000001
(0060) 	 PORTB &= 0b11000010;
_light_6:
    03CF B185      IN	R24,0x05
    03D0 7C82      ANDI	R24,0xC2
    03D1 B985      OUT	0x05,R24
(0061) 	 PORTB |= 0b00000010;
    03D2 9A29      SBI	0x05,1
(0062)  	 PORTD &= 0b10111111;
    03D3 B18B      IN	R24,0x0B
    03D4 7B8F      ANDI	R24,0xBF
    03D5 B98B      OUT	0x0B,R24
    03D6 9508      RET
(0063) }
(0064) 
(0065) void light_7(void)
(0066) {   //00011111
(0067) 	 PORTB &= 0b11111000;
_light_7:
    03D7 B185      IN	R24,0x05
    03D8 7F88      ANDI	R24,0xF8
    03D9 B985      OUT	0x05,R24
(0068) 	 PORTB |= 0b00111000;
    03DA B185      IN	R24,0x05
    03DB 6388      ORI	R24,0x38
    03DC B985      OUT	0x05,R24
(0069)  	 PORTD |= 0b01000000;
    03DD 9A5E      SBI	0x0B,6
    03DE 9508      RET
(0070) }
(0071) 
(0072) void light_8(void)
(0073) {   //00000001
(0074) 	PORTB &= 0b11000000;
_light_8:
    03DF B185      IN	R24,0x05
    03E0 7C80      ANDI	R24,0xC0
    03E1 B985      OUT	0x05,R24
(0075) 	//
(0076)  	PORTD &= 0b10111111; 
    03E2 B18B      IN	R24,0x0B
    03E3 7B8F      ANDI	R24,0xBF
    03E4 B98B      OUT	0x0B,R24
    03E5 9508      RET
(0077) }
(0078) 
(0079) void light_9(void)
(0080) {    //00001001
(0081) 	 PORTB &= 0b11010000;
_light_9:
    03E6 B185      IN	R24,0x05
    03E7 7D80      ANDI	R24,0xD0
    03E8 B985      OUT	0x05,R24
(0082) 	 PORTB |= 0b00010000;
    03E9 9A2C      SBI	0x05,4
(0083)  	 PORTD &= 0b10111111;
    03EA B18B      IN	R24,0x0B
    03EB 7B8F      ANDI	R24,0xBF
    03EC B98B      OUT	0x0B,R24
    03ED 9508      RET
(0084) }
(0085) 
(0086) 
(0087) void led_init(void)
(0088) {
(0089)     //段码   1: output;  0: input.
(0090)  	 DDRD |= 0xc0;  // 0b1100'0000
_led_init:
    03EE B18A      IN	R24,0x0A
    03EF 6C80      ORI	R24,0xC0
    03F0 B98A      OUT	0x0A,R24
(0091) 	 DDRB |= 0x3f;  // 0b0011'1111 
    03F1 B184      IN	R24,0x04
    03F2 638F      ORI	R24,0x3F
    03F3 B984      OUT	0x04,R24
(0092) //位码
(0093) 	 DDRC |= 0x3c;  // 0b0011'1100 
    03F4 B187      IN	R24,0x07
    03F5 638C      ORI	R24,0x3C
    03F6 B987      OUT	0x07,R24
(0094) //
(0095)      PORTC &= 0b11011111;		
    03F7 B188      IN	R24,0x08
    03F8 7D8F      ANDI	R24,0xDF
    03F9 B988      OUT	0x08,R24
(0096) 	 PORTC |= 0b00100000;	
    03FA 9A45      SBI	0x08,5
(0097) 	 PORTC &= 0b11011111;
    03FB B188      IN	R24,0x08
    03FC 7D8F      ANDI	R24,0xDF
    03FD B988      OUT	0x08,R24
(0098) 	 PORTC |= 0b00010000;	
    03FE 9A44      SBI	0x08,4
(0099) 	 PORTC &= 0b11101111;			 
    03FF B188      IN	R24,0x08
    0400 7E8F      ANDI	R24,0xEF
    0401 B988      OUT	0x08,R24
(0100) 	//连接
(0101) 	pcled[0] =  light_0;
    0402 E688      LDI	R24,0x68
    0403 E090      LDI	R25,0
    0404 9390013F  STS	pcled+1,R25
    0406 9380013E  STS	pcled,R24
(0102) 	pcled[1] =  light_1; 
    0408 E686      LDI	R24,0x66
    0409 E090      LDI	R25,0
    040A 93900141  STS	pcled+3,R25
    040C 93800140  STS	pcled+2,R24
(0103) 	pcled[2] =  light_2; 
    040E E684      LDI	R24,0x64
    040F E090      LDI	R25,0
    0410 93900143  STS	0x143,R25
    0412 93800142  STS	0x142,R24
(0104) 	pcled[3] =  light_3; 
    0414 E682      LDI	R24,0x62
    0415 E090      LDI	R25,0
    0416 93900145  STS	0x145,R25
    0418 93800144  STS	0x144,R24
(0105) 	pcled[4] =  light_4; 
    041A E680      LDI	R24,0x60
    041B E090      LDI	R25,0
    041C 93900147  STS	0x147,R25
    041E 93800146  STS	0x146,R24
(0106)    	pcled[5] =  light_5; 
    0420 E58E      LDI	R24,0x5E
    0421 E090      LDI	R25,0
    0422 93900149  STS	0x149,R25
    0424 93800148  STS	0x148,R24
(0107) 	pcled[6] =  light_6; 
    0426 E58C      LDI	R24,0x5C
    0427 E090      LDI	R25,0
    0428 9390014B  STS	0x14B,R25
    042A 9380014A  STS	0x14A,R24
(0108) 	pcled[7] =  light_7; 
    042C E58A      LDI	R24,0x5A
    042D E090      LDI	R25,0
    042E 9390014D  STS	0x14D,R25
    0430 9380014C  STS	0x14C,R24
(0109) 	pcled[8] =  light_8; 
    0432 E588      LDI	R24,0x58
    0433 E090      LDI	R25,0
    0434 9390014F  STS	0x14F,R25
    0436 9380014E  STS	0x14E,R24
(0110) 	pcled[9] =  light_9; 
    0438 E586      LDI	R24,0x56
    0439 E090      LDI	R25,0
    043A 93900151  STS	0x151,R25
    043C 93800150  STS	0x150,R24
    043E 9508      RET
_CalculateSub:
  p_aloneD             --> R20
  Digit                --> R22
    043F D0BE      RCALL	push_gset2
    0440 01A9      MOVW	R20,R18
    0441 01B8      MOVW	R22,R16
(0111) }
(0112) 
(0113) //位计算.
(0114) void CalculateSub(unsigned int Digit,char *p_aloneD)
(0115) {
(0116)  	*p_aloneD = (char)(Digit/1000);
    0442 EE28      LDI	R18,0xE8
    0443 E033      LDI	R19,3
    0444 018B      MOVW	R16,R22
    0445 D080      RCALL	div16u
    0446 01FA      MOVW	R30,R20
    0447 8300      STD	Z+0,R16
(0117) 	Digit -= *p_aloneD++ * 1000;
    0448 9121      LD	R18,Z+
    0449 01AF      MOVW	R20,R30
    044A 2733      CLR	R19
    044B EE08      LDI	R16,0xE8
    044C E013      LDI	R17,3
    044D D092      RCALL	empy16s
    044E 1B60      SUB	R22,R16
    044F 0B71      SBC	R23,R17
(0118) 	
(0119) 	*p_aloneD = (char)(Digit/100);
    0450 E624      LDI	R18,0x64
    0451 E030      LDI	R19,0
    0452 018B      MOVW	R16,R22
    0453 D072      RCALL	div16u
    0454 01FA      MOVW	R30,R20
    0455 8300      STD	Z+0,R16
(0120) 	Digit -= *p_aloneD++ * 100;
    0456 9111      LD	R17,Z+
    0457 01AF      MOVW	R20,R30
    0458 E604      LDI	R16,0x64
    0459 0201      MULS	R16,R17
    045A 1960      SUB	R22,R0
    045B 0971      SBC	R23,R1
(0121) 	
(0122) 	*p_aloneD = (char)(Digit/10);
    045C E02A      LDI	R18,0xA
    045D E030      LDI	R19,0
    045E 018B      MOVW	R16,R22
    045F D066      RCALL	div16u
    0460 01FA      MOVW	R30,R20
    0461 8300      STD	Z+0,R16
(0123) 	Digit -= *p_aloneD++ * 10;
    0462 9111      LD	R17,Z+
    0463 E00A      LDI	R16,0xA
    0464 0201      MULS	R16,R17
    0465 1960      SUB	R22,R0
    0466 0971      SBC	R23,R1
(0124) 
(0125) 	*p_aloneD = (char)Digit;
    0467 8360      STD	Z+0,R22
(0126) 	p_aloneD = 0;   
    0468 2744      CLR	R20
    0469 2755      CLR	R21
    046A D085      RCALL	pop_gset2
    046B 9508      RET
(0127) }
(0128) 
(0129) void sub2(void)
(0130) {
(0131) 	static int ShowDigit;
(0132) 	NOP();
_sub2:
    046C 0000      NOP
(0133) 	ShowDigit =	 LedShowLink;//  0x4d2;// 
    046D 9020013C  LDS	R2,LedShowLink
    046F 9030013D  LDS	R3,LedShowLink+1
    0471 9230013B  STS	ShowDigit+1,R3
    0473 9220013A  STS	ShowDigit,R2
(0134) 	CalculateSub(ShowDigit, &aloneD[0]);
    0475 E522      LDI	R18,0x52
    0476 E031      LDI	R19,1
    0477 9100013A  LDS	R16,ShowDigit
    0479 9110013B  LDS	R17,ShowDigit+1
    047B DFC3      RCALL	_CalculateSub
(0135) 	NOP();
    047C 0000      NOP
    047D 9508      RET
_subled:
  bytebit              --> R22
  byteT                --> R20
    047E D07F      RCALL	push_gset2
(0136) }
(0137) 
(0138) void subled(void)
(0139) {
(0140) 	static char ledbitcou=0b00000000;
(0141) //	static char coui ; //用作数组aloneD[]下标.
(0142) 	char bytebit=0,byteT=0;
    047F 2766      CLR	R22
    0480 2744      CLR	R20
(0143) 	
(0144) //为每位扫描. 1,置一,四位都不亮;  2,清零,点亮一个位.
(0145) 
(0146) 	if(ledbitcou == 0)
    0481 90200100  LDS	R2,ledbitcou
    0483 2022      TST	R2
    0484 F411      BNE	0x0487
(0147) 	{
(0148) 		 bytebit = 0b11111011;
    0485 EF6B      LDI	R22,0xFB
(0149) 	}else if(ledbitcou == 1)
    0486 C011      RJMP	0x0498
    0487 91800100  LDS	R24,ledbitcou
    0489 3081      CPI	R24,1
    048A F411      BNE	0x048D
(0150) 	{
(0151) 		 bytebit = 0b11110111;
    048B EF67      LDI	R22,0xF7
(0152) 	}else if(ledbitcou == 2)
    048C C00B      RJMP	0x0498
    048D 91800100  LDS	R24,ledbitcou
    048F 3082      CPI	R24,2
    0490 F411      BNE	0x0493
(0153) 	{
(0154) 		 bytebit = 0b11101111;
    0491 EE6F      LDI	R22,0xEF
(0155) 	}else if(ledbitcou == 3)
    0492 C005      RJMP	0x0498
    0493 91800100  LDS	R24,ledbitcou
    0495 3083      CPI	R24,3
    0496 F409      BNE	0x0498
(0156) 	{	  
(0157) 		 bytebit = 0b11011111;
    0497 ED6F      LDI	R22,0xDF
(0158) 	}
(0159) 
(0160) 	//先清段码
(0161) //	PORTA &= 0b11110000;
(0162) //	PORTA |= bytebit;
(0163) 	PORTD |= 0b11000000;        //包含了小数点
    0498 B18B      IN	R24,0x0B
    0499 6C80      ORI	R24,0xC0
    049A B98B      OUT	0x0B,R24
(0164) 	PORTB |= 0b11111100;
    049B B185      IN	R24,0x05
    049C 6F8C      ORI	R24,0xFC
    049D B985      OUT	0x05,R24
(0165)     //置位位码
(0166)   	PORTC |= 0b00111100;
    049E B188      IN	R24,0x08
    049F 638C      ORI	R24,0x3C
    04A0 B988      OUT	0x08,R24
(0167) 	PORTC &= bytebit;
    04A1 B028      IN	R2,0x08
    04A2 2226      AND	R2,R22
    04A3 B828      OUT	0x08,R2
(0168) 	//置位段码
(0169)     byteT = aloneD[ledbitcou];    
    04A4 E582      LDI	R24,0x52
    04A5 E091      LDI	R25,1
    04A6 91E00100  LDS	R30,ledbitcou
    04A8 27FF      CLR	R31
    04A9 0FE8      ADD	R30,R24
    04AA 1FF9      ADC	R31,R25
    04AB 8140      LDD	R20,Z+0
(0170) 	(*pcled[byteT])();		 //调用语句.
    04AC E082      LDI	R24,2
    04AD 9F84      MUL	R24,R20
    04AE 01F0      MOVW	R30,R0
    04AF E38E      LDI	R24,0x3E
    04B0 E091      LDI	R25,1
    04B1 0FE8      ADD	R30,R24
    04B2 1FF9      ADC	R31,R25
    04B3 81A0      LDD	R26,Z+0
    04B4 81B1      LDD	R27,Z+1
    04B5 01FD      MOVW	R30,R26
    04B6 D060      RCALL	xicall
(0171) 	if(++ledbitcou == 4) 
    04B7 91800100  LDS	R24,ledbitcou
    04B9 5F8F      SUBI	R24,0xFF
    04BA 2E28      MOV	R2,R24
    04BB 92200100  STS	ledbitcou,R2
    04BD 3084      CPI	R24,4
    04BE F419      BNE	0x04C2
(0172) 	ledbitcou = 0;  
FILE: <library>
    04BF 2422      CLR	R2
    04C0 92200100  STS	ledbitcou,R2
    04C2 D02D      RCALL	pop_gset2
    04C3 9508      RET
mod16u:
    04C4 9468      BSET	6
    04C5 C001      RJMP	xdiv16u
div16u:
    04C6 94E8      BCLR	6
xdiv16u:
    04C7 92EA      ST	R14,-Y
    04C8 92FA      ST	R15,-Y
    04C9 938A      ST	R24,-Y
    04CA 24EE      CLR	R14
    04CB 24FF      CLR	R15
    04CC E180      LDI	R24,0x10
    04CD 0F00      LSL	R16
    04CE 1F11      ROL	R17
    04CF 1CEE      ROL	R14
    04D0 1CFF      ROL	R15
    04D1 16E2      CP	R14,R18
    04D2 06F3      CPC	R15,R19
    04D3 F018      BCS	0x04D7
    04D4 1AE2      SUB	R14,R18
    04D5 0AF3      SBC	R15,R19
    04D6 9503      INC	R16
    04D7 958A      DEC	R24
    04D8 F7A1      BNE	0x04CD
    04D9 F416      BRTC	0x04DC
    04DA 2D0E      MOV	R16,R14
    04DB 2D1F      MOV	R17,R15
    04DC 9189      LD	R24,Y+
    04DD 90F9      LD	R15,Y+
    04DE 90E9      LD	R14,Y+
    04DF 9508      RET
empy16s:
    04E0 920A      ST	R0,-Y
    04E1 921A      ST	R1,-Y
    04E2 938A      ST	R24,-Y
    04E3 939A      ST	R25,-Y
    04E4 9F02      MUL	R16,R18
    04E5 01C0      MOVW	R24,R0
    04E6 9F12      MUL	R17,R18
    04E7 0D90      ADD	R25,R0
    04E8 9F03      MUL	R16,R19
    04E9 0D90      ADD	R25,R0
    04EA 018C      MOVW	R16,R24
    04EB 9199      LD	R25,Y+
    04EC 9189      LD	R24,Y+
    04ED 9019      LD	R1,Y+
    04EE 9009      LD	R0,Y+
    04EF 9508      RET
pop_gset2:
    04F0 E0E2      LDI	R30,2
    04F1 C012      RJMP	pop
pop_gset3:
    04F2 E0E4      LDI	R30,4
    04F3 C010      RJMP	pop
pop_gset4:
    04F4 E0E8      LDI	R30,0x8
    04F5 C00E      RJMP	pop
pop_gset5:
    04F6 27EE      CLR	R30
    04F7 C00C      RJMP	pop
push_gset5:
    04F8 92FA      ST	R15,-Y
    04F9 92EA      ST	R14,-Y
push_gset4:
    04FA 92DA      ST	R13,-Y
    04FB 92CA      ST	R12,-Y
push_gset3:
    04FC 92BA      ST	R11,-Y
    04FD 92AA      ST	R10,-Y
push_gset2:
    04FE 937A      ST	R23,-Y
    04FF 936A      ST	R22,-Y
push_gset1:
    0500 935A      ST	R21,-Y
    0501 934A      ST	R20,-Y
    0502 9508      RET
pop_gset1:
    0503 E0E1      LDI	R30,1
pop:
    0504 9149      LD	R20,Y+
    0505 9159      LD	R21,Y+
    0506 FDE0      SBRC	R30,0
    0507 9508      RET
    0508 9169      LD	R22,Y+
    0509 9179      LD	R23,Y+
    050A FDE1      SBRC	R30,1
    050B 9508      RET
    050C 90A9      LD	R10,Y+
    050D 90B9      LD	R11,Y+
    050E FDE2      SBRC	R30,2
    050F 9508      RET
    0510 90C9      LD	R12,Y+
    0511 90D9      LD	R13,Y+
    0512 FDE3      SBRC	R30,3
    0513 9508      RET
    0514 90E9      LD	R14,Y+
    0515 90F9      LD	R15,Y+
    0516 9508      RET
xicall:
    0517 920A      ST	R0,-Y
    0518 95C8      LPM
    0519 920A      ST	R0,-Y
    051A 9631      ADIW	R30,1
    051B 95C8      LPM
    051C 2DF0      MOV	R31,R0
    051D 91E9      LD	R30,Y+
    051E 9009      LD	R0,Y+
    051F 9409      IJMP

⌨️ 快捷键说明

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