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

📄 main.lis

📁 mega16 spi主从通信 测试通过(ICC)
💻 LIS
字号:
                        .module main.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\zhuji\桌面\新建文件夹\spi主\main.c
 0000                   .dbfunc e SPIMasterInit _SPIMasterInit fV
                        .even
 0000           _SPIMasterInit::
 0000                   .dbline -1
 0000                   .dbline 48
 0000           ; #include "iom16v.h"
 0000           ; #include "macros.h"
 0000           ; #define uchar unsigned char
 0000           ; #define uint  unsigned int
 0000           ; //串口波特率9600
 0000           ; /*void uart0_init(void)
 0000           ; {
 0000           ;  UCSRB = 0x00; //disable while setting baud rate
 0000           ;  UCSRA = 0x00;
 0000           ;  UCSRC = BIT(URSEL) | 0x06;
 0000           ;  UBRRL = 0x0C; //set baud rate lo
 0000           ;  UBRRH = 0x00; //set baud rate hi
 0000           ;  UCSRB = 0x98;
 0000           ; }*//*
 0000           ; void uart0_init(void)
 0000           ; {
 0000           ;  UCSRB = 0x00; //disable while setting baud rate
 0000           ;  UCSRA = 0x00;
 0000           ;  UCSRC = 0x0B;//
 0000           ;  UBRRL = 0x2F; //set baud rate lo
 0000           ;  UBRRH = 0x00; //set baud rate hi  fosc=7372800HZ,Baud=115200
 0000           ;  UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
 0000           ; }
 0000           ; uchar RecvFlag = 0;
 0000           ; uchar RecvData = 0;
 0000           ; 
 0000           ; #pragma interrupt_handler uart0_rx_isr:12
 0000           ; void uart0_rx_isr(void)
 0000           ; {
 0000           ;  RecvFlag = 1;
 0000           ;  RecvData = UDR;
 0000           ;  while(!(UCSRA&0x20));
 0000           ;  UDR = RecvData;
 0000           ; }*/
 0000           ; #define DDR_MISO  6
 0000           ; #define DDR_MOSI  5
 0000           ; #define DDR_SCK   7
 0000           ; #define DDR_SS    4
 0000           ; #define DDR_SPI   DDRB
 0000           ; #define PORT_SPI  PORTB
 0000           ; /*-----------------------------------------------------------------
 0000           ; 函数名称: void SPIMasterInit(void)
 0000           ; 函数功能: SPI主机初始化
 0000           ; 参    数: 
 0000           ; 返 回 值: 无
 0000           ; -----------------------------------------------------------------*/
 0000           ; void SPIMasterInit(void)
 0000           ; {
 0000                   .dbline 49
 0000           ;     DDR_SPI |= (1<<DDR_SCK)|(1<<DDR_MOSI);//输出
 0000 87B3              in R24,0x17
 0002 806A              ori R24,160
 0004 87BB              out 0x17,R24
 0006                   .dbline 50
 0006           ;     DDR_SPI &=~(1<<DDR_MISO);//输入
 0006 BE98              cbi 0x17,6
 0008                   .dbline 51
 0008           ;     SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//|(1<<CPOL)|(1<<CPHA)
 0008 83E5              ldi R24,83
 000A 8DB9              out 0xd,R24
 000C                   .dbline -2
 000C                   .dbline 52
 000C           ; }
 000C           L1:
 000C                   .dbline 0 ; func end
 000C 0895              ret
 000E                   .dbend
 000E                   .dbfunc e SPIMasterTransmit _SPIMasterTransmit fV
 000E           ;       TranData -> R16
                        .even
 000E           _SPIMasterTransmit::
 000E                   .dbline -1
 000E                   .dbline 60
 000E           ; /*-----------------------------------------------------------------
 000E           ; 函数名称: void SPIMasterTransmit(unsigned char i) 
 000E           ; 函数功能: SPI数据发送
 000E           ; 参    数: 
 000E           ; 返 回 值: 无
 000E           ; -----------------------------------------------------------------*/
 000E           ; void SPIMasterTransmit(uchar TranData) 
 000E           ; { 
 000E                   .dbline 61
 000E           ;   SPDR = TranData;     // 启动数据传输 
 000E 0FB9              out 0xf,R16
 0010           L3:
 0010                   .dbline 62
 0010           L4:
 0010                   .dbline 62
 0010           ;   while (!(SPSR & (1<<SPIF)));  // 等待传输结束 
 0010 779B              sbis 0xe,7
 0012 FECF              rjmp L3
 0014                   .dbline -2
 0014                   .dbline 63
 0014           ; }
 0014           L2:
 0014                   .dbline 0 ; func end
 0014 0895              ret
 0016                   .dbsym r TranData 16 c
 0016                   .dbend
 0016                   .dbfunc e DeviceInit _DeviceInit fV
                        .even
 0016           _DeviceInit::
 0016                   .dbline -1
 0016                   .dbline 65
 0016           ; void DeviceInit(void)
 0016           ; {
 0016                   .dbline 66
 0016           ;  CLI();
 0016 F894              cli
 0018                   .dbline 68
 0018           ;  //uart0_init();
 0018           ;  SPIMasterInit();
 0018 F3DF              xcall _SPIMasterInit
 001A                   .dbline 70
 001A           ;  
 001A           ;  MCUCR = 0;
 001A 2224              clr R2
 001C 25BE              out 0x35,R2
 001E                   .dbline 71
 001E           ;  TIMSK = 0;
 001E 29BE              out 0x39,R2
 0020                   .dbline 72
 0020           ;  GICR  = 0;
 0020 2BBE              out 0x3b,R2
 0022                   .dbline 73
 0022           ;  SEI();
 0022 7894              sei
 0024                   .dbline -2
 0024                   .dbline 74
 0024           ; }
 0024           L6:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbend
 0026                   .dbfunc e delay _delay fV
 0026           ;            num -> R16,R17
                        .even
 0026           _delay::
 0026                   .dbline -1
 0026                   .dbline 76
 0026           ; void delay(int num )
 0026           ; {
 0026           L8:
 0026                   .dbline 77
 0026           L9:
 0026                   .dbline 77
 0026           ;   while(num--);
 0026 1801              movw R2,R16
 0028 0150              subi R16,1
 002A 1040              sbci R17,0
 002C 2220              tst R2
 002E D9F7              brne L8
 0030 3320              tst R3
 0032 C9F7              brne L8
 0034           X0:
 0034                   .dbline -2
 0034                   .dbline 78
 0034           ; }
 0034           L7:
 0034                   .dbline 0 ; func end
 0034 0895              ret
 0036                   .dbsym r num 16 I
 0036                   .dbend
 0036                   .dbfunc e main _main fV
                        .even
 0036           _main::
 0036                   .dbline -1
 0036                   .dbline 80
 0036           ; void main(void)
 0036           ; {
 0036                   .dbline 81
 0036           ;  PORT_SPI &=~(1<<DDR_SS);
 0036 C498              cbi 0x18,4
 0038                   .dbline 82
 0038           ;  DDR_SPI |= (1<<DDR_SS); 
 0038 BC9A              sbi 0x17,4
 003A                   .dbline 83
 003A           ;  DeviceInit();
 003A EDDF              xcall _DeviceInit
 003C                   .dbline 85
 003C           ;  
 003C           ;  SPIMasterTransmit(0x05);
 003C 05E0              ldi R16,5
 003E E7DF              xcall _SPIMasterTransmit
 0040                   .dbline 87
 0040           ;  
 0040           ;   SPIMasterTransmit(0x32);
 0040 02E3              ldi R16,50
 0042 E5DF              xcall _SPIMasterTransmit
 0044           L12:
 0044                   .dbline 89
 0044                   .dbline 99
 0044           L13:
 0044                   .dbline 88
 0044 FFCF              xjmp L12
 0046           X1:
 0046                   .dbline -2
 0046                   .dbline 100
 0046           ;  while(1)
 0046           ;  {
 0046           ;  
 0046           ;  
 0046           ;    
 0046           ;  
 0046           ;    /*if(RecvFlag)
 0046           ;   {
 0046           ;    RecvFlag = 0;
 0046           ;    SPIMasterTransmit(RecvData);
 0046           ;   }*/
 0046           ;  }
 0046           ; }
 0046           L11:
 0046                   .dbline 0 ; func end
 0046 0895              ret
 0048                   .dbend

⌨️ 快捷键说明

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