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

📄 mega128.lst

📁 AVR控制西门子MC39I的程序
💻 LST
字号:
__start:
__text_start:
    0047 EFCF      LDI	R28,0xFF
    0048 E1D0      LDI	R29,0x10
    0049 BFCD      OUT	0x3D,R28
    004A BFDE      OUT	0x3E,R29
    004B 51C0      SUBI	R28,0x10
    004C 40D0      SBCI	R29,0
    004D EA0A      LDI	R16,0xAA
    004E 8308      STD	Y+0,R16
    004F 2400      CLR	R0
    0050 E0E1      LDI	R30,1
    0051 E0F1      LDI	R31,1
    0052 E011      LDI	R17,1
    0053 31E5      CPI	R30,0x15
    0054 07F1      CPC	R31,R17
    0055 F011      BEQ	0x0058
    0056 9201      ST	R0,Z+
    0057 CFFB      RJMP	0x0053
    0058 8300      STD	Z+0,R16
    0059 E8EC      LDI	R30,0x8C
    005A E0F0      LDI	R31,0
    005B E0A0      LDI	R26,0
    005C E0B1      LDI	R27,1
    005D E010      LDI	R17,0
    005E 38ED      CPI	R30,0x8D
    005F 07F1      CPC	R31,R17
    0060 F021      BEQ	0x0065
    0061 95C8      LPM
    0062 9631      ADIW	R30,1
    0063 920D      ST	R0,X+
    0064 CFF9      RJMP	0x005E
    0065 940E00D6  CALL	_main
_exit:
    0067 CFFF      RJMP	_exit
_Delay:
  n                    --> R20
  m                    --> R22
  time                 --> R16
    0068 940E010E  CALL	push_gset2
FILE: E:\project\大坝\code\AVR\main.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #define fosc 8000000 //晶振8MHZ
(0004) #define baud  9600	 //与指纹头通讯的波特率
(0005) #define FrameCount  10
(0006) #define uint unsigned int
(0007) #define uchar unsigned char
(0008) 
(0009) #define Set485Rec PORTG |= (1<<2)
(0010) #define Set485Send PORTG &= ~(1<<2) 
(0011) 
(0012) uchar RecComm[10];
(0013) uchar SendComm[10];
(0014) uchar RecCount=0;
(0015) 
(0016) void Delay(uint time)
(0017) {
(0018)     uint m,n;
(0019) 	for(n=0;n<time;n++)
    006A 2744      CLR	R20
    006B 2755      CLR	R21
    006C C00B      RJMP	0x0078
(0020) 	{
(0021)        for(m=0;m<256;m++);
    006D 2766      CLR	R22
    006E 2777      CLR	R23
    006F C002      RJMP	0x0072
    0070 5F6F      SUBI	R22,0xFF
    0071 4F7F      SBCI	R23,0xFF
    0072 3060      CPI	R22,0
    0073 E0E1      LDI	R30,1
    0074 077E      CPC	R23,R30
    0075 F3D0      BCS	0x0070
    0076 5F4F      SUBI	R20,0xFF
    0077 4F5F      SBCI	R21,0xFF
    0078 1740      CP	R20,R16
    0079 0751      CPC	R21,R17
    007A F390      BCS	0x006D
(0022) 	}
(0023) }
    007B 940E00F1  CALL	pop_gset2
    007D 9508      RET
(0024) 
(0025) void Com0Init(void)                                    //串口通讯初始化程序
(0026) {
(0027)      UCSR0B = 0x00; //设置波特率时关闭发送和接收
_Com0Init:
    007E 2422      CLR	R2
    007F B82A      OUT	0x0A,R2
(0028)      UCSR0A = 0x00;
    0080 B82B      OUT	0x0B,R2
(0029) 	 UBRR0L=(fosc/16/(baud+1))%256;
    0081 E384      LDI	R24,0x34
    0082 B989      OUT	0x09,R24
(0030)      UBRR0H=(fosc/16/(baud+1))/256;
    0083 92200090  STS	__idata_end+3,R2
(0031)      UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);          //8位数据+1位STOP位
    0085 E086      LDI	R24,6
    0086 93800095  STS	0x95,R24
(0032)      UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);            //允许发送和接收
    0088 E988      LDI	R24,0x98
    0089 B98A      OUT	0x0A,R24
(0033)      //UCSR0B=(1<<RXEN0)|(1<<TXEN0);
(0034) }
    008A 9508      RET
_uart0_rx_isr:
    008B 922A      ST	R2,-Y
    008C 938A      ST	R24,-Y
    008D 939A      ST	R25,-Y
    008E 93EA      ST	R30,-Y
    008F 93FA      ST	R31,-Y
    0090 B62F      IN	R2,0x3F
    0091 922A      ST	R2,-Y
(0035) 
(0036) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0037) void uart0_rx_isr()
(0038) {
(0039)       while(!(UCSR0A & (1<<RXC0)));        
    0092 9B5F      SBIS	0x0B,7
    0093 CFFE      RJMP	0x0092
(0040) 	  asm("WDR");
    0094 95A8      WDR
(0041) 	  RecComm[RecCount] = UDR0;
    0095 E08B      LDI	R24,0xB
    0096 E091      LDI	R25,1
    0097 91E00100  LDS	R30,0x100
    0099 27FF      CLR	R31
    009A 0FE8      ADD	R30,R24
    009B 1FF9      ADC	R31,R25
    009C B02C      IN	R2,0x0C
    009D 8220      STD	Z+0,R2
(0042)       RecCount++;
    009E 91800100  LDS	R24,0x100
    00A0 5F8F      SUBI	R24,0xFF
    00A1 93800100  STS	0x100,R24
(0043) 	  if(RecCount >= FrameCount) RecCount = 0;
    00A3 308A      CPI	R24,0xA
    00A4 F018      BCS	0x00A8
    00A5 2422      CLR	R2
    00A6 92200100  STS	0x100,R2
(0044) }
    00A8 9029      LD	R2,Y+
    00A9 BE2F      OUT	0x3F,R2
    00AA 91F9      LD	R31,Y+
    00AB 91E9      LD	R30,Y+
    00AC 9199      LD	R25,Y+
    00AD 9189      LD	R24,Y+
    00AE 9029      LD	R2,Y+
    00AF 9518      RETI
_SendFrame0:
  m                    --> R20
  pTem                 --> R22
  CountFrame           --> R10
  Frame                --> R20
    00B0 940E0112  CALL	push_gset3
    00B2 2EA2      MOV	R10,R18
    00B3 01A8      MOVW	R20,R16
(0045) 
(0046) void SendFrame0(uchar *Frame,uchar CountFrame)
(0047) {
(0048)    uchar *pTem,m;
(0049)    pTem = Frame;
    00B4 01BA      MOVW	R22,R20
(0050)    Set485Send;
    00B5 91800065  LDS	R24,0x65
    00B7 7F8B      ANDI	R24,0xFB
    00B8 93800065  STS	0x65,R24
(0051)    Delay(100);
    00BA E604      LDI	R16,0x64
    00BB E010      LDI	R17,0
    00BC DFAB      RCALL	_Delay
(0052)    for(m=0;m<CountFrame;m++)
    00BD 2744      CLR	R20
    00BE C00A      RJMP	0x00C9
(0053)    {
(0054)       asm("WDR");
    00BF 95A8      WDR
(0055) 	  while (!(UCSR0A & (1<<UDRE0)));
    00C0 9B5D      SBIS	0x0B,5
    00C1 CFFE      RJMP	0x00C0
(0056)       asm("WDR");
    00C2 95A8      WDR
(0057) 	  UDR0 = *pTem;
    00C3 01FB      MOVW	R30,R22
    00C4 8020      LDD	R2,Z+0
    00C5 B82C      OUT	0x0C,R2
(0058)       pTem++;
    00C6 5F6F      SUBI	R22,0xFF
    00C7 4F7F      SBCI	R23,0xFF
    00C8 9543      INC	R20
    00C9 154A      CP	R20,R10
    00CA F3A0      BCS	0x00BF
(0059)    }
(0060)    Set485Rec;
    00CB 91800065  LDS	R24,0x65
    00CD 6084      ORI	R24,4
    00CE 93800065  STS	0x65,R24
(0061)    Delay(100);
    00D0 E604      LDI	R16,0x64
    00D1 E010      LDI	R17,0
    00D2 DF95      RCALL	_Delay
(0062) }
    00D3 940E00F4  CALL	pop_gset3
    00D5 9508      RET
(0063) 
(0064) void main(void)
(0065) {
(0066)    	 uchar m;
(0067) 	 for(m=0;m<10;m++)
_main:
  m                    --> R20
    00D6 2744      CLR	R20
    00D7 C00A      RJMP	0x00E2
(0068) 	 {
(0069) 	    SendComm[m]=0x30+m;
    00D8 E081      LDI	R24,1
    00D9 E091      LDI	R25,1
    00DA 2FE4      MOV	R30,R20
    00DB 27FF      CLR	R31
    00DC 0FE8      ADD	R30,R24
    00DD 1FF9      ADC	R31,R25
    00DE 2F84      MOV	R24,R20
    00DF 5D80      SUBI	R24,0xD0
    00E0 8380      STD	Z+0,R24
    00E1 9543      INC	R20
    00E2 304A      CPI	R20,0xA
    00E3 F3A0      BCS	0x00D8
(0070) 	 }
(0071) 	 DDRG |= (1<<2);
    00E4 91800064  LDS	R24,0x64
    00E6 6084      ORI	R24,4
    00E7 93800064  STS	0x64,R24
(0072) 	 SEI();
    00E9 9478      BSET	7
(0073) 	 Com0Init();
    00EA DF93      RCALL	_Com0Init
(0074) 	 SendFrame0(SendComm,10);
    00EB E02A      LDI	R18,0xA
    00EC E001      LDI	R16,1
    00ED E011      LDI	R17,1
    00EE DFC1      RCALL	_SendFrame0
(0075) 	 for(;;)
FILE: <library>
    00EF CFFF      RJMP	0x00EF
    00F0 9508      RET
pop_gset2:
    00F1 E0E2      LDI	R30,2
    00F2 940C00FB  JMP	pop
pop_gset3:
    00F4 E0E4      LDI	R30,4
    00F5 940C00FB  JMP	pop
push_gset1:
    00F7 935A      ST	R21,-Y
    00F8 934A      ST	R20,-Y
    00F9 9508      RET
pop_gset1:
    00FA E0E1      LDI	R30,1
pop:
    00FB 9149      LD	R20,Y+
    00FC 9159      LD	R21,Y+
    00FD FDE0      SBRC	R30,0
    00FE 9508      RET
    00FF 9169      LD	R22,Y+
    0100 9179      LD	R23,Y+
    0101 FDE1      SBRC	R30,1
    0102 9508      RET
    0103 90A9      LD	R10,Y+
    0104 90B9      LD	R11,Y+
    0105 FDE2      SBRC	R30,2
    0106 9508      RET
    0107 90C9      LD	R12,Y+
    0108 90D9      LD	R13,Y+
    0109 FDE3      SBRC	R30,3
    010A 9508      RET
    010B 90E9      LD	R14,Y+
    010C 90F9      LD	R15,Y+
    010D 9508      RET
push_gset2:
    010E 937A      ST	R23,-Y
    010F 936A      ST	R22,-Y
    0110 940C00F7  JMP	push_gset1
push_gset3:
    0112 92BA      ST	R11,-Y
    0113 92AA      ST	R10,-Y
    0114 940C010E  JMP	push_gset2

⌨️ 快捷键说明

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