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

📄 zhw.lst

📁 mega128的串口发送文件.可以发送0X55上位机使用串口调试工具就可以接收了.
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0399 2422      CLR	R2
    039A BA27      OUT	0x17,R2
(0010)  
(0011)  PORTC = 0x00;            //m103 output only
    039B BA25      OUT	0x15,R2
(0012)  DDRC  = 0xFF;
    039C BB84      OUT	0x14,R24
(0013)  
(0014)  PORTD = 0x7F;
    039D E78F      LDI	R24,0x7F
    039E BB82      OUT	0x12,R24
(0015)  DDRD  = 0x00;
    039F BA21      OUT	0x11,R2
(0016)  
(0017)  DDRE  = 0xFC;
    03A0 EF8C      LDI	R24,0xFC
    03A1 B982      OUT	0x02,R24
(0018)  PORTE = 0x0B;
    03A2 E08B      LDI	R24,0xB
    03A3 B983      OUT	0x03,R24
(0019)  DDRE  = 0x00;
    03A4 B822      OUT	0x02,R2
(0020)  
(0021)  PORTF = 0xFF;
    03A5 EF8F      LDI	R24,0xFF
    03A6 93800062  STS	0x62,R24
(0022)  DDRF  = 0x00;
    03A8 92200061  STS	0x61,R2
(0023)  
(0024)  PORTG = 0x00;
    03AA 92200065  STS	0x65,R2
(0025)  
(0026)  DDRB |= 0XFF;			  //PB.4/PB.5/PB.6按键输出
    03AC B387      IN	R24,0x17
    03AD 6F8F      ORI	R24,0xFF
    03AE BB87      OUT	0x17,R24
(0027)  
(0028)  DDRF |= 0xF0;			  //CS1~CS4 输出
    03AF 91800061  LDS	R24,0x61
    03B1 6F80      ORI	R24,0xF0
    03B2 93800061  STS	0x61,R24
(0029) // DDRF &= 0xFE;		  //MIC输入
(0030)  
(0031)  DDRG |= 0x07;			  //ALE/RD/WE输出
    03B4 91800064  LDS	R24,0x64
    03B6 6087      ORI	R24,7
    03B7 93800064  STS	0x64,R24
(0032)  DDRG &= 0xE7;			  //DDRG.3,DDRG.4输入
    03B9 91800064  LDS	R24,0x64
    03BB 7E87      ANDI	R24,0xE7
    03BC 93800064  STS	0x64,R24
(0033)   
(0034)  DDRD |= 0x70;			  //LCD_RS/LCD_RST/LCD_CS输出
    03BE B381      IN	R24,0x11
    03BF 6780      ORI	R24,0x70
    03C0 BB81      OUT	0x11,R24
(0035)  DDRD |= 0X01;			  //SCK I2C时钟线输出 
    03C1 9A88      SBI	0x11,0
(0036)  DDRD |= 0X08;			  //OE 输出0
    03C2 9A8B      SBI	0x11,3
(0037)   
(0038)  DDRD |= 0x80;			  //A16输出0
    03C3 9A8F      SBI	0x11,7
(0039)  PORTD&= 0x7F;
    03C4 B382      IN	R24,0x12
    03C5 778F      ANDI	R24,0x7F
    03C6 BB82      OUT	0x12,R24
    03C7 9508      RET
(0040)  
(0041) 
(0042) }
(0043) 
(0044) 
(0045) void spi_init(void)
(0046) {
(0047)  DDRB  |=0x07;
_spi_init:
    03C8 B387      IN	R24,0x17
    03C9 6087      ORI	R24,7
    03CA BB87      OUT	0x17,R24
(0048)  PORTB &=0xf8; 	   				//选择3548
    03CB B388      IN	R24,0x18
    03CC 7F88      ANDI	R24,0xF8
    03CD BB88      OUT	0x18,R24
(0049)  SPCR = 0x54; 					//setup SPI,SPI使能,主机模式,为1/4分频
    03CE E584      LDI	R24,0x54
    03CF B98D      OUT	0x0D,R24
(0050)  SPSR= 0x01; 					//setup SPI  SPI选择加速,为1/2分频
    03D0 E081      LDI	R24,1
    03D1 B98E      OUT	0x0E,R24
    03D2 9508      RET
(0051) }
(0052) 
(0053) void uart0_init(void)
(0054) {
(0055)  UCSR0B = 0x00; 	   			  //disable while setting baud rate
_uart0_init:
    03D3 2422      CLR	R2
    03D4 B82A      OUT	0x0A,R2
(0056)  UCSR0A = 0x00;					  //发送等待缓冲器
    03D5 B82B      OUT	0x0B,R2
(0057)  UCSR0C = 0x06; 				  //异步通信,8位数据
    03D6 E086      LDI	R24,6
    03D7 93800095  STS	0x95,R24
(0058)  UBRR0L = 0x5F; 				  //0x08; //set baud rate lo 9600
    03D9 E58F      LDI	R24,0x5F
    03DA B989      OUT	0x09,R24
(0059)  UBRR0H = 0x00; 				  //set baud rate hi
    03DB 92200090  STS	0x90,R2
(0060) // UCSR0B =0X00;
(0061)  UCSR0B = 0x98; 				  //接收结束中断使能,接收使能,发送使能
    03DD E988      LDI	R24,0x98
    03DE B98A      OUT	0x0A,R24
    03DF 9508      RET
(0062) }
(0063) 
(0064) //-------------------------------------------------------------------------------
(0065) /*
(0066) MCU初始化
(0067) */
(0068) //-------------------------------------------------------------------------------
(0069) //call this routine to initialize all peripherals
(0070) void init_devices(void)
(0071) {
(0072)     
(0073)     CLI();
_init_devices:
    03E0 94F8      BCLR	7
(0074)    
(0075)     XDIV=0x00 ;
    03E1 2422      CLR	R2
    03E2 BE2C      OUT	0x3C,R2
(0076)   
(0077)   //timer1_init();
(0078)      port_init();
    03E3 DFB1      RCALL	_port_init
(0079)     //	
(0080)     spi_init();
    03E4 DFE3      RCALL	_spi_init
(0081)     //
(0082)     uart0_init();
    03E5 DFED      RCALL	_uart0_init
(0083)     //
(0084)    // adc_init();
(0085)     
(0086)    // int_isr_init();
(0087)     //中断设置
(0088)     
(0089)    // Initial_3544();
(0090)     //
(0091)    // i2c_init();
(0092)     LCD_init();
    03E6 940E0389  CALL	_LCD_init
(0093)     //MCUCR = 0x00;//电源管理控制寄存器
(0094)     
(0095)     TIMSK=0x04 ;
    03E8 E084      LDI	R24,4
    03E9 BF87      OUT	0x37,R24
(0096)     
(0097)     ETIMSK=0x00 ;
    03EA 2422      CLR	R2
    03EB 9220007D  STS	0x7D,R2
(0098)     
(0099)     MCUCR=0xc0 ;
    03ED EC80      LDI	R24,0xC0
    03EE BF85      OUT	0x35,R24
(0100)     
(0101)     
(0102)     //1100 0000									   
(0103)     XMCRA=0x0e ;
    03EF E08E      LDI	R24,0xE
    03F0 9380006D  STS	0x6D,R24
(0104)     // 读/写操作插入2个等待周期。输出新地址之前还要插入1个等待周期 
(0105)     //- SRL2 SRL1 SRL0 SRW01 SRW00 SRW11 -	
(0106)     //7------------------------0
(0107) 	
(0108)     XMCRB=0 ;
    03F2 9220006C  STS	0x6C,R2
(0109)                      //(1<<XMBK);				   // 使能外部扩展随机存储器总线保持功能 
(0110)                      //XMBK - - - - XMM2 XMM1 XMM0    								   
(0111)                      //XMBK 外部存储器总线保持功能使能
(0112)                      //XMM2~0 外部存储器高地址屏蔽
(0113)     
(0114)     UCSR0B|=0x80 ;
    03F4 9A57      SBI	0x0A,7
(0115)     //开串口接收中断  	
(0116)     SEI();
    03F5 9478      BSET	7
    03F6 9508      RET
_uart0_rx_isr:
  status               --> R16
  data                 --> R16
    03F7 930A      ST	R16,-Y
    03F8 B70F      IN	R16,0x3F
    03F9 930A      ST	R16,-Y
FILE: D:\new_sd\uart.c
(0001) 
(0002) #include "GLO.H"
(0003) #include "uart.h"
(0004) //--------------------------------------------------------------------
(0005) /*
(0006) uart0接收结束中断   与PL-2303通信
(0007) */
(0008) //中断向量             
(0009) //协议帧格式
(0010) //SYNC + LENGTH(2 byte) + COMMAND + DATA + CHECKSUM
(0011) //
(0012) //--------------------------------------------------------------------
(0013) #pragma interrupt_handler uart0_rx_isr:19 
(0014) 
(0015) void uart0_rx_isr(void)
(0016) {
(0017)     unsigned char status,data;
(0018)     status = UCSR0A;
    03FA B10B      IN	R16,0x0B
(0019)     data = UDR0;
    03FB B10C      IN	R16,0x0C
(0020)    /* if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
(0021) 	{
(0022) 	}
(0023)       //  PORTA = led_7[data];
(0024) 	*/
(0025) 	data = UDR0;
    03FC B10C      IN	R16,0x0C
    03FD 9109      LD	R16,Y+
    03FE BF0F      OUT	0x3F,R16
    03FF 9109      LD	R16,Y+
    0400 9518      RETI
(0026) }
(0027) //--------------------------------------------------------------------
(0028) /*
(0029) uart0 寄存器空中断(发送中断)
(0030) */
(0031) //--------------------------------------------------------------------
(0032) /*
(0033) #pragma interrupt_handler uart0_udre_isr:20
(0034)  
(0035) void uart0_udre_isr(void)
(0036) {
(0037)    	while (!(UCSRA & DATA_REGISTER_EMPTY));     // 等待发送寄存器空			                
(0038) 	UDR = data;   
(0039) 	
(0040) }
(0041) */
(0042) 
(0043) void USART_Transmit(unsigned char data)
(0044) {
(0045) 	while (!(UCSR0A & DATA_REGISTER_EMPTY));     // 等待发送寄存器空			                
_USART_Transmit:
  data                 --> R16
    0401 9B5D      SBIS	0x0B,5
    0402 CFFE      RJMP	_USART_Transmit
(0046) 	UDR0 = data;                                 // 发送数据			        
    0403 B90C      OUT	0x0C,R16
    0404 9508      RET
_SD_Initialize:
  recbuf               --> Y+0
  ret                  --> R10
    0405 940E0CFC  CALL	push_gset3
    0407 9724      SBIW	R28,4
FILE: D:\new_sd\SD\SD\sddriver.c
(0001) /*******************************************************************************************************
(0002) ** Descriptions:		sd 卡驱动软件包: SD卡物理层 用户API函数
(0003) ********************************************************************************************************/
(0004) #include    "D:\new_sd\define.h"
(0005) 
(0006) 
(0007) /* SD卡信息结构体变量 the information structure variable of SD Card */
(0008) sd_struct sds;			
(0009) 
(0010) /* 超时时间单位表(单位:0.000000001ns) timeout unit table */
(0011) const uint32 time_unit[8] = {1000000000,100000000,10000000,
(0012) 							 1000000,100000,10000,1000,100};
(0013) 
(0014) /* 超时时间表 timeout value table */							 
(0015) const uint8 time_value[16] = { 0,10,12,13,15,20,25,30,
(0016)                               35,40,45,50,55,60,70,80};
(0017)  
(0018) /* 超时时间因数表 timeout factor table */                              
(0019) const uint8 r2w_fator[6] = {1,2,4,8,16,32};                           
(0020)     
(0021) /********************************************************************************************
(0022) 		
(0023) 用户API函数:  初始化,读,写,擦 SD卡  User API Function: Initialize,read,write,erase SD Card 
(0024) 				
(0025) ********************************************************************************************/
(0026) 
(0027) 				
(0028) /*******************************************************************************************************************
(0029) ** 函数名称: INT8U SD_Initialize()				Name:	  INT8U SD_Initialize()
(0030) ** 功能描述: 初始化SD卡							Function: initialize sd card
(0031) ** 输   入: 无									Input:	  NULL
(0032) ** 输   出: 0:   正确    >0:   错误码		  	Output:	  0:  right		>0:  error code
(0033) ********************************************************************************************************************/
(0034) uint8 SD_Initialize(void)
(0035) {
(0036) 	uint8 recbuf[4],ret;
(0037)     
(0038)     SD_HardWareInit();					    		/* 初始化读写SD卡的硬件条件 Initialize the hardware that access SD Card */
    0408 940E0BEE  CALL	_SD_HardWareInit
(0039) 
(0040)     SPI_CS_Assert();								/* 1. 置CS为低 assert CS */  
    040A 940E0BF3  CALL	_SPI_CS_Assert
(0041) 	SD_SPIDelay(30);								/* 2. 至少延时 74 clock delay more than 74 clock */
    040C E10E      LDI	R16,0x1E
    040D 940E0BDF  CALL	_SD_SPIDelay
(0042)     SPI_CS_Deassert();								/* 3. 置CS为高 dessert CS */
    040F 940E0BF4  CALL	_SPI_CS_Deassert
(0043)     SD_SPIDelay(3);									/* 4. 延时2(8 clock) delay 2(8 clock) */
    0411 E003      LDI	R16,3
    0412 940E0BDF  CALL	_SD_SPIDelay
(0044)     
(0045)     ret = SD_ResetSD();								/* 5. 发出CMDO命令复位SD卡 send CMD0 command to reset sd card */
    0414 940E0803  CALL	_SD_ResetSD
    0416 2EA0      MOV	R10,R16
(0046)     if (ret != SD_NO_ERR)
    0417 2300      TST	R16
    0418 F009      BEQ	0x041A
(0047)         return ret;									
    0419 C027      RJMP	0x0441
(0048)  	
(0049)  	ret = SD_ActiveInit();							/* 6. 激活卡进入初始化过程. active card initialize process */
    041A D186      RCALL	_SD_ActiveInit
    041B 2EA0      MOV	R10,R16
(0050)  	if (ret != SD_NO_ERR)
    041C 2300      TST	R16
    041D F009      BEQ	0x041F
(0051)  		return ret;
    041E C022      RJMP	0x0441
(0052)         
(0053)    	ret = SD_ReadOCR(4, recbuf);  					/* 7. 读OCR寄存器,查询卡支持的电压值 read OCR register,get the supported voltage */
    041F 019E      MOVW	R18,R28
    0420 E004      LDI	R16,4
    0421 940E08F6  CALL	_SD_ReadOCR
    0423 2EA0      MOV	R10,R16
(0054)     if (ret != SD_NO_ERR)
    0424 2300      TST	R16
    0425 F009      BEQ	0x0427
(0055)         return ret;
    0426 C01A      RJMP	0x0441
(0056)     
(0057)     if ((recbuf[1] & MSK_OCR_33) != MSK_OCR_33)
    0427 8189      LDD	R24,Y+1
    0428 7C80      ANDI	R24,0xC0
    0429 3C80      CPI	R24,0xC0
    042A F011      BEQ	0x042D
(0058)         return SD_ERR_VOL_NOTSUSP;					/* 不支持3.3V,返回错误码  not support 3.3V,return error code */
    042B E004      LDI	R16,4
    042C C014      RJMP	0x0441
(0059)     
(0060)     SPI_ClkToMax();									/* 8. 设置SPI时钟到最大值 set SPI clock to maximum */
    042D 940E0BF0  CALL	_SPI_ClkToMax
(0061)         
(0062) #if SD_CRC_EN        
(0063)     ret = SD_EnableCRC(1);							/* 使能CRC校验 enable CRC check */
    042F E001      LDI	R16,1
    0430 940E0931  CALL	_SD_EnableCRC

⌨️ 快捷键说明

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