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

📄 interface.lis

📁 AVR单片机,STK500下载线制作全套资料,包括程序,电路图
💻 LIS
字号:
                        .module interface.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRISP~1\icc\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 89
 0000           ;       #ifndef __iom88v_h                              /*meag8*/
 0000           ;               UCSRB =  (1<<RXEN) | (1<<TXEN);
 0000 88E1              ldi R24,24
 0002 8AB9              out 0xa,R24
 0004                   .dbline 90
 0004           ;               UBRRL = 1;
 0004 81E0              ldi R24,1
 0006 89B9              out 0x9,R24
 0008                   .dbline 91
 0008           ;               UBRRH = 0;
 0008 2224              clr R2
 000A 20BC              out 0x20,R2
 000C                   .dbline -2
 000C           L2:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbend
 000E                   .dbfunc e interface_getc _interface_getc fI
                        .even
 000E           _interface_getc::
 000E                   .dbline -1
 000E                   .dbline 106
 000E           ;       #else                                                   /*mega88*/
 000E           ;               UCSR0B =  (1<<RXEN0) | (1<<TXEN0);
 000E           ;               UBRR0L = 1;
 000E           ;               UBRR0H = 0;
 000E           ;       #endif
 000E           ; }
 000E           ; 
 000E           ; /**
 000E           ;       Reads a byte from the UART interface
 000E           ;       
 000E           ;       Autor: Lukas Salzburger
 000E           ;       
 000E           ;       @return received character or -1 if no character has been received
 000E           ; */
 000E           ; signed int interface_getc(void) {     /*获取PC机发来的一字节信息*/
 000E                   .dbline 109
 000E           ; 
 000E           ;       #ifndef __iom88v_h                              /*meag8*/
 000E           ;               if (UCSRA & (1<<RXC)) {
 000E 5F9B              sbis 0xb,7
 0010 03C0              rjmp L4
 0012                   .dbline 109
 0012                   .dbline 110
 0012           ;                       return UDR;
 0012 0CB1              in R16,0xc
 0014 1127              clr R17
 0016 02C0              rjmp L3
 0018           L4:
 0018                   .dbline 112
 0018           ;                       }
 0018           ;               else {
 0018                   .dbline 113
 0018           ;                       return -1;
 0018 0FEF              ldi R16,-1
 001A 1FEF              ldi R17,-1
 001C                   .dbline -2
 001C           L3:
 001C                   .dbline 0 ; func end
 001C 0895              ret
 001E                   .dbend
 001E                   .dbfunc e interface_putc _interface_putc fV
 001E           ;              t -> R16
                        .even
 001E           _interface_putc::
 001E                   .dbline -1
 001E                   .dbline 132
 001E           ;                       }
 001E           ;       #else                                                   /*mega88*/
 001E           ;               if (UCSR0A & (1<<RXC0)) {
 001E           ;                       return UDR0;
 001E           ;                       }
 001E           ;               else {
 001E           ;                       return -1;
 001E           ;                       }
 001E           ;       #endif
 001E           ; }
 001E           ; 
 001E           ; /**
 001E           ;       Writes a byte to the UART
 001E           ;       
 001E           ;       Autor: Lukas Salzburger
 001E           ;       
 001E           ;       @param t Byte to be written     
 001E           ; */
 001E           ; void interface_putc(unsigned char t) {
 001E           L7:
 001E                   .dbline 135
 001E           L8:
 001E                   .dbline 135
 001E           ; 
 001E           ;       #ifndef __iom88v_h                              /*meag8*/
 001E           ;               while (!(UCSRA & (1<<UDRE)));
 001E 5D9B              sbis 0xb,5
 0020 FECF              rjmp L7
 0022                   .dbline 137
 0022           ;               
 0022           ;               UDR = t;
 0022 0CB9              out 0xc,R16
 0024                   .dbline 138
 0024           ;               checksum ^= t;
 0024 20900000          lds R2,_checksum
 0028 2026              eor R2,R16
 002A 20920000          sts _checksum,R2
 002E                   .dbline -2
 002E           L6:
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbsym r t 16 c
 0030                   .dbend
 0030                   .dbfunc e interface_print _interface_print fV
 0030           ;              s -> R20,R21
                        .even
 0030           _interface_print::
 0030 00D0              rcall push_gset1
 0032 A801              movw R20,R16
 0034                   .dbline -1
 0034                   .dbline 155
 0034           ;       #else                                                   /*mega88*/
 0034           ;               while (!(UCSR0A & (1<<UDRE0)));
 0034           ;               
 0034           ;               UDR0 = t;
 0034           ;               checksum ^= t;
 0034           ;       #endif
 0034           ; }
 0034           ; 
 0034           ; #endif
 0034           ;       
 0034           ; /**
 0034           ;       Writes a string to USB
 0034           ;       
 0034           ;       @param s The string to be send
 0034           ; */
 0034           ; void interface_print(unsigned char *s)
 0034           ; {
 0034 05C0              rjmp L12
 0036           L11:
 0036                   .dbline 157
 0036                   .dbline 158
 0036 FA01              movw R30,R20
 0038 0081              ldd R16,z+0
 003A F1DF              rcall _interface_putc
 003C                   .dbline 159
 003C 4F5F              subi R20,255  ; offset = 1
 003E 5F4F              sbci R21,255
 0040                   .dbline 160
 0040           L12:
 0040                   .dbline 156
 0040           ;       while(*s)
 0040 FA01              movw R30,R20
 0042 2080              ldd R2,z+0
 0044 2220              tst R2
 0046 B9F7              brne L11
 0048                   .dbline -2
 0048           L10:
 0048 00D0              rcall pop_gset1
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r s 20 pc
 004C                   .dbend
 004C                   .dbfunc e interface_put16 _interface_put16 fV
 004C           ;              t -> R20,R21
                        .even
 004C           _interface_put16::
 004C 00D0              rcall push_gset1
 004E A801              movw R20,R16
 0050                   .dbline -1
 0050                   .dbline 170
 0050           ;       {
 0050           ;               interface_putc(*s);
 0050           ;               s++;
 0050           ;       }
 0050           ; }
 0050           ; 
 0050           ; /**
 0050           ;       Sends a 16 bit value over the USB
 0050           ;       MSB first
 0050           ;       
 0050           ;       @param t Value to be send
 0050           ; */
 0050           ; void interface_put16(unsigned int t)
 0050           ; {
 0050                   .dbline 171
 0050           ;       interface_putc((t>>8)&0xFF);
 0050 8A01              movw R16,R20
 0052 012F              mov R16,R17
 0054 1127              clr R17
 0056 1070              andi R17,0
 0058 E2DF              rcall _interface_putc
 005A                   .dbline 172
 005A           ;       interface_putc((t>>0)&0xFF);
 005A 042F              mov R16,R20
 005C 1070              andi R17,0
 005E DFDF              rcall _interface_putc
 0060                   .dbline -2
 0060           L14:
 0060 00D0              rcall pop_gset1
 0062                   .dbline 0 ; func end
 0062 0895              ret
 0064                   .dbsym r t 20 i
 0064                   .dbend
 0064                   .dbfunc e interface_reset_check _interface_reset_check fV
                        .even
 0064           _interface_reset_check::
 0064                   .dbline -1
 0064                   .dbline 179
 0064           ; }
 0064           ; 
 0064           ; /**
 0064           ;       Resets the checksum accumulator
 0064           ; */
 0064           ; void interface_reset_check(void)
 0064           ; {
 0064                   .dbline 180
 0064           ;       checksum=0;
 0064 2224              clr R2
 0066 20920000          sts _checksum,R2
 006A                   .dbline -2
 006A           L15:
 006A                   .dbline 0 ; func end
 006A 0895              ret
 006C                   .dbend
 006C                   .dbfunc e interface_send_check _interface_send_check fV
                        .even
 006C           _interface_send_check::
 006C                   .dbline -1
 006C                   .dbline 187
 006C           ; }
 006C           ; 
 006C           ; /**
 006C           ;       Sends the accumulated checksum
 006C           ; */
 006C           ; void interface_send_check(void)
 006C           ; {
 006C                   .dbline 188
 006C           ;       interface_putc(checksum);
 006C 00910000          lds R16,_checksum
 0070 D6DF              rcall _interface_putc
 0072                   .dbline 189
 0072           ;       checksum=0;
 0072 2224              clr R2
 0074 20920000          sts _checksum,R2
 0078                   .dbline -2
 0078           L16:
 0078                   .dbline 0 ; func end
 0078 0895              ret
 007A                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\ICCAVR\project\AVRISP~1\icc\interface.c
 0000           _checksum::
 0000                   .blkb 1
 0001                   .dbsym e checksum _checksum c

⌨️ 快捷键说明

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