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

📄 main.lis

📁 基于avr的MODBUS例程
💻 LIS
字号:
                        .module main.c
                        .area vector(rom, abs)
                        .org 36
 0024 0C940000          jmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0000                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
 0000                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
                        .even
 0000           _timer0_ovf_isr::
 0000 2A92              st -y,R2
 0002 3A92              st -y,R3
 0004 4A92              st -y,R4
 0006 5A92              st -y,R5
 0008 8A93              st -y,R24
 000A 9A93              st -y,R25
 000C AA93              st -y,R26
 000E BA93              st -y,R27
 0010 EA93              st -y,R30
 0012 2FB6              in R2,0x3f
 0014 2A92              st -y,R2
 0016 0E940000          xcall push_gset2
 001A                   .dbline -1
 001A                   .dbline 25
 001A           ; //ICC-AVR application builder : 2004-10-27 10:06:29
 001A           ; // Target : M16
 001A           ; // Crystal: 8.0000Mhz
 001A           ; 
 001A           ; /*****************************************************
 001A           ; 微控电子 www.mcuc.cn
 001A           ; modbus RTU 的mega16程序,使用ICCAVR编译
 001A           ; 单片机mega16
 001A           ; 通信波特率 9600 8位数据 1位停止位 偶校验 485通位接口
 001A           ; 单片机控制板地址 localAddr(变量)
 001A           ; 通信可设置数据的地址:
 001A           ; 字地址 0 - 255 (只取16位的低8位)
 001A           ; 位地址 0 - 255 (只取16位的低8位)
 001A           ; ******************************************************/
 001A           ; 
 001A           ; 
 001A           ; #include "main.h"
 001A           ; 
 001A           ; uint32 tickCount,intTickCount;
 001A           ; uint8 flag1ms,c200ms;
 001A           ; 
 001A           ; #pragma interrupt_handler timer0_ovf_isr:10
 001A           ; //定时器0 1ms定时中断
 001A           ; void timer0_ovf_isr(void)
 001A           ; {
 001A                   .dbline 26
 001A           ;  TCNT0 = 0x83;
 001A 83E8              ldi R24,131
 001C 82BF              out 0x32,R24
 001E                   .dbline 27
 001E           ;  intTickCount++;
 001E 41E0              ldi R20,1
 0020 50E0              ldi R21,0
 0022 60E0              ldi R22,0
 0024 70E0              ldi R23,0
 0026 40900700          lds R4,_intTickCount+2
 002A 50900800          lds R5,_intTickCount+2+1
 002E 20900500          lds R2,_intTickCount
 0032 30900600          lds R3,_intTickCount+1
 0036 240E              add R2,R20
 0038 351E              adc R3,R21
 003A 461E              adc R4,R22
 003C 571E              adc R5,R23
 003E 30920600          sts _intTickCount+1,R3
 0042 20920500          sts _intTickCount,R2
 0046 50920800          sts _intTickCount+2+1,R5
 004A 40920700          sts _intTickCount+2,R4
 004E                   .dbline 28
 004E           ;  flag1ms = 1; //1ms 时间到
 004E 81E0              ldi R24,1
 0050 80930400          sts _flag1ms,R24
 0054                   .dbline -2
 0054                   .dbline 40
 0054           ;  
 0054           ; /*
 0054           ;  if(adcCount<=SAMPLECOUNT-1 && adcCount>=0)
 0054           ;       adcData[adcCount] = ADC & 0x3ff; //读取AD数据
 0054           ;  if(adcCount >= 0)
 0054           ;  {
 0054           ;     ADMUX = 0xc0 |(adcMux&0x0f); 
 0054           ;       ADCSR |= 1 << ADSC; //启动ADC 
 0054           ;       adcCount--;
 0054           ;  }
 0054           ; */  
 0054           ; }//void timer0_ovf_isr(void)
 0054           L1:
 0054 0E940000          xcall pop_gset2
 0058 2990              ld R2,y+
 005A 2FBE              out 0x3f,R2
 005C E991              ld R30,y+
 005E B991              ld R27,y+
 0060 A991              ld R26,y+
 0062 9991              ld R25,y+
 0064 8991              ld R24,y+
 0066 5990              ld R5,y+
 0068 4990              ld R4,y+
 006A 3990              ld R3,y+
 006C 2990              ld R2,y+
 006E                   .dbline 0 ; func end
 006E 1895              reti
 0070                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
 0000           L3:
 0000                   .blkb 2
 0002           L4:
 0002                   .blkb 1
                        .area text(rom, con, rel)
 0070                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
 0070                   .dbfunc e timeProc _timeProc fV
 0070                   .dbsym s i L4 c
 0070                   .dbsym s second L3 i
                        .even
 0070           _timeProc::
 0070                   .dbline -1
 0070                   .dbline 43
 0070           ; 
 0070           ; void timeProc(void)
 0070           ; {
 0070                   .dbline 47
 0070           ;  static uint16 second;
 0070           ;  static uint8 i;
 0070           ;  
 0070           ;  if(flag1ms == 1)
 0070 80910400          lds R24,_flag1ms
 0074 8130              cpi R24,1
 0076 09F0              breq X0
 0078 52C0              xjmp L5
 007A           X0:
 007A                   .dbline 48
 007A           ;  {
 007A                   .dbline 49
 007A           ;   flag1ms = 0; 
 007A 2224              clr R2
 007C 20920400          sts _flag1ms,R2
 0080                   .dbline 50
 0080           ;   CLI();
 0080 F894              cli
 0082                   .dbline 51
 0082           ;   tickCount = intTickCount;
 0082 40900700          lds R4,_intTickCount+2
 0086 50900800          lds R5,_intTickCount+2+1
 008A 20900500          lds R2,_intTickCount
 008E 30900600          lds R3,_intTickCount+1
 0092 30920A00          sts _tickCount+1,R3
 0096 20920900          sts _tickCount,R2
 009A 50920C00          sts _tickCount+2+1,R5
 009E 40920B00          sts _tickCount+2,R4
 00A2                   .dbline 52
 00A2           ;   SEI();
 00A2 7894              sei
 00A4                   .dbline 54
 00A4           ;   
 00A4           ;    if(receTimeOut>0)
 00A4 2224              clr R2
 00A6 30900000          lds R3,_receTimeOut
 00AA 2314              cp R2,R3
 00AC 78F4              brsh L7
 00AE                   .dbline 55
 00AE           ;    {
 00AE                   .dbline 56
 00AE           ;        receTimeOut--;
 00AE 832D              mov R24,R3
 00B0 8150              subi R24,1
 00B2 80930000          sts _receTimeOut,R24
 00B6                   .dbline 57
 00B6           ;        if(receTimeOut==0 && receCount>0)   //判断通讯接收是否超时
 00B6 8823              tst R24
 00B8 49F4              brne L9
 00BA 30900000          lds R3,_receCount
 00BE 2314              cp R2,R3
 00C0 28F4              brsh L9
 00C2                   .dbline 58
 00C2           ;        {
 00C2                   .dbline 59
 00C2           ;            receEnable();       //将485置为接收状态
 00C2 C798              cbi 0x18,7
 00C4                   .dbline 60
 00C4           ;            receCount = 0;      //将接收地址偏移寄存器清零
 00C4 20920000          sts _receCount,R2
 00C8                   .dbline 61
 00C8           ;                  checkoutError = 0;
 00C8 20920000          sts _checkoutError,R2
 00CC                   .dbline 62
 00CC           ;        }
 00CC           L9:
 00CC                   .dbline 63
 00CC           ;    }
 00CC           L7:
 00CC                   .dbline 65
 00CC           ;   
 00CC           ;   c200ms++;
 00CC 80910300          lds R24,_c200ms
 00D0 8F5F              subi R24,255    ; addi 1
 00D2 80930300          sts _c200ms,R24
 00D6                   .dbline 66
 00D6           ;   if(c200ms > 100)
 00D6 84E6              ldi R24,100
 00D8 20900300          lds R2,_c200ms
 00DC 8215              cp R24,R2
 00DE 38F4              brsh L11
 00E0                   .dbline 67
 00E0           ;   {
 00E0                   .dbline 68
 00E0           ;    c200ms = 0; 
 00E0 2224              clr R2
 00E2 20920300          sts _c200ms,R2
 00E6                   .dbline 69
 00E6           ;    blinkLed(); //运行指示灯闪烁  
 00E6 80E4              ldi R24,64
 00E8 28B2              in R2,0x18
 00EA 2826              eor R2,R24
 00EC 28BA              out 0x18,R2
 00EE                   .dbline 70
 00EE           ;   }
 00EE           L11:
 00EE                   .dbline 72
 00EE           ;   
 00EE           ;   second++;
 00EE 80910000          lds R24,L3
 00F2 90910100          lds R25,L3+1
 00F6 0196              adiw R24,1
 00F8 90930100          sts L3+1,R25
 00FC 80930000          sts L3,R24
 0100                   .dbline 73
 0100           ;   if(second > 10000)
 0100 80E1              ldi R24,10000
 0102 97E2              ldi R25,39
 0104 20900000          lds R2,L3
 0108 30900100          lds R3,L3+1
 010C 8215              cp R24,R2
 010E 9305              cpc R25,R3
 0110 30F4              brsh L13
 0112                   .dbline 74
 0112           ;   { 
 0112                   .dbline 75
 0112           ;      second = 0;  
 0112 2224              clr R2
 0114 3324              clr R3
 0116 30920100          sts L3+1,R3
 011A 20920000          sts L3,R2
 011E                   .dbline 76
 011E           ;   } 
 011E           L13:
 011E                   .dbline 77
 011E           L5:
 011E                   .dbline -2
 011E                   .dbline 78
 011E           ;  }
 011E           ; }//void timeProc(void)
 011E           L2:
 011E                   .dbline 0 ; func end
 011E 0895              ret
 0120                   .dbend
 0120                   .dbfunc e main _main fV
 0120           ;              i -> R20,R21
                        .even
 0120           _main::
 0120                   .dbline -1
 0120                   .dbline 81
 0120           ; 
 0120           ; void main(void)
 0120           ; {
 0120                   .dbline 84
 0120           ;  int16 i;
 0120           ;  
 0120           ;  varInit();
 0120 0E940000          xcall _varInit
 0124                   .dbline 85
 0124           ;  init_devices();
 0124 0E940000          xcall _init_devices
 0128                   .dbline 88
 0128           ;  
 0128           ;  //重新采样
 0128           ;  CLI();       
 0128 F894              cli
 012A                   .dbline 89
 012A           ;  SEI(); 
 012A 7894              sei
 012C                   .dbline 91
 012C           ;   
 012C           ;  for(i=0;i<400;i++)
 012C 4427              clr R20
 012E 5527              clr R21
 0130           L16:
 0130                   .dbline 92
 0130                   .dbline 94
 0130           L17:
 0130                   .dbline 91
 0130 4F5F              subi R20,255  ; offset = 1
 0132 5F4F              sbci R21,255
 0134                   .dbline 91
 0134 4039              cpi R20,144
 0136 E1E0              ldi R30,1
 0138 5E07              cpc R21,R30
 013A D4F3              brlt L16
 013C 04C0              xjmp L21
 013E           L20:
 013E                   .dbline 97
 013E                   .dbline 98
 013E A895              wdr
 0140                   .dbline 100
 0140 97DF              xcall _timeProc
 0142                   .dbline 101
 0142 0E940000          xcall _checkComm0Modbus
 0146                   .dbline 103
 0146           L21:
 0146                   .dbline 96
 0146 FBCF              xjmp L20
 0148           X1:
 0148                   .dbline -2
 0148                   .dbline 104
 0148           ;  {
 0148           ; 
 0148           ;  }
 0148           ;                
 0148           ;  while(1)
 0148           ;  { 
 0148           ;   WDR(); //this prevents a timout on enabling         
 0148           ;   
 0148           ;   timeProc(); 
 0148           ;   checkComm0Modbus();  
 0148           ;  
 0148           ;  }
 0148           ; }
 0148           L15:
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbsym r i 20 I
 014A                   .dbend
                        .area bss(ram, con, rel)
 0003                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\main.c
 0003           _c200ms::
 0003                   .blkb 1
 0004                   .dbsym e c200ms _c200ms c
 0004           _flag1ms::
 0004                   .blkb 1
 0005                   .dbsym e flag1ms _flag1ms c
 0005           _intTickCount::
 0005                   .blkb 4
 0009                   .dbsym e intTickCount _intTickCount l
 0009           _tickCount::
 0009                   .blkb 4
 000D                   .dbsym e tickCount _tickCount l

⌨️ 快捷键说明

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