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

📄 spi.lst

📁 avr atmega168v spi的程序
💻 LST
字号:
__text_start:
__start:
      34 EFCF      LDI	R28,0xFF
      35 E0D4      LDI	R29,4
      36 BFCD      OUT	0x3D,R28
      37 BFDE      OUT	0x3E,R29
      38 51C0      SUBI	R28,0x10
      39 40D0      SBCI	R29,0
      3A EA0A      LDI	R16,0xAA
      3B 8308      STD	Y+0,R16
      3C 2400      CLR	R0
      3D E0E0      LDI	R30,0
      3E E0F1      LDI	R31,1
      3F E011      LDI	R17,1
      40 30E0      CPI	R30,0
      41 07F1      CPC	R31,R17
      42 F011      BEQ	0x0045
      43 9201      ST	R0,Z+
      44 CFFB      RJMP	0x0040
      45 8300      STD	Z+0,R16
      46 E6E8      LDI	R30,0x68
      47 E0F0      LDI	R31,0
      48 E0A0      LDI	R26,0
      49 E0B1      LDI	R27,1
      4A E010      LDI	R17,0
      4B 36E8      CPI	R30,0x68
      4C 07F1      CPC	R31,R17
      4D F021      BEQ	0x0052
      4E 95C8      LPM
      4F 9631      ADIW	R30,1
      50 920D      ST	R0,X+
      51 CFF9      RJMP	0x004B
      52 940E 00AA CALL	_main
_exit:
      54 CFFF      RJMP	_exit
FILE: G:\燕洪成\gra_des\exper\inc\myfun.h
(0001) //******DelayTime*******//	 
(0002) void Delayus(int time)
(0003) {     
(0004)  do
(0005)       time--;
_Delayus:
  time                 --> R16
      55 5001      SUBI	R16,1
      56 4010      SBCI	R17,0
(0006)  while(time>1);
      57 E081      LDI	R24,1
      58 E090      LDI	R25,0
      59 1780      CP	R24,R16
      5A 0791      CPC	R25,R17
      5B F3CC      BLT	0x0055
      5C 9508      RET
_Delayms:
  time                 --> R20
      5D 934A      ST	R20,-Y
      5E 935A      ST	R21,-Y
      5F 01A8      MOVW	R20,R16
(0007) }	  
(0008) void Delayms(unsigned int time)
(0009) {
      60 C005      RJMP	0x0066
(0010)  while(time!=0)
(0011) 	  {		
(0012) 	   Delayus(1000);
      61 EE08      LDI	R16,0xE8
      62 E013      LDI	R17,3
      63 DFF1      RCALL	_Delayus
(0013) 	   time--;
      64 5041      SUBI	R20,1
      65 4050      SBCI	R21,0
      66 3040      CPI	R20,0
      67 0745      CPC	R20,R21
      68 F7C1      BNE	0x0061
      69 9159      LD	R21,Y+
      6A 9149      LD	R20,Y+
      6B 9508      RET
FILE: G:\燕洪成\gra_des\exper\spi\spi_master\spi.c
(0001) // **************************************************************
(0002) // ***         实验:        SPI Interface  Master            ***
(0003) // ***                       2007年10月13日                   ***
(0004) // ***         目标MCU:MEGA168v     晶振:内部  8MHZ          ***
(0005) // **************************************************************
(0006) //set_bit:PORTD |=(1<<PORTD3);
(0007) //clr_bit:PORTD &=~(1<<PORTD3);
(0008) #include<iom168v.h>
(0009) #include<macros.h>
(0010) #include<myfun.h>
(0011) 
(0012) //*************************************************
(0013) //******************  USART  **********************
(0014) //*************************************************
(0015) #define USART_DDR DDRD
(0016) #define DDR_TX DDD1
(0017) #define USART_PORT PORTD
(0018) #define USART_RX PORTD0
(0019) //***********串口初始化******************************* 
(0020) //内部8Mhz频率,设置波特率9.6k,8位数据位,
(0021) //无校验,1位停止位
(0022) void USART_Init(void) 
(0023) {  
(0024)   USART_DDR |=(1<<DDR_TX);   //set TX output
_USART_Init:
      6C 9A51      SBI	0x0A,1
(0025)   USART_PORT |=(1<<USART_RX);  //RX pull up 
      6D 9A58      SBI	0x0B,0
(0026)    
(0027)   UCSR0B = 0x00; //设置波特率之前先关闭串口
      6E 2422      CLR	R2
      6F 9220 00C1 STS	0x00C1,R2
(0028)   UCSR0A = 0x00;
      71 9220 00C0 STS	0x00C0,R2
(0029)   UBRR0H=0;
      73 9220 00C5 STS	0x00C5,R2
(0030)   UBRR0L=51;
      75 E383      LDI	R24,0x33
      76 9380 00C4 STS	0x00C4,R24
(0031)   //UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);//enable
(0032)   UCSR0B=(1<<RXEN0)|(1<<TXEN0);
      78 E188      LDI	R24,0x18
      79 9380 00C1 STS	0x00C1,R24
(0033)   UCSR0C=(1<<UCSZ00)|(1<<UCSZ01);//8 data,1 stop 
      7B E086      LDI	R24,6
      7C 9380 00C2 STS	0x00C2,R24
      7E 9508      RET
(0034) }
(0035)  
(0036) //***************串口发送数据函数***************************
(0037) void USART_Transmit(unsigned char data)  //查询方式发送接收字符函数 
(0038)  { 
(0039)   while( !(UCSR0A & (1<<UDRE0)))     //等待发送缓冲区为空
_USART_Transmit:
  data                 --> R16
      7F 9020 00C0 LDS	R2,0x00C0
      81 FE25      SBRS	R2,5
      82 CFFC      RJMP	_USART_Transmit
(0040)         ;                   
(0041)   UDR0 = data;
      83 9300 00C6 STS	0x00C6,R16
      85 9508      RET
(0042)  }   
(0043) //*************************************************
(0044) //**************** USART_over *********************
(0045) //*************************************************
(0046) //*************************************************//
(0047) //******************  SPI  ************************//
(0048) //*************************************************//
(0049) #define DDR_SPI DDRB
(0050) #define DDR_SS DDB2
(0051) #define DDR_MOSI DDB3
(0052) #define DDR_MISO DDB4
(0053) #define DDR_SCK DDB5
(0054) #define SPI_PORT PORTB
(0055) #define SPI_SS PORTB2
(0056) //**SPI_MasterInit()**//
(0057) void SPI_MasterInit(void)
(0058) {
(0059)  DDR_SPI = (1<<DDR_SS)|(1<<DDR_MOSI)|(1<<DDR_SCK);//Port initialize 
_SPI_MasterInit:
      86 E28C      LDI	R24,0x2C
      87 B984      OUT	0x04,R24
(0060)  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//enable SPI,Master,fosc/16
      88 E581      LDI	R24,0x51
      89 BD8C      OUT	0x2C,R24
      8A 9508      RET
(0061) }
(0062) //**SPI_MasterTransmit()**//
(0063) void SPI_MasterTransmit(unsigned char cData)
(0064) {
(0065)  SPI_PORT &=~(1<<SPI_SS);
_SPI_MasterTransmit:
  cData                --> R16
      8B 982A      CBI	0x05,2
(0066)  SPDR = cData;//启动数据传输
      8C BD0E      OUT	0x2E,R16
(0067)  while(!(SPSR & (1<<SPIF)))//等待传输结束
      8D B42D      IN	R2,0x2D
      8E FE27      SBRS	R2,7
      8F CFFD      RJMP	0x008D
(0068)       ;
(0069)  SPI_PORT |=(1<<SPI_SS);
      90 9A2A      SBI	0x05,2
      91 9508      RET
(0070) }
(0071) //**SPI_MasterReceive()**//
(0072) unsigned char SPI_MasterReceive(void)
(0073) {
(0074)  SPI_MasterTransmit(0x00);
_SPI_MasterReceive:
      92 2700      CLR	R16
      93 DFF7      RCALL	_SPI_MasterTransmit
(0075)  return SPDR;
      94 B50E      IN	R16,0x2E
      95 9508      RET
(0076) }
(0077) //**********中断服务程序*********************
(0078) /*#pragma interrupt_handler SPI_ovf_isr:18
(0079) void SPI_ovf_isr(void)
(0080) {
(0081)  unsigned char temp_data;
(0082)  temp_data=SPDR;
(0083)  USART_Transmit(temp_data);
(0084) }*/
(0085) //*************************************************//
(0086) //******************  SPI_over  *******************//
(0087) //*************************************************//
(0088) 
(0089) //*************************************************
(0090) //******************   INT   **********************
(0091) //*************************************************
(0092) //**INT_Init()**//
(0093) void INT_Init()
(0094) {
(0095)  DDRD &= ~(1<<DDD2);//clr,input
_INT_Init:
      96 9852      CBI	0x0A,2
(0096)  EICRA |= (1<<ISC01);//h2l trig
      97 9180 0069 LDS	R24,0x0069
      99 6082      ORI	R24,2
      9A 9380 0069 STS	0x0069,R24
(0097)  EIMSK |= (1<<INT0);//set INT0 open
      9C 9AE8      SBI	0x1D,0
      9D 9508      RET
_INT0_ovf_isr:
  temp_data            --> R10
      9E 940E 00B1 CALL	push_lset
      A0 92AA      ST	R10,-Y
      A1 92BA      ST	R11,-Y
(0098) }
(0099) #pragma interrupt_handler INT0_ovf_isr:2  
(0100) void INT0_ovf_isr(void)
(0101) {
(0102)    unsigned char temp_data;
(0103)    temp_data=SPI_MasterReceive();
      A2 DFEF      RCALL	_SPI_MasterReceive
      A3 2EA0      MOV	R10,R16
(0104)    USART_Transmit(temp_data);  
      A4 DFDA      RCALL	_USART_Transmit
      A5 90B9      LD	R11,Y+
      A6 90A9      LD	R10,Y+
      A7 940E 00C8 CALL	pop_lset
      A9 9518      RETI
(0105) }
(0106) //*************************************************
(0107) //****************** INT_over *********************
(0108) //*************************************************
(0109) 
(0110) void main(void)
(0111) {
(0112)  CLI();
_main:
      AA 94F8      BCLR	7
(0113)  INT_Init();
      AB DFEA      RCALL	_INT_Init
(0114)  USART_Init();
      AC DFBF      RCALL	_USART_Init
(0115)  SPI_MasterInit();
      AD DFD8      RCALL	_SPI_MasterInit
(0116)  SEI();
      AE 9478      BSET	7
(0117)  
(0118)  while(1)
FILE: <library>
      AF CFFF      RJMP	0x00AF
      B0 9508      RET
push_lset:
      B1 93FA      ST	R31,-Y
      B2 93EA      ST	R30,-Y
      B3 93BA      ST	R27,-Y
      B4 93AA      ST	R26,-Y
      B5 939A      ST	R25,-Y
      B6 938A      ST	R24,-Y
      B7 933A      ST	R19,-Y
      B8 932A      ST	R18,-Y
      B9 931A      ST	R17,-Y
      BA 930A      ST	R16,-Y
      BB 929A      ST	R9,-Y
      BC 928A      ST	R8,-Y
      BD 927A      ST	R7,-Y
      BE 926A      ST	R6,-Y
      BF 925A      ST	R5,-Y
      C0 924A      ST	R4,-Y
      C1 923A      ST	R3,-Y
      C2 922A      ST	R2,-Y
      C3 921A      ST	R1,-Y
      C4 920A      ST	R0,-Y
      C5 B60F      IN	R0,0x3F
      C6 920A      ST	R0,-Y
      C7 9508      RET
pop_lset:
      C8 9009      LD	R0,Y+
      C9 BE0F      OUT	0x3F,R0
      CA 9009      LD	R0,Y+
      CB 9019      LD	R1,Y+
      CC 9029      LD	R2,Y+
      CD 9039      LD	R3,Y+
      CE 9049      LD	R4,Y+
      CF 9059      LD	R5,Y+
      D0 9069      LD	R6,Y+
      D1 9079      LD	R7,Y+
      D2 9089      LD	R8,Y+
      D3 9099      LD	R9,Y+
      D4 9109      LD	R16,Y+
      D5 9119      LD	R17,Y+
      D6 9129      LD	R18,Y+
      D7 9139      LD	R19,Y+
      D8 9189      LD	R24,Y+
      D9 9199      LD	R25,Y+
      DA 91A9      LD	R26,Y+
      DB 91B9      LD	R27,Y+
      DC 91E9      LD	R30,Y+
      DD 91F9      LD	R31,Y+
      DE 9508      RET

⌨️ 快捷键说明

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