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

📄 interface.lis

📁 文档里面的代码是可以正常使用的
💻 LIS
字号:
                        .module interface.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\icc\stk500\avrasp\interface.c
 0000                   .dbfunc e interface_init _interface_init fV
                        .even
 0000           _interface_init::
 0000                   .dbline -1
 0000                   .dbline 87
 0000           ; /**   \file 
 0000           ;       <b>USB receive and transmit</b><br>
 0000           ;       Autor: Matthias Wei遝r<br>
 0000           ;       Copyright 2005: Matthias Wei遝r<br>
 0000           ;       License: QPL (see license.txt)
 0000           ;       <hr>
 0000           ; */
 0000           ; #include "stk500.h"
 0000           ; 
 0000           ; unsigned char checksum;
 0000           ; 
 0000           ; //#ifdef CONFIG_INTERFACE_USB
 0000           ; #if 0
 0000           ; 
 0000           ;       //Hardware
 0000           ;       #define USB_TXE         (PINB&BIT6_POS)
 0000           ;       #define USB_RXF         (PINC&BIT3_POS)
 0000           ;       #define USB_RD_ON       PORTC&=BIT1_NEG
 0000           ;       #define USB_RD_OFF      PORTC|=BIT1_POS
 0000           ;       #define USB_WR_ON       PORTC|=BIT2_POS
 0000           ;       #define USB_WR_OFF      PORTC&=BIT2_NEG
 0000           ;       
 0000           ;       /**
 0000           ;               Initializes the usb interface
 0000           ;       */
 0000           ;       void interface_init(void)
 0000           ;       {
 0000           ;               PORTC |= BIT1_POS;                      //USB_RD inactive
 0000           ;               DDRC |= BIT1_POS|BIT2_POS;      //USB_RD, USB_WR as output
 0000           ;       }
 0000           ;       
 0000           ;       /**
 0000           ;               Reads a byte from the USB interface
 0000           ;               
 0000           ;               @return received character or -1 if no character has been received
 0000           ;       */
 0000           ;       signed int interface_getc(void)
 0000           ;       {
 0000           ;               unsigned char t;
 0000           ;               
 0000           ;               if(!USB_RXF)
 0000           ;               {       
 0000           ;                       USB_RD_ON;
 0000           ;                       asm("NOP");
 0000           ;                       t = PIND;
 0000           ;                       USB_RD_OFF;
 0000           ;                       
 0000           ;                       return t;
 0000           ;               }
 0000           ;               else return -1;
 0000           ;       }
 0000           ;       
 0000           ;       /**
 0000           ;               Writes a byte to the USB
 0000           ;               
 0000           ;               @param t Byte to be written     
 0000           ;       */
 0000           ;       void interface_putc(unsigned char t)
 0000           ;       {
 0000           ;               while(USB_TXE);
 0000           ;               
 0000           ;               //PORTD auf Ausgang
 0000           ;               DDRD = 0xFF;
 0000           ;               //Daten auf den Port
 0000           ;               PORTD = t;
 0000           ;               
 0000           ;               USB_WR_ON;
 0000           ;               USB_WR_OFF;
 0000           ;               
 0000           ;               //PORTC auf Eingang
 0000           ;               DDRD = 0x00;
 0000           ;               //Pull-Ups ein
 0000           ;               PORTD = 0xFF;
 0000           ;               
 0000           ;               checksum ^= t;
 0000           ;       }
 0000           ;       
 0000           ; #endif
 0000           ; 
 0000           ; #ifdef CONFIG_INTERFACE_RS232
 0000           ;       
 0000           ; /**
 0000           ;       Initializes the rs232 interface
 0000           ;       3.6864MHz
 0000           ;       Autor: Lukas Salzburger
 0000           ; */
 0000           ; void interface_init(void) {
 0000                   .dbline 88
 0000           ;       UCSR0B =  (1<<RXEN0) | (1<<TXEN0);
 0000 88E1              ldi R24,24
 0002 8093C100          sts 193,R24
 0006                   .dbline 89
 0006           ;       UBRR0L = 1;
 0006 81E0              ldi R24,1
 0008 8093C400          sts 196,R24
 000C                   .dbline 90
 000C           ;       UBRR0H = 0;
 000C 2224              clr R2
 000E 2092C500          sts 197,R2
 0012                   .dbline -2
 0012           L2:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbend
 0014                   .dbfunc e interface_getc _interface_getc fI
                        .even
 0014           _interface_getc::
 0014                   .dbline -1
 0014                   .dbline 100
 0014           ; }
 0014           ; 
 0014           ; /**
 0014           ;       Reads a byte from the UART interface
 0014           ;       
 0014           ;       Autor: Lukas Salzburger
 0014           ;       
 0014           ;       @return received character or -1 if no character has been received
 0014           ; */
 0014           ; signed int interface_getc(void) {     /*获取PC机发来的一字节信息*/
 0014                   .dbline 102
 0014           ;       
 0014           ;       if (UCSR0A & (1<<RXC0)) {
 0014 2090C000          lds R2,192
 0018 27FE              sbrs R2,7
 001A 04C0              rjmp L4
 001C                   .dbline 102
 001C                   .dbline 103
 001C           ;               return UDR0;
 001C 0091C600          lds R16,198
 0020 1127              clr R17
 0022 02C0              rjmp L3
 0024           L4:
 0024                   .dbline 105
 0024           ;               }
 0024           ;       else {
 0024                   .dbline 106
 0024           ;               return -1;
 0024 0FEF              ldi R16,-1
 0026 1FEF              ldi R17,-1
 0028                   .dbline -2
 0028           L3:
 0028                   .dbline 0 ; func end
 0028 0895              ret
 002A                   .dbend
 002A                   .dbfunc e interface_putc _interface_putc fV
 002A           ;              t -> R16
                        .even
 002A           _interface_putc::
 002A                   .dbline -1
 002A                   .dbline 117
 002A           ;               }
 002A           ; }
 002A           ; 
 002A           ; /**
 002A           ;       Writes a byte to the UART
 002A           ;       
 002A           ;       Autor: Lukas Salzburger
 002A           ;       
 002A           ;       @param t Byte to be written     
 002A           ; */
 002A           ; void interface_putc(unsigned char t) {
 002A           L7:
 002A                   .dbline 119
 002A           L8:
 002A                   .dbline 119
 002A           ; 
 002A           ;       while (!(UCSR0A & (1<<UDRE0)));
 002A 2090C000          lds R2,192
 002E 25FE              sbrs R2,5
 0030 FCCF              rjmp L7
 0032                   .dbline 121
 0032           ;       
 0032           ;       UDR0 = t;
 0032 0093C600          sts 198,R16
 0036                   .dbline 122
 0036           ;       checksum ^= t;
 0036 20900000          lds R2,_checksum
 003A 2026              eor R2,R16
 003C 20920000          sts _checksum,R2
 0040                   .dbline -2
 0040           L6:
 0040                   .dbline 0 ; func end
 0040 0895              ret
 0042                   .dbsym r t 16 c
 0042                   .dbend
 0042                   .dbfunc e interface_print _interface_print fV
 0042           ;              s -> R20,R21
                        .even
 0042           _interface_print::
 0042 00D0              rcall push_gset1
 0044 A801              movw R20,R16
 0046                   .dbline -1
 0046                   .dbline 133
 0046           ; }
 0046           ; 
 0046           ; #endif
 0046           ;       
 0046           ; /**
 0046           ;       Writes a string to USB
 0046           ;       
 0046           ;       @param s The string to be send
 0046           ; */
 0046           ; void interface_print(unsigned char *s)
 0046           ; {
 0046 05C0              rjmp L12
 0048           L11:
 0048                   .dbline 135
 0048                   .dbline 136
 0048 FA01              movw R30,R20
 004A 0081              ldd R16,z+0
 004C EEDF              rcall _interface_putc
 004E                   .dbline 137
 004E 4F5F              subi R20,255  ; offset = 1
 0050 5F4F              sbci R21,255
 0052                   .dbline 138
 0052           L12:
 0052                   .dbline 134
 0052           ;       while(*s)
 0052 FA01              movw R30,R20
 0054 2080              ldd R2,z+0
 0056 2220              tst R2
 0058 B9F7              brne L11
 005A                   .dbline -2
 005A           L10:
 005A 00D0              rcall pop_gset1
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r s 20 pc
 005E                   .dbend
 005E                   .dbfunc e interface_put16 _interface_put16 fV
 005E           ;              t -> R20,R21
                        .even
 005E           _interface_put16::
 005E 00D0              rcall push_gset1
 0060 A801              movw R20,R16
 0062                   .dbline -1
 0062                   .dbline 148
 0062           ;       {
 0062           ;               interface_putc(*s);
 0062           ;               s++;
 0062           ;       }
 0062           ; }
 0062           ; 
 0062           ; /**
 0062           ;       Sends a 16 bit value over the USB
 0062           ;       MSB first
 0062           ;       
 0062           ;       @param t Value to be send
 0062           ; */
 0062           ; void interface_put16(unsigned int t)
 0062           ; {
 0062                   .dbline 149
 0062           ;       interface_putc((t>>8)&0xFF);
 0062 8A01              movw R16,R20
 0064 012F              mov R16,R17
 0066 1127              clr R17
 0068 1070              andi R17,0
 006A DFDF              rcall _interface_putc
 006C                   .dbline 150
 006C           ;       interface_putc((t>>0)&0xFF);
 006C 042F              mov R16,R20
 006E 1070              andi R17,0
 0070 DCDF              rcall _interface_putc
 0072                   .dbline -2
 0072           L14:
 0072 00D0              rcall pop_gset1
 0074                   .dbline 0 ; func end
 0074 0895              ret
 0076                   .dbsym r t 20 i
 0076                   .dbend
 0076                   .dbfunc e interface_reset_check _interface_reset_check fV
                        .even
 0076           _interface_reset_check::
 0076                   .dbline -1
 0076                   .dbline 157
 0076           ; }
 0076           ; 
 0076           ; /**
 0076           ;       Resets the checksum accumulator
 0076           ; */
 0076           ; void interface_reset_check(void)
 0076           ; {
 0076                   .dbline 158
 0076           ;       checksum=0;
 0076 2224              clr R2
 0078 20920000          sts _checksum,R2
 007C                   .dbline -2
 007C           L15:
 007C                   .dbline 0 ; func end
 007C 0895              ret
 007E                   .dbend
 007E                   .dbfunc e interface_send_check _interface_send_check fV
                        .even
 007E           _interface_send_check::
 007E                   .dbline -1
 007E                   .dbline 165
 007E           ; }
 007E           ; 
 007E           ; /**
 007E           ;       Sends the accumulated checksum
 007E           ; */
 007E           ; void interface_send_check(void)
 007E           ; {
 007E                   .dbline 166
 007E           ;       interface_putc(checksum);
 007E 00910000          lds R16,_checksum
 0082 D3DF              rcall _interface_putc
 0084                   .dbline 167
 0084           ;       checksum=0;
 0084 2224              clr R2
 0086 20920000          sts _checksum,R2
 008A                   .dbline -2
 008A           L16:
 008A                   .dbline 0 ; func end
 008A 0895              ret
 008C                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\icc\stk500\avrasp\interface.c
 0000           _checksum::
 0000                   .blkb 1
 0001                   .dbsym e checksum _checksum c

⌨️ 快捷键说明

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