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

📄 fas.lst

📁 用AVR单片机实现串口通讯功能
💻 LST
字号:
__start:
__text_start:
    0017 E5CF      LDI	R28,0x5F
    0018 E0D4      LDI	R29,4
    0019 BFCD      OUT	0x3D,R28
    001A BFDE      OUT	0x3E,R29
    001B 51C0      SUBI	R28,0x10
    001C 40D0      SBCI	R29,0
    001D EA0A      LDI	R16,0xAA
    001E 8308      STD	Y+0,R16
    001F 2400      CLR	R0
    0020 E6E7      LDI	R30,0x67
    0021 E0F0      LDI	R31,0
    0022 E010      LDI	R17,0
    0023 36EF      CPI	R30,0x6F
    0024 07F1      CPC	R31,R17
    0025 F011      BEQ	0x0028
    0026 9201      ST	R0,Z+
    0027 CFFB      RJMP	0x0023
    0028 8300      STD	Z+0,R16
    0029 E2E6      LDI	R30,0x26
    002A E0F0      LDI	R31,0
    002B E6A0      LDI	R26,0x60
    002C E0B0      LDI	R27,0
    002D E010      LDI	R17,0
    002E 32ED      CPI	R30,0x2D
    002F 07F1      CPC	R31,R17
    0030 F021      BEQ	0x0035
    0031 95C8      LPM
    0032 9631      ADIW	R30,1
    0033 920D      ST	R0,X+
    0034 CFF9      RJMP	0x002E
    0035 D050      RCALL	_main
_exit:
    0036 CFFF      RJMP	_exit
_delay:
  j                    --> R20
  x                    --> R16
    0037 D07B      RCALL	push_gset1
FILE: fas.c
(0001) /**********************************/
(0002) /*        汽车转速测量程序
(0003) /*           8.24,2004
(0004) /*        Writed by Wuxw
(0005) /*    Automation Depart. of WHUT
(0006) /*          芯片:ATMEGA8L
(0007) /*          晶振:2MHz
(0008) /*        
(0009) /*
(0010) /***********************************/
(0011) /*    脉冲输入接在INT0端口
(0012) /*    
(0013) /*    输出n,单位r/50ms,可用来计算车轮转速
(0014) /*
(0015) /*    num----脉冲计数,可用来计算里程    
(0016) /*
(0017) /*    485输出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
(0018) /*    
(0019) /*    numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
(0020) /*
(0021) /*    串口485通讯波特率baud = 9600
(0022) /*    
(0023) /*    在受到正确地址(0x32)和命令(0xc5)后,发送数据
(0024) /*
(0025) /***********************************/
(0026) 
(0027) 
(0028) 
(0029) #include "iom8v.h"  
(0030) #include "macros.h"
(0031) #define uchar unsigned char
(0032) #define uint unsigned int
(0033) #define ulong unsigned long
(0034) 
(0035) #define E2ADDRLL 0x000         //脉冲计数存放地址
(0036) #define E2ADDRLH 0x001    
(0037) #define E2ADDRHL 0x002      
(0038) #define E2ADDRHH 0x003     
(0039) //#define osccal 0x9d//内部RC 校正常数
(0040) #define osccal_addr 0x1ff
(0041) //#define osccal 0xa4       //内部RC校正常数
(0042) #define fosc 8000000      //晶振8MHZ
(0043) #define baud 9600         //串口通讯波特率
(0044) #define TIME50ms 0xae     //定时50ms的初装值
(0045) 
(0046) //#define osccal_addr 0x1ff
(0047) 
(0048) uint m,n,K,i;
(0049) //uchar ndata[7]={0xFB,0x86,0x00,0x11,0x22,0x33,044};
(0050) uchar ndata[7]={0xFB,0x86,0x55,0x55,0x55,0x55,0x55};
(0051) 
(0052) 
(0053) 
(0054) //最小延时单位,约16微秒
(0055) void delay(uint x)   
(0056) {   uchar j;
    0038 C005      RJMP	0x003E
(0057)     while(x-->0)
(0058) 	{
(0059)        for(j=0;j<5;j++)
    0039 2744      CLR	R20
    003A C001      RJMP	0x003C
    003B 9543      INC	R20
    003C 3045      CPI	R20,5
    003D F3E8      BCS	0x003B
    003E 0118      MOVW	R2,R16
    003F 5001      SUBI	R16,1
    0040 4010      SBCI	R17,0
    0041 2022      TST	R2
    0042 F7B1      BNE	0x0039
    0043 2033      TST	R3
    0044 F7A1      BNE	0x0039
(0060) 	   {;}
(0061)     }
(0062) }
    0045 D070      RCALL	pop_gset1
    0046 9508      RET
(0063) 
(0064) unsigned char EEPROM_read(unsigned int uiAddress)
(0065) {while(EECR&(1<<EEWE));
_EEPROM_read:
  uiAddress            --> R16
    0047 99E1      SBIC	0x1C,1
    0048 CFFE      RJMP	_EEPROM_read
(0066)  EEAR=uiAddress;
    0049 BB1F      OUT	0x1F,R17
    004A BB0E      OUT	0x1E,R16
(0067)  EECR|=(1<<EERE);
    004B 9AE0      SBI	0x1C,0
(0068)  return EEDR;
    004C B30D      IN	R16,0x1D
    004D 9508      RET
_uart0_tx_isr:
    004E 922A      ST	R2,-Y
    004F 923A      ST	R3,-Y
    0050 938A      ST	R24,-Y
    0051 939A      ST	R25,-Y
    0052 93EA      ST	R30,-Y
    0053 93FA      ST	R31,-Y
    0054 B62F      IN	R2,0x3F
    0055 922A      ST	R2,-Y
(0069) }
(0070) 
(0071) #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
(0072) void uart0_tx_isr(void)
(0073) {
(0074)           
(0075) if(K<6)
    0056 91800069  LDS	R24,_K
    0058 9190006A  LDS	R25,_K+1
    005A 3086      CPI	R24,6
    005B E0E0      LDI	R30,0
    005C 079E      CPC	R25,R30
    005D F480      BCC	0x006E
(0076)      {K=K+1;
    005E 9601      ADIW	R24,1
    005F 9390006A  STS	_K+1,R25
    0061 93800069  STS	_K,R24
(0077) 	 UDR=ndata[K];
    0063 E680      LDI	R24,0x60
    0064 E090      LDI	R25,0
    0065 91E00069  LDS	R30,_K
    0067 91F0006A  LDS	R31,_K+1
    0069 0FE8      ADD	R30,R24
    006A 1FF9      ADC	R31,R25
    006B 8020      LDD	R2,Z+0
    006C B82C      OUT	0x0C,R2
(0078) 	 }  
    006D C007      RJMP	0x0075
(0079)        
(0080)      else
(0081)     {
(0082) 	K=0;
    006E 2422      CLR	R2
    006F 2433      CLR	R3
    0070 9230006A  STS	_K+1,R3
    0072 92200069  STS	_K,R2
(0083) 	UCSRB&=~(1<<TXCIE);  //1?UART ?¤?é?¨a?D??
    0074 9856      CBI	0x0A,6
(0084) 	} 
(0085)      
(0086)      
(0087) }
    0075 9029      LD	R2,Y+
    0076 BE2F      OUT	0x3F,R2
    0077 91F9      LD	R31,Y+
    0078 91E9      LD	R30,Y+
    0079 9199      LD	R25,Y+
    007A 9189      LD	R24,Y+
    007B 9039      LD	R3,Y+
    007C 9029      LD	R2,Y+
    007D 9518      RETI
(0088) 
(0089) void USART_Init(void)    //串行初始化
(0090) {
(0091)    UCSRB|=(1<<TXEN);//允许发送
_USART_Init:
    007E 9A53      SBI	0x0A,3
(0092)   UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
    007F E384      LDI	R24,0x34
    0080 B989      OUT	0x09,R24
(0093)   UBRRH=(fosc/16/(baud+1))/256;
    0081 2422      CLR	R2
    0082 BC20      OUT	0x20,R2
(0094)   UCSRC=0x86;//8 位数据+1 位STOP 位
    0083 E886      LDI	R24,0x86
    0084 BD80      OUT	0x20,R24
(0095) }
    0085 9508      RET
(0096) 
(0097) void main(void)
(0098) {
(0099)     delay(200);
_main:
    0086 EC08      LDI	R16,0xC8
    0087 E010      LDI	R17,0
    0088 DFAE      RCALL	_delay
(0100)     OSCCAL=EEPROM_read(osccal_addr); 
    0089 EF0F      LDI	R16,0xFF
    008A E011      LDI	R17,1
    008B DFBB      RCALL	_EEPROM_read
    008C BF01      OUT	0x31,R16
(0101) 	 //OSCCAL=osccal;
(0102) 	 
(0103) 	 PORTD|=(1<<PORTD7);
    008D 9A97      SBI	0x12,7
(0104) 	 USART_Init();
    008E DFEF      RCALL	_USART_Init
(0105) 	
(0106) 	DDRD|=0x80;
    008F 9A8F      SBI	0x11,7
(0107) 	
(0108) 	SEI();
    0090 9478      BSET	7
    0091 C01F      RJMP	0x00B1
(0109) 	 
(0110) 	 
(0111) 	 while(1)
(0112) 	{
(0113) 	UCSRB|=(1<<TXCIE);
    0092 9A56      SBI	0x0A,6
(0114) 	UDR=ndata[0];
    0093 90200060  LDS	R2,0x60
    0095 B82C      OUT	0x0C,R2
(0115)     for(i=0;i<250;i++)
    0096 2422      CLR	R2
    0097 2433      CLR	R3
    0098 92300068  STS	_i+1,R3
    009A 92200067  STS	_i,R2
    009C C00C      RJMP	0x00A9
(0116) 	{delay(1000);}
    009D EE08      LDI	R16,0xE8
    009E E013      LDI	R17,3
    009F DF97      RCALL	_delay
    00A0 91800067  LDS	R24,_i
    00A2 91900068  LDS	R25,_i+1
    00A4 9601      ADIW	R24,1
    00A5 93900068  STS	_i+1,R25
    00A7 93800067  STS	_i,R24
    00A9 91800067  LDS	R24,_i
    00AB 91900068  LDS	R25,_i+1
    00AD 3F8A      CPI	R24,0xFA
    00AE E0E0      LDI	R30,0
    00AF 079E      CPC	R25,R30
    00B0 F360      BCS	0x009D
    00B1 CFE0      RJMP	0x0092
(0117) 	 
(0118)     }
(0119) }	
FILE: <library>
    00B2 9508      RET
push_gset1:
    00B3 935A      ST	R21,-Y
    00B4 934A      ST	R20,-Y
    00B5 9508      RET
pop_gset1:
    00B6 E0E1      LDI	R30,1
pop:
    00B7 9149      LD	R20,Y+
    00B8 9159      LD	R21,Y+
    00B9 FDE0      SBRC	R30,0
    00BA 9508      RET
    00BB 9169      LD	R22,Y+
    00BC 9179      LD	R23,Y+
    00BD FDE1      SBRC	R30,1
    00BE 9508      RET
    00BF 90A9      LD	R10,Y+
    00C0 90B9      LD	R11,Y+
    00C1 FDE2      SBRC	R30,2
    00C2 9508      RET
    00C3 90C9      LD	R12,Y+
    00C4 90D9      LD	R13,Y+
    00C5 FDE3      SBRC	R30,3
    00C6 9508      RET
    00C7 90E9      LD	R14,Y+
    00C8 90F9      LD	R15,Y+
    00C9 9508      RET

⌨️ 快捷键说明

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