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

📄 main.lis

📁 meg16 的所有功能实例
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
 0000                   .dbfunc e Delay_us _Delay_us fV
 0000           ;           time -> R16,R17
                        .even
 0000           _Delay_us::
 0000                   .dbline -1
 0000                   .dbline 12
 0000           ; //ICC-AVR application builder : 2006-6-20 9:25:59
 0000           ; // Target : M16
 0000           ; // Crystal: 1Mhz
 0000           ; 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "main.h"
 0000           ; 
 0000           ; uint8 Buffer;
 0000           ; 
 0000           ; void Delay_us(unsigned int time)
 0000           ; {
 0000           L2:
 0000                   .dbline 13
 0000           L3:
 0000                   .dbline 13
 0000           ; while(time--);
 0000 1801              movw R2,R16
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006 2220              tst R2
 0008 D9F7              brne L2
 000A 3320              tst R3
 000C C9F7              brne L2
 000E           X0:
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r time 16 i
 0010                   .dbend
 0010                   .dbfunc e Delay_ms _Delay_ms fV
 0010           ;           time -> R20,R21
                        .even
 0010           _Delay_ms::
 0010 0E940000          xcall push_gset1
 0014 A801              movw R20,R16
 0016                   .dbline -1
 0016                   .dbline 17
 0016           ; }
 0016           ; 
 0016           ; void Delay_ms(unsigned int time)
 0016           ; {
 0016 03C0              xjmp L7
 0018           L6:
 0018                   .dbline 19
 0018                   .dbline 20
 0018 00E1              ldi R16,10000
 001A 17E2              ldi R17,39
 001C F1DF              xcall _Delay_us
 001E                   .dbline 21
 001E           L7:
 001E                   .dbline 18
 001E           ; while(time--)
 001E 1A01              movw R2,R20
 0020 4150              subi R20,1
 0022 5040              sbci R21,0
 0024 2220              tst R2
 0026 C1F7              brne L6
 0028 3320              tst R3
 002A B1F7              brne L6
 002C           X1:
 002C                   .dbline -2
 002C           L5:
 002C 0E940000          xcall pop_gset1
 0030                   .dbline 0 ; func end
 0030 0895              ret
 0032                   .dbsym r time 20 i
 0032                   .dbend
 0032                   .dbfunc e main _main fV
                        .even
 0032           _main::
 0032                   .dbline -1
 0032                   .dbline 24
 0032           ;       {
 0032           ;       Delay_us(10000);
 0032           ;       }
 0032           ; }
 0032           ; void main(void)
 0032           ; {
 0032                   .dbline 25
 0032           ;  Delay_ms(1);
 0032 01E0              ldi R16,1
 0034 10E0              ldi R17,0
 0036 ECDF              xcall _Delay_ms
 0038                   .dbline 26
 0038           ;  SPI_SS_IN;
 0038 BC98              cbi 0x17,4
 003A                   .dbline 26
 003A C49A              sbi 0x18,4
 003C                   .dbline 26
 003C                   .dbline 27
 003C           ;  SPI_DO_OUT;
 003C BD9A              sbi 0x17,5
 003E                   .dbline 27
 003E                   .dbline 28
 003E           ;  SPI_DI_IN;
 003E BE98              cbi 0x17,6
 0040                   .dbline 28
 0040 C69A              sbi 0x18,6
 0042                   .dbline 28
 0042                   .dbline 29
 0042           ;  SPI_CLK_IN;
 0042 BF98              cbi 0x17,7
 0044                   .dbline 29
 0044 C79A              sbi 0x18,7
 0046                   .dbline 29
 0046                   .dbline 31
 0046           ;  
 0046           ;  uart_init();                 //TART初始化
 0046 0AD0              xcall _uart_init
 0048                   .dbline 32
 0048           ;  SEI();                       //全局中断使能
 0048 7894              sei
 004A                   .dbline 35
 004A           ;  
 004A           ;  
 004A           ;  for(;;)
 004A           L10:
 004A                   .dbline 36
 004A                   .dbline 37
 004A B49B              sbis 0x16,4
 004C FECF              rjmp L10
 004E                   .dbline 38
 004E                   .dbline 40
 004E 00EF              ldi R16,240
 0050 16D0              xcall _Spi_Send
 0052 00930000          sts _Buffer,R16
 0056                   .dbline 42
 0056 0BD0              xcall _USART_TXD
 0058                   .dbline 43
 0058                   .dbline 44
 0058                   .dbline 35
 0058                   .dbline 35
 0058 F8CF              xjmp L10
 005A           X2:
 005A                   .dbline -2
 005A           L9:
 005A                   .dbline 0 ; func end
 005A 0895              ret
 005C                   .dbend
 005C                   .dbfunc e uart_init _uart_init fV
                        .even
 005C           _uart_init::
 005C                   .dbline -1
 005C                   .dbline 49
 005C           ;  {
 005C           ;   if(SS)
 005C           ;    {
 005C           ;     
 005C           ;       Buffer=Spi_Send(0XF0);
 005C           ;       
 005C           ;       USART_TXD(Buffer);
 005C           ;    } 
 005C           ;  }
 005C           ; }
 005C           ; 
 005C           ; //===============================================================
 005C           ; void uart_init(void)          //UART初始化
 005C           ;   { 
 005C                   .dbline 52
 005C           ;     //设置侦格式
 005C           ;       //异步,8位数据,无奇偶校验,一个停止位,无倍速
 005C           ;       UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
 005C 86E8              ldi R24,134
 005E 80BD              out 0x20,R24
 0060                   .dbline 55
 0060           ;       
 0060           ;     //设置波特率
 0060           ;     UBRRL= (F_osc/Baud_rate/16-1)%256;
 0060 89E1              ldi R24,25
 0062 89B9              out 0x9,R24
 0064                   .dbline 56
 0064           ;     UBRRH= (F_osc/Baud_rate/16-1)/256;
 0064 2224              clr R2
 0066 20BC              out 0x20,R2
 0068                   .dbline 59
 0068           ; 
 0068           ;       //使能接收中断,使能接收,使能发送
 0068           ;     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
 0068 88E9              ldi R24,152
 006A 8AB9              out 0xa,R24
 006C                   .dbline -2
 006C           L16:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbend
 006E                   .dbfunc e USART_TXD _USART_TXD fV
 006E           ;           data -> R16
                        .even
 006E           _USART_TXD::
 006E                   .dbline -1
 006E                   .dbline 65
 006E           ;   }
 006E           ;   
 006E           ; 
 006E           ; //===============================================================
 006E           ; void USART_TXD(uint8 data) //发送采用查询方式
 006E           ; {
 006E           L18:
 006E                   .dbline 66
 006E           L19:
 006E                   .dbline 66
 006E           ;       while( !(UCSRA & BIT(UDRE)) );
 006E 5D9B              sbis 0xb,5
 0070 FECF              rjmp L18
 0072                   .dbline 67
 0072           ;       UDR=data;
 0072 0CB9              out 0xc,R16
 0074           L21:
 0074                   .dbline 68
 0074           L22:
 0074                   .dbline 68
 0074           ;       while( !(UCSRA & BIT(TXC )) );
 0074 5E9B              sbis 0xb,6
 0076 FECF              rjmp L21
 0078                   .dbline 69
 0078           ;       UCSRA|=BIT(TXC);
 0078 5E9A              sbi 0xb,6
 007A                   .dbline -2
 007A           L17:
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r data 16 c
 007C                   .dbend
                        .area vector(rom, abs)
                        .org 44
 002C 0C943E00          jmp _USART_RXC
                        .area text(rom, con, rel)
 007C                   .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
 007C                   .dbfunc e USART_RXC _USART_RXC fV
                        .even
 007C           _USART_RXC::
 007C                   .dbline -1
 007C                   .dbline 76
 007C           ; }
 007C           ; 
 007C           ; //=======================================================================
 007C           ; 
 007C           ; #pragma interrupt_handler USART_RXC:12
 007C           ; void USART_RXC(void)
 007C           ; {
 007C                   .dbline -2
 007C           L24:
 007C                   .dbline 0 ; func end
 007C 1895              reti
 007E                   .dbend
 007E                   .dbfunc e Spi_Send _Spi_Send fc
 007E           ;           temp -> R20
 007E           ;              i -> R22
 007E           ;            dat -> R16
                        .even
 007E           _Spi_Send::
 007E 0E940000          xcall push_gset2
 0082                   .dbline -1
 0082                   .dbline 87
 0082           ; 
 0082           ; }
 0082           ; 
 0082           ; //*****************************************************************************************
 0082           ; //函数名:Spi_send(uint8 dat)
 0082           ; //输入:发送的数据
 0082           ; //输出:无
 0082           ; //功能描述:SPI从模式发送一个字节,先发送高位(发送的同时接收)
 0082           ; //*****************************************************************************************
 0082           ; uint8 Spi_Send(uint8 dat)
 0082           ; {
 0082                   .dbline 89
 0082           ;       uint8 i,temp;
 0082           ;       temp = 0;
 0082 4427              clr R20
 0084                   .dbline 91
 0084           ; 
 0084           ;       for(i=0; i<8; i++)
 0084 6627              clr R22
 0086 0FC0              xjmp L29
 0088           L26:
 0088                   .dbline 92
 0088           ;       {   
 0088                   .dbline 93
 0088           ;               if(dat & 0x80)
 0088 07FF              sbrs R16,7
 008A 02C0              rjmp L30
 008C                   .dbline 94
 008C           ;               {
 008C                   .dbline 95
 008C           ;                       MOSI_1;
 008C C59A              sbi 0x18,5
 008E                   .dbline 95
 008E                   .dbline 96
 008E           ;               }
 008E 01C0              xjmp L31
 0090           L30:
 0090                   .dbline 97
 0090 C598              cbi 0x18,5
 0092           L31:
 0092                   .dbline 97
 0092           ;               else MOSI_0;
 0092                   .dbline 98
 0092           ;               dat <<= 1;
 0092 000F              lsl R16
 0094           L32:
 0094                   .dbline 99
 0094           L33:
 0094                   .dbline 99
 0094           ;               while(!SCK);
 0094 B79B              sbis 0x16,7
 0096 FECF              rjmp L32
 0098           L35:
 0098                   .dbline 100
 0098           L36:
 0098                   .dbline 100
 0098           ;               while(SCK);
 0098 B799              sbic 0x16,7
 009A FECF              rjmp L35
 009C                   .dbline 102
 009C           ; 
 009C           ;               temp <<= 1;
 009C 440F              lsl R20
 009E                   .dbline 103
 009E           ;               if(MISO)temp++; 
 009E B69B              sbis 0x16,6
 00A0 01C0              rjmp L38
 00A2                   .dbline 103
 00A2 4395              inc R20
 00A4           L38:
 00A4                   .dbline 105
 00A4           L27:
 00A4                   .dbline 91
 00A4 6395              inc R22
 00A6           L29:
 00A6                   .dbline 91
 00A6 6830              cpi R22,8
 00A8 78F3              brlo L26
 00AA                   .dbline 106
 00AA           ;       
 00AA           ;       }
 00AA           ;       return temp;
 00AA 042F              mov R16,R20
 00AC                   .dbline -2
 00AC           L25:
 00AC 0E940000          xcall pop_gset2
 00B0                   .dbline 0 ; func end
 00B0 0895              ret
 00B2                   .dbsym r temp 20 c
 00B2                   .dbsym r i 22 c
 00B2                   .dbsym r dat 16 c
 00B2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
 0000           _Buffer::
 0000                   .blkb 1
 0001                   .dbsym e Buffer _Buffer c

⌨️ 快捷键说明

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