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

📄 master.lst

📁 mega16 spi主从通信 测试通过(ICC)
💻 LST
字号:
__start:
__text_start:
    002A E5CF      LDI	R28,0x5F
    002B E0D4      LDI	R29,4
    002C BFCD      OUT	0x3D,R28
    002D BFDE      OUT	0x3E,R29
    002E 51C0      SUBI	R28,0x10
    002F 40D0      SBCI	R29,0
    0030 EA0A      LDI	R16,0xAA
    0031 8308      STD	Y+0,R16
    0032 2400      CLR	R0
    0033 E6E0      LDI	R30,0x60
    0034 E0F0      LDI	R31,0
    0035 E010      LDI	R17,0
    0036 36E0      CPI	R30,0x60
    0037 07F1      CPC	R31,R17
    0038 F011      BEQ	0x003B
    0039 9201      ST	R0,Z+
    003A CFFB      RJMP	0x0036
    003B 8300      STD	Z+0,R16
    003C E5E4      LDI	R30,0x54
    003D E0F0      LDI	R31,0
    003E E6A0      LDI	R26,0x60
    003F E0B0      LDI	R27,0
    0040 E010      LDI	R17,0
    0041 35E4      CPI	R30,0x54
    0042 07F1      CPC	R31,R17
    0043 F021      BEQ	0x0048
    0044 95C8      LPM
    0045 9631      ADIW	R30,1
    0046 920D      ST	R0,X+
    0047 CFF9      RJMP	0x0041
    0048 940E0066  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: C:\DOCUME~1\zhuji\桌面\新建文件夹\spi主\main.c
(0001) #include "iom16v.h"
(0002) #include "macros.h"
(0003) #define uchar unsigned char
(0004) #define uint  unsigned int
(0005) //串口波特率9600
(0006) /*void uart0_init(void)
(0007) {
(0008)  UCSRB = 0x00; //disable while setting baud rate
(0009)  UCSRA = 0x00;
(0010)  UCSRC = BIT(URSEL) | 0x06;
(0011)  UBRRL = 0x0C; //set baud rate lo
(0012)  UBRRH = 0x00; //set baud rate hi
(0013)  UCSRB = 0x98;
(0014) }*//*
(0015) void uart0_init(void)
(0016) {
(0017)  UCSRB = 0x00; //disable while setting baud rate
(0018)  UCSRA = 0x00;
(0019)  UCSRC = 0x0B;//
(0020)  UBRRL = 0x2F; //set baud rate lo
(0021)  UBRRH = 0x00; //set baud rate hi  fosc=7372800HZ,Baud=115200
(0022)  UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);//0xD8;//发送接受使能 中断使能
(0023) }
(0024) uchar RecvFlag = 0;
(0025) uchar RecvData = 0;
(0026) 
(0027) #pragma interrupt_handler uart0_rx_isr:12
(0028) void uart0_rx_isr(void)
(0029) {
(0030)  RecvFlag = 1;
(0031)  RecvData = UDR;
(0032)  while(!(UCSRA&0x20));
(0033)  UDR = RecvData;
(0034) }*/
(0035) #define DDR_MISO  6
(0036) #define DDR_MOSI  5
(0037) #define DDR_SCK   7
(0038) #define DDR_SS    4
(0039) #define DDR_SPI   DDRB
(0040) #define PORT_SPI  PORTB
(0041) /*-----------------------------------------------------------------
(0042) 函数名称: void SPIMasterInit(void)
(0043) 函数功能: SPI主机初始化
(0044) 参    数: 
(0045) 返 回 值: 无
(0046) -----------------------------------------------------------------*/
(0047) void SPIMasterInit(void)
(0048) {
(0049)     DDR_SPI |= (1<<DDR_SCK)|(1<<DDR_MOSI);//输出
_SPIMasterInit:
    004B B387      IN	R24,0x17
    004C 6A80      ORI	R24,0xA0
    004D BB87      OUT	0x17,R24
(0050)     DDR_SPI &=~(1<<DDR_MISO);//输入
    004E 98BE      CBI	0x17,6
(0051)     SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);//|(1<<CPOL)|(1<<CPHA)
    004F E583      LDI	R24,0x53
    0050 B98D      OUT	0x0D,R24
(0052) }
    0051 9508      RET
(0053) /*-----------------------------------------------------------------
(0054) 函数名称: void SPIMasterTransmit(unsigned char i) 
(0055) 函数功能: SPI数据发送
(0056) 参    数: 
(0057) 返 回 值: 无
(0058) -----------------------------------------------------------------*/
(0059) void SPIMasterTransmit(uchar TranData) 
(0060) { 
(0061)   SPDR = TranData;     // 启动数据传输 
_SPIMasterTransmit:
  TranData             --> R16
    0052 B90F      OUT	0x0F,R16
(0062)   while (!(SPSR & (1<<SPIF)));  // 等待传输结束 
    0053 9B77      SBIS	0x0E,7
    0054 CFFE      RJMP	0x0053
(0063) }
    0055 9508      RET
(0064) void DeviceInit(void)
(0065) {
(0066)  CLI();
_DeviceInit:
    0056 94F8      BCLR	7
(0067)  //uart0_init();
(0068)  SPIMasterInit();
    0057 DFF3      RCALL	_SPIMasterInit
(0069)  
(0070)  MCUCR = 0;
    0058 2422      CLR	R2
    0059 BE25      OUT	0x35,R2
(0071)  TIMSK = 0;
    005A BE29      OUT	0x39,R2
(0072)  GICR  = 0;
    005B BE2B      OUT	0x3B,R2
(0073)  SEI();
    005C 9478      BSET	7
(0074) }
    005D 9508      RET
(0075) void delay(int num )
(0076) {
(0077)   while(num--);
_delay:
  num                  --> R16
    005E 0118      MOVW	R2,R16
    005F 5001      SUBI	R16,1
    0060 4010      SBCI	R17,0
    0061 2022      TST	R2
    0062 F7D9      BNE	0x005E
    0063 2033      TST	R3
    0064 F7C9      BNE	0x005E
(0078) }
    0065 9508      RET
(0079) void main(void)
(0080) {
(0081)  PORT_SPI &=~(1<<DDR_SS);
_main:
    0066 98C4      CBI	0x18,4
(0082)  DDR_SPI |= (1<<DDR_SS); 
    0067 9ABC      SBI	0x17,4
(0083)  DeviceInit();
    0068 DFED      RCALL	_DeviceInit
(0084)  
(0085)  SPIMasterTransmit(0x05);
    0069 E005      LDI	R16,5
    006A DFE7      RCALL	_SPIMasterTransmit
(0086)  
(0087)   SPIMasterTransmit(0x32);
    006B E302      LDI	R16,0x32
    006C DFE5      RCALL	_SPIMasterTransmit
(0088)  while(1)
    006D CFFF      RJMP	0x006D
(0089)  {
(0090)  
(0091)  
(0092)    
(0093)  
(0094)    /*if(RecvFlag)
(0095)   {
(0096)    RecvFlag = 0;
(0097)    SPIMasterTransmit(RecvData);
(0098)   }*/
(0099)  }
(0100) }
FILE: <library>
    006E 9508      RET

⌨️ 快捷键说明

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