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

📄 master.lst

📁 用两片AVR(ATmega16)单片机
💻 LST
字号:
__start:
__text_start:
      2B E5CF      LDI	R28,0x5F
      2C E0D4      LDI	R29,4
      2D BFCD      OUT	0x3D,R28
      2E BFDE      OUT	0x3E,R29
      2F 51CE      SUBI	R28,0x1E
      30 40D0      SBCI	R29,0
      31 EA0A      LDI	R16,0xAA
      32 8308      STD	Y+0,R16
      33 2400      CLR	R0
      34 E6E1      LDI	R30,0x61
      35 E0F0      LDI	R31,0
      36 E010      LDI	R17,0
      37 36E1      CPI	R30,0x61
      38 07F1      CPC	R31,R17
      39 F011      BEQ	0x003C
      3A 9201      ST	R0,Z+
      3B CFFB      RJMP	0x0037
      3C 8300      STD	Z+0,R16
      3D E5E4      LDI	R30,0x54
      3E E0F0      LDI	R31,0
      3F E6A0      LDI	R26,0x60
      40 E0B0      LDI	R27,0
      41 E010      LDI	R17,0
      42 E000      LDI	R16,0
      43 BF0B      OUT	0x3B,R16
      44 35E5      CPI	R30,0x55
      45 07F1      CPC	R31,R17
      46 F021      BEQ	0x004B
      47 95C8      LPM
      48 9631      ADIW	R30,1
      49 920D      ST	R0,X+
      4A CFF9      RJMP	0x0044
      4B 940E 008F CALL	_main
_exit:
      4D CFFF      RJMP	_exit
_delay:
  i                    --> R10
  j                    --> R12
  z                    --> R16
      4E 940E 00B3 CALL	push_xgset003C
FILE: D:\MYDOCU~1\MYMCUW~1\AVR\spi\master.c
(0001) //包含所需头文件
(0002) #include <ioM16v.h>
(0003) #include <macros.h>
(0004) 
(0005) 
(0006) 
(0007) 
(0008) /*------宏定义------*/
(0009) #define uchar	unsigned char
(0010) #define uint	unsigned int
(0011) 
(0012) uchar k=1;
(0013) 
(0014) /*------函数定义------*/
(0015) //SPI函数
(0016) void spi_write(uchar sData);
(0017) uchar spi_read(void);
(0018) 
(0019) void delay(uint z)
(0020) {
(0021)  uint i,j;
(0022)  for(i=0;i<z;i++)
      50 24AA      CLR	R10
      51 24BB      CLR	R11
      52 C00E      RJMP	0x0061
(0023)   for(j=0;j<1000;j++);
      53 24CC      CLR	R12
      54 24DD      CLR	R13
      55 C003      RJMP	0x0059
      56 01C6      MOVW	R24,R12
      57 9601      ADIW	R24,1
      58 016C      MOVW	R12,R24
      59 01C6      MOVW	R24,R12
      5A 3E88      CPI	R24,0xE8
      5B E0E3      LDI	R30,3
      5C 079E      CPC	R25,R30
      5D F3C0      BCS	0x0056
      5E 01C5      MOVW	R24,R10
      5F 9601      ADIW	R24,1
      60 015C      MOVW	R10,R24
      61 16A0      CP	R10,R16
      62 06B1      CPC	R11,R17
      63 F378      BCS	0x0053
      64 940C 00A8 JMP	pop_xgset003C
(0024) }
(0025) 
(0026) 
(0027) //端口初始化
(0028) void port_init(void)
(0029) {
(0030)  PORTA = 0x00;
_port_init:
      66 2422      CLR	R2
      67 BA2B      OUT	0x1B,R2
(0031)  DDRA  = 0x00;
      68 BA2A      OUT	0x1A,R2
(0032)  PORTB = 0x00;
      69 BA28      OUT	0x18,R2
(0033)  DDRB  = 0x00;
      6A BA27      OUT	0x17,R2
(0034)  PORTC = 0x00;
      6B BA25      OUT	0x15,R2
(0035)  DDRC  = 0x00;
      6C BA24      OUT	0x14,R2
(0036)  PORTD = 0x00;
      6D BA22      OUT	0x12,R2
(0037)  DDRD  = 0x00;
      6E BA21      OUT	0x11,R2
      6F 9508      RET
(0038) }
(0039) 
(0040) 
(0041) void spi_init(void)
(0042) {
(0043)  //spi初始化
(0044)  PORTB |= (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7); 
_spi_init:
      70 B388      IN	R24,0x18
      71 6F80      ORI	R24,0xF0
      72 BB88      OUT	0x18,R24
(0045)  DDRB|=BIT(PB7)|BIT(PB5)|BIT(PB4);
      73 B387      IN	R24,0x17
      74 6B80      ORI	R24,0xB0
      75 BB87      OUT	0x17,R24
(0046)  SPCR = 0x50;
      76 E580      LDI	R24,0x50
      77 B98D      OUT	0x0D,R24
(0047)  SPSR = 0x00;
      78 2422      CLR	R2
      79 B82E      OUT	0x0E,R2
      7A 9508      RET
(0048) }
(0049) 
(0050) 
(0051) //功能:使用SPI发送一个字节
(0052) void spi_write(uchar sData)
(0053) {
(0054)  
(0055)  SPDR = sData;
_spi_write:
  sData                --> R16
      7B B90F      OUT	0x0F,R16
(0056)  while(!(SPSR & BIT(SPIF)));
      7C 9B77      SBIS	0x0E,7
      7D CFFE      RJMP	0x007C
      7E 9508      RET
(0057)  //sData=SPDR;//读从机发回来的数据
(0058) }
(0059) 
(0060) 
(0061) //功能:使用SPI接收一个字节
(0062) uchar spi_read(void)
(0063) {
(0064)  SPDR = 0x00;
_spi_read:
      7F 2422      CLR	R2
      80 B82F      OUT	0x0F,R2
(0065)  while(!(SPSR & BIT(SPIF)));
      81 9B77      SBIS	0x0E,7
      82 CFFE      RJMP	0x0081
(0066)  return SPDR;
      83 B10F      IN	R16,0x0F
      84 9508      RET
(0067) }
(0068) 
(0069) 
(0070) void init_devices(void)
(0071) {
(0072)  CLI(); //禁止所有中断
_init_devices:
      85 94F8      BCLR	7
(0073)  MCUCR  = 0x00;
      86 2422      CLR	R2
      87 BE25      OUT	0x35,R2
(0074)  MCUCSR = 0x80;//禁止JTAG
      88 E880      LDI	R24,0x80
      89 BF84      OUT	0x34,R24
(0075)  GICR   = 0x00;
      8A BE2B      OUT	0x3B,R2
(0076)  port_init();
      8B DFDA      RCALL	_port_init
(0077)  spi_init();
      8C DFE3      RCALL	_spi_init
(0078)  SEI();//开全局中断
      8D 9478      BSET	7
      8E 9508      RET
(0079) }
(0080) //主函数
(0081) void main(void)
(0082) {
(0083)  uint a=1000;
_main:
  a                    --> R10
      8F EE88      LDI	R24,0xE8
      90 E093      LDI	R25,3
      91 015C      MOVW	R10,R24
(0084)  init_devices();
      92 DFF2      RCALL	_init_devices
(0085)  //在这继续添加你的代码 
(0086)  do{
(0087)   PORTB&=~BIT(PB4);
      93 98C4      CBI	0x18,4
(0088)   spi_write(k*25);
      94 9020 0060 LDS	R2,k
      96 E189      LDI	R24,0x19
      97 9D82      MUL	R24,R2
      98 2D00      MOV	R16,R0
      99 DFE1      RCALL	_spi_write
(0089)   PORTB|=BIT(PB4);
      9A 9AC4      SBI	0x18,4
(0090)   delay(100);
      9B E604      LDI	R16,0x64
      9C E010      LDI	R17,0
      9D DFB0      RCALL	_delay
(0091)   k++;
      9E 9180 0060 LDS	R24,k
      A0 5F8F      SUBI	R24,0xFF
      A1 9380 0060 STS	k,R24
(0092)   } 
(0093)  while(!(spi_read()==255)); 
      A3 DFDB      RCALL	_spi_read
      A4 3F0F      CPI	R16,0xFF
      A5 F769      BNE	0x0093
(0094)  while(1)
FILE: <library>
      A6 CFFF      RJMP	0x00A6
      A7 9508      RET
pop_xgset003C:
      A8 90A9      LD	R10,Y+
      A9 90B9      LD	R11,Y+
      AA 90C9      LD	R12,Y+
      AB 90D9      LD	R13,Y+
      AC 9508      RET
push_xgsetF0FC:
      AD 937A      ST	R23,-Y
      AE 936A      ST	R22,-Y
push_xgset30FC:
      AF 935A      ST	R21,-Y
      B0 934A      ST	R20,-Y
push_xgset00FC:
      B1 92FA      ST	R15,-Y
      B2 92EA      ST	R14,-Y
push_xgset003C:
      B3 92DA      ST	R13,-Y
      B4 92CA      ST	R12,-Y
      B5 92BA      ST	R11,-Y
      B6 92AA      ST	R10,-Y
      B7 9508      RET

⌨️ 快捷键说明

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