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

📄 fas.lis

📁 用AVR单片机实现串口通讯功能
💻 LIS
字号:
                        .module fas.c
                        .area data(ram, con, rel)
 0000           _ndata::
 0000                   .blkb 2
                        .area idata
 0000 FB86              .byte 251,134
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 5555              .byte 'U,'U
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 5555              .byte 'U,'U
                        .area data(ram, con, rel)
 0006                   .blkb 1
                        .area idata
 0006 55                .byte 'U
                        .area data(ram, con, rel)
 0007                   .dbfile fas.c
 0007                   .dbsym e ndata _ndata A[7:7]c
                        .area text(rom, con, rel)
 0000                   .dbfile fas.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              j -> R20
 0000           ;              x -> R16,R17
                        .even
 0000           _delay::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 56
 0002           ; /**********************************/
 0002           ; /*        汽车转速测量程序
 0002           ; /*           8.24,2004
 0002           ; /*        Writed by Wuxw
 0002           ; /*    Automation Depart. of WHUT
 0002           ; /*          芯片:ATMEGA8L
 0002           ; /*          晶振:2MHz
 0002           ; /*        
 0002           ; /*
 0002           ; /***********************************/
 0002           ; /*    脉冲输入接在INT0端口
 0002           ; /*    
 0002           ; /*    输出n,单位r/50ms,可用来计算车轮转速
 0002           ; /*
 0002           ; /*    num----脉冲计数,可用来计算里程    
 0002           ; /*
 0002           ; /*    485输出格式:FB-86-n-numLL-numLH-numHL-numHH-checksum
 0002           ; /*    
 0002           ; /*    numLL-numLH-numHL-numHH分别为num的四个字节(L为低字节,H为高字节)
 0002           ; /*
 0002           ; /*    串口485通讯波特率baud = 9600
 0002           ; /*    
 0002           ; /*    在受到正确地址(0x32)和命令(0xc5)后,发送数据
 0002           ; /*
 0002           ; /***********************************/
 0002           ; 
 0002           ; 
 0002           ; 
 0002           ; #include "iom8v.h"  
 0002           ; #include "macros.h"
 0002           ; #define uchar unsigned char
 0002           ; #define uint unsigned int
 0002           ; #define ulong unsigned long
 0002           ; 
 0002           ; #define E2ADDRLL 0x000         //脉冲计数存放地址
 0002           ; #define E2ADDRLH 0x001    
 0002           ; #define E2ADDRHL 0x002      
 0002           ; #define E2ADDRHH 0x003     
 0002           ; //#define osccal 0x9d//内部RC 校正常数
 0002           ; #define osccal_addr 0x1ff
 0002           ; //#define osccal 0xa4       //内部RC校正常数
 0002           ; #define fosc 8000000      //晶振8MHZ
 0002           ; #define baud 9600         //串口通讯波特率
 0002           ; #define TIME50ms 0xae     //定时50ms的初装值
 0002           ; 
 0002           ; //#define osccal_addr 0x1ff
 0002           ; 
 0002           ; uint m,n,K,i;
 0002           ; //uchar ndata[7]={0xFB,0x86,0x00,0x11,0x22,0x33,044};
 0002           ; uchar ndata[7]={0xFB,0x86,0x55,0x55,0x55,0x55,0x55};
 0002           ; 
 0002           ; 
 0002           ; 
 0002           ; //最小延时单位,约16微秒
 0002           ; void delay(uint x)   
 0002           ; {   uchar j;
 0002 05C0              rjmp L3
 0004           L2:
 0004                   .dbline 58
 0004           ;     while(x-->0)
 0004           ;       {
 0004                   .dbline 59
 0004           ;        for(j=0;j<5;j++)
 0004 4427              clr R20
 0006 01C0              rjmp L8
 0008           L5:
 0008                   .dbline 60
 0008                   .dbline 60
 0008                   .dbline 60
 0008           L6:
 0008                   .dbline 59
 0008 4395              inc R20
 000A           L8:
 000A                   .dbline 59
 000A 4530              cpi R20,5
 000C E8F3              brlo L5
 000E                   .dbline 61
 000E           L3:
 000E                   .dbline 57
 000E 1801              movw R2,R16
 0010 0150              subi R16,1
 0012 1040              sbci R17,0
 0014 2220              tst R2
 0016 B1F7              brne L2
 0018 3320              tst R3
 001A A1F7              brne L2
 001C           X0:
 001C                   .dbline -2
 001C                   .dbline 62
 001C           ;          {;}
 001C           ;     }
 001C           ; }
 001C           L1:
 001C 00D0              rcall pop_gset1
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r j 20 c
 0020                   .dbsym r x 16 i
 0020                   .dbend
 0020                   .dbfunc e EEPROM_read _EEPROM_read fc
 0020           ;      uiAddress -> R16,R17
                        .even
 0020           _EEPROM_read::
 0020                   .dbline -1
 0020                   .dbline 65
 0020           L10:
 0020                   .dbline 65
 0020           L11:
 0020                   .dbline 65
 0020           ; 
 0020           ; unsigned char EEPROM_read(unsigned int uiAddress)
 0020           ; {while(EECR&(1<<EEWE));
 0020 E199              sbic 0x1c,1
 0022 FECF              rjmp L10
 0024                   .dbline 66
 0024           ;  EEAR=uiAddress;
 0024 1FBB              out 0x1f,R17
 0026 0EBB              out 0x1e,R16
 0028                   .dbline 67
 0028           ;  EECR|=(1<<EERE);
 0028 E09A              sbi 0x1c,0
 002A                   .dbline 68
 002A           ;  return EEDR;
 002A 0DB3              in R16,0x1d
 002C                   .dbline -2
 002C           L9:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbsym r uiAddress 16 i
 002E                   .dbend
                        .area vector(rom, abs)
                        .org 26
 001A 17C0              rjmp _uart0_tx_isr
                        .area text(rom, con, rel)
 002E                   .dbfile fas.c
 002E                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 002E           _uart0_tx_isr::
 002E 2A92              st -y,R2
 0030 3A92              st -y,R3
 0032 8A93              st -y,R24
 0034 9A93              st -y,R25
 0036 EA93              st -y,R30
 0038 FA93              st -y,R31
 003A 2FB6              in R2,0x3f
 003C 2A92              st -y,R2
 003E                   .dbline -1
 003E                   .dbline 73
 003E           ; }
 003E           ; 
 003E           ; #pragma interrupt_handler uart0_tx_isr:iv_USART_TXC
 003E           ; void uart0_tx_isr(void)
 003E           ; {
 003E                   .dbline 75
 003E           ;           
 003E           ; if(K<6)
 003E 80910200          lds R24,_K
 0042 90910300          lds R25,_K+1
 0046 8630              cpi R24,6
 0048 E0E0              ldi R30,0
 004A 9E07              cpc R25,R30
 004C 80F4              brsh L14
 004E                   .dbline 76
 004E           ;      {K=K+1;
 004E                   .dbline 76
 004E 0196              adiw R24,1
 0050 90930300          sts _K+1,R25
 0054 80930200          sts _K,R24
 0058                   .dbline 77
 0058           ;        UDR=ndata[K];
 0058 80E0              ldi R24,<_ndata
 005A 90E0              ldi R25,>_ndata
 005C E0910200          lds R30,_K
 0060 F0910300          lds R31,_K+1
 0064 E80F              add R30,R24
 0066 F91F              adc R31,R25
 0068 2080              ldd R2,z+0
 006A 2CB8              out 0xc,R2
 006C                   .dbline 78
 006C           ;        }  
 006C 07C0              rjmp L15
 006E           L14:
 006E                   .dbline 81
 006E                   .dbline 82
 006E 2224              clr R2
 0070 3324              clr R3
 0072 30920300          sts _K+1,R3
 0076 20920200          sts _K,R2
 007A                   .dbline 83
 007A 5698              cbi 0xa,6
 007C                   .dbline 84
 007C           L15:
 007C                   .dbline -2
 007C                   .dbline 87
 007C           ;        
 007C           ;      else
 007C           ;     {
 007C           ;       K=0;
 007C           ;       UCSRB&=~(1<<TXCIE);  //1?UART ?¤?é?¨a?D??
 007C           ;       } 
 007C           ;      
 007C           ;      
 007C           ; }
 007C           L13:
 007C 2990              ld R2,y+
 007E 2FBE              out 0x3f,R2
 0080 F991              ld R31,y+
 0082 E991              ld R30,y+
 0084 9991              ld R25,y+
 0086 8991              ld R24,y+
 0088 3990              ld R3,y+
 008A 2990              ld R2,y+
 008C                   .dbline 0 ; func end
 008C 1895              reti
 008E                   .dbend
 008E                   .dbfunc e USART_Init _USART_Init fV
                        .even
 008E           _USART_Init::
 008E                   .dbline -1
 008E                   .dbline 90
 008E           ; 
 008E           ; void USART_Init(void)    //串行初始化
 008E           ; {
 008E                   .dbline 91
 008E           ;    UCSRB|=(1<<TXEN);//允许发送
 008E 539A              sbi 0xa,3
 0090                   .dbline 92
 0090           ;   UBRRL=(fosc/16/(baud+1))%256; //波特率的设置
 0090 84E3              ldi R24,52
 0092 89B9              out 0x9,R24
 0094                   .dbline 93
 0094           ;   UBRRH=(fosc/16/(baud+1))/256;
 0094 2224              clr R2
 0096 20BC              out 0x20,R2
 0098                   .dbline 94
 0098           ;   UCSRC=0x86;//8 位数据+1 位STOP 位
 0098 86E8              ldi R24,134
 009A 80BD              out 0x20,R24
 009C                   .dbline -2
 009C                   .dbline 95
 009C           ; }
 009C           L16:
 009C                   .dbline 0 ; func end
 009C 0895              ret
 009E                   .dbend
 009E                   .dbfunc e main _main fV
                        .even
 009E           _main::
 009E                   .dbline -1
 009E                   .dbline 98
 009E           ; 
 009E           ; void main(void)
 009E           ; {
 009E                   .dbline 99
 009E           ;     delay(200);
 009E 08EC              ldi R16,200
 00A0 10E0              ldi R17,0
 00A2 AEDF              rcall _delay
 00A4                   .dbline 100
 00A4           ;     OSCCAL=EEPROM_read(osccal_addr); 
 00A4 0FEF              ldi R16,511
 00A6 11E0              ldi R17,1
 00A8 BBDF              rcall _EEPROM_read
 00AA 01BF              out 0x31,R16
 00AC                   .dbline 103
 00AC           ;        //OSCCAL=osccal;
 00AC           ;        
 00AC           ;        PORTD|=(1<<PORTD7);
 00AC 979A              sbi 0x12,7
 00AE                   .dbline 104
 00AE           ;        USART_Init();
 00AE EFDF              rcall _USART_Init
 00B0                   .dbline 106
 00B0           ;       
 00B0           ;       DDRD|=0x80;
 00B0 8F9A              sbi 0x11,7
 00B2                   .dbline 108
 00B2           ;       
 00B2           ;       SEI();
 00B2 7894              sei
 00B4 1FC0              rjmp L19
 00B6           L18:
 00B6                   .dbline 112
 00B6           ;        
 00B6           ;        
 00B6           ;        while(1)
 00B6           ;       {
 00B6                   .dbline 113
 00B6           ;       UCSRB|=(1<<TXCIE);
 00B6 569A              sbi 0xa,6
 00B8                   .dbline 114
 00B8           ;       UDR=ndata[0];
 00B8 20900000          lds R2,_ndata
 00BC 2CB8              out 0xc,R2
 00BE                   .dbline 115
 00BE           ;     for(i=0;i<250;i++)
 00BE 2224              clr R2
 00C0 3324              clr R3
 00C2 30920100          sts _i+1,R3
 00C6 20920000          sts _i,R2
 00CA 0CC0              rjmp L24
 00CC           L21:
 00CC                   .dbline 116
 00CC                   .dbline 116
 00CC 08EE              ldi R16,1000
 00CE 13E0              ldi R17,3
 00D0 97DF              rcall _delay
 00D2                   .dbline 116
 00D2           L22:
 00D2                   .dbline 115
 00D2 80910000          lds R24,_i
 00D6 90910100          lds R25,_i+1
 00DA 0196              adiw R24,1
 00DC 90930100          sts _i+1,R25
 00E0 80930000          sts _i,R24
 00E4           L24:
 00E4                   .dbline 115
 00E4 80910000          lds R24,_i
 00E8 90910100          lds R25,_i+1
 00EC 8A3F              cpi R24,250
 00EE E0E0              ldi R30,0
 00F0 9E07              cpc R25,R30
 00F2 60F3              brlo L21
 00F4                   .dbline 118
 00F4           L19:
 00F4                   .dbline 111
 00F4 E0CF              rjmp L18
 00F6           X1:
 00F6                   .dbline -2
 00F6                   .dbline 119
 00F6           ;       {delay(1000);}
 00F6           ;        
 00F6           ;     }
 00F6           ; }     
 00F6           L17:
 00F6                   .dbline 0 ; func end
 00F6 0895              ret
 00F8                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile fas.c
 0000           _i::
 0000                   .blkb 2
 0002                   .dbsym e i _i i
 0002           _K::
 0002                   .blkb 2
 0004                   .dbsym e K _K i
 0004           _n::
 0004                   .blkb 2
 0006                   .dbsym e n _n i
 0006           _m::
 0006                   .blkb 2
 0008                   .dbsym e m _m i

⌨️ 快捷键说明

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