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

📄 init.lis

📁 modbus RTU 的AVR单片机C语言程序。 单片机mega16,编译器ICCAVR。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .area vector(rom, abs)
                        .org 44
 002C 0C943400          jmp _uart0_rx_isr
                        .area text(rom, con, rel)
 0068                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\init.c
 0068                   .dbfunc e uart0_rx_isr _uart0_rx_isr fV
 0068           ;         status -> R16
                        .even
 0068           _uart0_rx_isr::
 0068 2A92              st -y,R2
 006A 0A93              st -y,R16
 006C 8A93              st -y,R24
 006E 9A93              st -y,R25
 0070 EA93              st -y,R30
 0072 FA93              st -y,R31
 0074 2FB6              in R2,0x3f
 0076 2A92              st -y,R2
 0078                   .dbline -1
 0078                   .dbline 75
 0078           ; 
 0078           ; #pragma interrupt_handler uart0_rx_isr:12
 0078           ; void uart0_rx_isr(void)
 0078           ; {
 0078                   .dbline 79
 0078           ;       uint8 status;
 0078           ;       
 0078           ;  //uart has received a character in UDR
 0078           ;       status = UCSRA;
 0078 0BB1              in R16,0xb
 007A                   .dbline 80
 007A           ;     receBuf[receCount] = UDR;
 007A 80E0              ldi R24,<_receBuf
 007C 90E0              ldi R25,>_receBuf
 007E E0910000          lds R30,_receCount
 0082 FF27              clr R31
 0084 E80F              add R30,R24
 0086 F91F              adc R31,R25
 0088 2CB0              in R2,0xc
 008A 2082              std z+0,R2
 008C                   .dbline 82
 008C           ;       
 008C           ;     if(status & 0x1c)  //通信出错
 008C 802F              mov R24,R16
 008E 8C71              andi R24,28
 0090 19F0              breq L8
 0092                   .dbline 83
 0092           ;        checkoutError = 2;     //偶校验出错
 0092 82E0              ldi R24,2
 0094 80930000          sts _checkoutError,R24
 0098           L8:
 0098                   .dbline 86
 0098           ; 
 0098           ;       //testRegister = status;                 
 0098           ;     receCount++;          //接收地址偏移寄存器加1
 0098 80910000          lds R24,_receCount
 009C 8F5F              subi R24,255    ; addi 1
 009E 80930000          sts _receCount,R24
 00A2                   .dbline 87
 00A2           ;     receCount &= 0x1f;    //最多一次只能接收32个字节 
 00A2 8F71              andi R24,31
 00A4 80930000          sts _receCount,R24
 00A8                   .dbline 88
 00A8           ;     receTimeOut = 10;    //通讯超时值 
 00A8 8AE0              ldi R24,10
 00AA 80930000          sts _receTimeOut,R24
 00AE                   .dbline -2
 00AE                   .dbline 89
 00AE           ; }
 00AE           L7:
 00AE 2990              ld R2,y+
 00B0 2FBE              out 0x3f,R2
 00B2 F991              ld R31,y+
 00B4 E991              ld R30,y+
 00B6 9991              ld R25,y+
 00B8 8991              ld R24,y+
 00BA 0991              ld R16,y+
 00BC 2990              ld R2,y+
 00BE                   .dbline 0 ; func end
 00BE 1895              reti
 00C0                   .dbsym r status 16 c
 00C0                   .dbend
                        .area vector(rom, abs)
                        .org 52
 0034 0C946000          jmp _uart0_tx_isr
                        .area text(rom, con, rel)
 00C0                   .dbfile E:\我的网页\mcuc\download\M16-23板程序模板\新建文件夹\init.c
 00C0                   .dbfunc e uart0_tx_isr _uart0_tx_isr fV
                        .even
 00C0           _uart0_tx_isr::
 00C0 2A92              st -y,R2
 00C2 3A92              st -y,R3
 00C4 8A93              st -y,R24
 00C6 9A93              st -y,R25
 00C8 EA93              st -y,R30
 00CA FA93              st -y,R31
 00CC 2FB6              in R2,0x3f
 00CE 2A92              st -y,R2
 00D0                   .dbline -1
 00D0                   .dbline 93
 00D0           ; 
 00D0           ; #pragma interrupt_handler uart0_tx_isr:14
 00D0           ; void uart0_tx_isr(void)
 00D0           ; {
 00D0                   .dbline 95
 00D0           ;  //character has been transmitted
 00D0           ;     if(sendPosi < sendCount) 
 00D0 20900000          lds R2,_sendCount
 00D4 30900000          lds R3,_sendPosi
 00D8 3214              cp R3,R2
 00DA 70F4              brsh L11
 00DC                   .dbline 96
 00DC           ;     {
 00DC                   .dbline 97
 00DC           ;         sendPosi++;
 00DC 832D              mov R24,R3
 00DE 8F5F              subi R24,255    ; addi 1
 00E0 80930000          sts _sendPosi,R24
 00E4                   .dbline 98
 00E4           ;         UDR = sendBuf[sendPosi];
 00E4 80E0              ldi R24,<_sendBuf
 00E6 90E0              ldi R25,>_sendBuf
 00E8 E0910000          lds R30,_sendPosi
 00EC FF27              clr R31
 00EE E80F              add R30,R24
 00F0 F91F              adc R31,R25
 00F2 2080              ldd R2,z+0
 00F4 2CB8              out 0xc,R2
 00F6                   .dbline 99
 00F6           ;     }
 00F6 06C0              xjmp L12
 00F8           L11:
 00F8                   .dbline 101
 00F8                   .dbline 102
 00F8 C798              cbi 0x18,7
 00FA                   .dbline 103
 00FA 2224              clr R2
 00FC 20920000          sts _receCount,R2
 0100                   .dbline 104
 0100 20920000          sts _checkoutError,R2
 0104                   .dbline 105
 0104           L12:
 0104                   .dbline -2
 0104                   .dbline 106
 0104           ;     else
 0104           ;     {
 0104           ;         receEnable();    //发送完后将485置于接收状态
 0104           ;         receCount = 0;   //清接收地址偏移寄存器
 0104           ;         checkoutError = 0;
 0104           ;     } 
 0104           ; }
 0104           L10:
 0104 2990              ld R2,y+
 0106 2FBE              out 0x3f,R2
 0108 F991              ld R31,y+
 010A E991              ld R30,y+
 010C 9991              ld R25,y+
 010E 8991              ld R24,y+
 0110 3990              ld R3,y+
 0112 2990              ld R2,y+
 0114                   .dbline 0 ; func end
 0114 1895              reti
 0116                   .dbend
 0116                   .dbfunc e init_devices _init_devices fV
                        .even
 0116           _init_devices::
 0116                   .dbline -1
 0116                   .dbline 110
 0116           ; 
 0116           ; //call this routine to initialise all peripherals
 0116           ; void init_devices(void)
 0116           ; {
 0116                   .dbline 112
 0116           ;  //stop errant interrupts until set up
 0116           ;  CLI(); //disable all interrupts
 0116 F894              cli
 0118                   .dbline 113
 0118           ;  port_init();
 0118 74DF              xcall _port_init
 011A                   .dbline 114
 011A           ;  watchdog_init(); 
 011A 82DF              xcall _watchdog_init
 011C                   .dbline 115
 011C           ;  timer0_init();
 011C 85DF              xcall _timer0_init
 011E                   .dbline 116
 011E           ;  adc_init();
 011E 8CDF              xcall _adc_init
 0120                   .dbline 117
 0120           ;  uart0_init(); 
 0120 97DF              xcall _uart0_init
 0122                   .dbline 119
 0122           ; 
 0122           ;  MCUCR = 0x00;
 0122 2224              clr R2
 0124 25BE              out 0x35,R2
 0126                   .dbline 120
 0126           ;  GICR  = 0x00;
 0126 2BBE              out 0x3b,R2
 0128                   .dbline 121
 0128           ;  TIMSK = 0x01; //timer interrupt sources
 0128 81E0              ldi R24,1
 012A 89BF              out 0x39,R24
 012C                   .dbline 122
 012C           ;  SEI(); //re-enable interrupts
 012C 7894              sei
 012E                   .dbline -2
 012E                   .dbline 124
 012E           ;  //all peripherals are now initialised
 012E           ; }//void init_devices(void)
 012E           L13:
 012E                   .dbline 0 ; func end
 012E 0895              ret
 0130                   .dbend

⌨️ 快捷键说明

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