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

📄 dual_system_m16.lst

📁 meg16 的所有功能实例
💻 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 36E1      CPI	R30,0x61
    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 940E0064  CALL	_main
_exit:
    004A CFFF      RJMP	_exit
FILE: D:\MYWORK~1\我的小设计\AVR开发板光盘\程序范例\Mega16程序包\8.双机通信实验_M16\main.c
(0001) //ICC-AVR application builder : 2006-6-20 9:25:59
(0002) // Target : M16
(0003) // Crystal: 1Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) #include "main.h"
(0008) 
(0009) uint8 Buffer;
(0010) 
(0011) void Delay_us(unsigned int time)
(0012) {
(0013) while(time--);
_Delay_us:
  time                 --> R16
    004B 0118      MOVW	R2,R16
    004C 5001      SUBI	R16,1
    004D 4010      SBCI	R17,0
    004E 2022      TST	R2
    004F F7D9      BNE	0x004B
    0050 2033      TST	R3
    0051 F7C9      BNE	0x004B
    0052 9508      RET
_Delay_ms:
  time                 --> R20
    0053 940E00AF  CALL	push_gset1
    0055 01A8      MOVW	R20,R16
(0014) }
(0015) 
(0016) void Delay_ms(unsigned int time)
(0017) {
    0056 C003      RJMP	0x005A
(0018) while(time--)
(0019) 	{
(0020) 	Delay_us(10000);
    0057 E100      LDI	R16,0x10
    0058 E217      LDI	R17,0x27
    0059 DFF1      RCALL	_Delay_us
    005A 011A      MOVW	R2,R20
    005B 5041      SUBI	R20,1
    005C 4050      SBCI	R21,0
    005D 2022      TST	R2
    005E F7C1      BNE	0x0057
    005F 2033      TST	R3
    0060 F7B1      BNE	0x0057
    0061 940E00B2  CALL	pop_gset1
    0063 9508      RET
(0021) 	}
(0022) }
(0023) void main(void)
(0024) {
(0025)  Delay_ms(1);
_main:
    0064 E001      LDI	R16,1
    0065 E010      LDI	R17,0
    0066 DFEC      RCALL	_Delay_ms
(0026)  SPI_SS_IN;
    0067 98BC      CBI	0x17,4
    0068 9AC4      SBI	0x18,4
(0027)  SPI_DO_OUT;
    0069 9ABD      SBI	0x17,5
(0028)  SPI_DI_IN;
    006A 98BE      CBI	0x17,6
    006B 9AC6      SBI	0x18,6
(0029)  SPI_CLK_IN;
    006C 98BF      CBI	0x17,7
    006D 9AC7      SBI	0x18,7
(0030)  
(0031)  uart_init();                 //TART初始化
    006E D00A      RCALL	_uart_init
(0032)  SEI();                       //全局中断使能
    006F 9478      BSET	7
(0033)  
(0034)  
(0035)  for(;;)
(0036)  {
(0037)   if(SS)
    0070 9BB4      SBIS	0x16,4
    0071 CFFE      RJMP	0x0070
(0038)    {
(0039)     
(0040) 	Buffer=Spi_Send(0XF0);
    0072 EF00      LDI	R16,0xF0
    0073 D016      RCALL	_Spi_Send
    0074 93000060  STS	Buffer,R16
(0041) 	
(0042) 	USART_TXD(Buffer);
    0076 D00B      RCALL	_USART_TXD
    0077 CFF8      RJMP	0x0070
    0078 9508      RET
(0043)    } 
(0044)  }
(0045) }
(0046) 
(0047) //===============================================================
(0048) void uart_init(void)          //UART初始化
(0049)   { 
(0050)     //设置侦格式
(0051) 	//异步,8位数据,无奇偶校验,一个停止位,无倍速
(0052) 	UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
_uart_init:
    0079 E886      LDI	R24,0x86
    007A BD80      OUT	0x20,R24
(0053) 	
(0054)     //设置波特率
(0055)     UBRRL= (F_osc/Baud_rate/16-1)%256;
    007B E189      LDI	R24,0x19
    007C B989      OUT	0x09,R24
(0056)     UBRRH= (F_osc/Baud_rate/16-1)/256;
    007D 2422      CLR	R2
    007E BC20      OUT	0x20,R2
(0057) 
(0058) 	//使能接收中断,使能接收,使能发送
(0059)     UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    007F E988      LDI	R24,0x98
    0080 B98A      OUT	0x0A,R24
    0081 9508      RET
(0060)   }
(0061)   
(0062) 
(0063) //===============================================================
(0064) void USART_TXD(uint8 data) //发送采用查询方式
(0065) {
(0066) 	while( !(UCSRA & BIT(UDRE)) );
_USART_TXD:
  data                 --> R16
    0082 9B5D      SBIS	0x0B,5
    0083 CFFE      RJMP	_USART_TXD
(0067) 	UDR=data;
    0084 B90C      OUT	0x0C,R16
(0068) 	while( !(UCSRA & BIT(TXC )) );
    0085 9B5E      SBIS	0x0B,6
    0086 CFFE      RJMP	0x0085
(0069) 	UCSRA|=BIT(TXC);
    0087 9A5E      SBI	0x0B,6
    0088 9508      RET
(0070) }
(0071) 
(0072) //=======================================================================
(0073) 
(0074) #pragma interrupt_handler USART_RXC:12
(0075) void USART_RXC(void)
(0076) {
_USART_RXC:
    0089 9518      RETI
_Spi_Send:
  temp                 --> R20
  i                    --> R22
  dat                  --> R16
    008A 940E00AD  CALL	push_gset2
(0077) 
(0078) }
(0079) 
(0080) //*****************************************************************************************
(0081) //函数名:Spi_send(uint8 dat)
(0082) //输入:发送的数据
(0083) //输出:无
(0084) //功能描述:SPI从模式发送一个字节,先发送高位(发送的同时接收)
(0085) //*****************************************************************************************
(0086) uint8 Spi_Send(uint8 dat)
(0087) {
(0088) 	uint8 i,temp;
(0089) 	temp = 0;
    008C 2744      CLR	R20
(0090) 
(0091) 	for(i=0; i<8; i++)
    008D 2766      CLR	R22
    008E C00F      RJMP	0x009E
(0092) 	{   
(0093) 		if(dat & 0x80)
    008F FF07      SBRS	R16,7
    0090 C002      RJMP	0x0093
(0094) 		{
(0095) 			MOSI_1;
    0091 9AC5      SBI	0x18,5
(0096) 		}
    0092 C001      RJMP	0x0094
(0097) 		else MOSI_0;
    0093 98C5      CBI	0x18,5
(0098) 		dat <<= 1;
    0094 0F00      LSL	R16
(0099) 		while(!SCK);
    0095 9BB7      SBIS	0x16,7
    0096 CFFE      RJMP	0x0095
(0100) 		while(SCK);
    0097 99B7      SBIC	0x16,7
    0098 CFFE      RJMP	0x0097
(0101) 
(0102) 		temp <<= 1;
    0099 0F44      LSL	R20
(0103) 		if(MISO)temp++; 
    009A 9BB6      SBIS	0x16,6
    009B C001      RJMP	0x009D
    009C 9543      INC	R20
    009D 9563      INC	R22
    009E 3068      CPI	R22,0x8
    009F F378      BCS	0x008F
(0104) 	
(0105) 	}
(0106) 	return temp;
FILE: <library>
    00A0 2F04      MOV	R16,R20
    00A1 940E00A4  CALL	pop_gset2
    00A3 9508      RET
pop_gset2:
    00A4 E0E2      LDI	R30,2
    00A5 940C00B3  JMP	pop
push_gset5:
    00A7 92FA      ST	R15,-Y
    00A8 92EA      ST	R14,-Y
push_gset4:
    00A9 92DA      ST	R13,-Y
    00AA 92CA      ST	R12,-Y
push_gset3:
    00AB 92BA      ST	R11,-Y
    00AC 92AA      ST	R10,-Y
push_gset2:
    00AD 937A      ST	R23,-Y
    00AE 936A      ST	R22,-Y
push_gset1:
    00AF 935A      ST	R21,-Y
    00B0 934A      ST	R20,-Y
    00B1 9508      RET
pop_gset1:
    00B2 E0E1      LDI	R30,1
pop:
    00B3 9149      LD	R20,Y+
    00B4 9159      LD	R21,Y+
    00B5 FDE0      SBRC	R30,0
    00B6 9508      RET
    00B7 9169      LD	R22,Y+
    00B8 9179      LD	R23,Y+
    00B9 FDE1      SBRC	R30,1
    00BA 9508      RET
    00BB 90A9      LD	R10,Y+
    00BC 90B9      LD	R11,Y+
    00BD FDE2      SBRC	R30,2
    00BE 9508      RET
    00BF 90C9      LD	R12,Y+
    00C0 90D9      LD	R13,Y+
    00C1 FDE3      SBRC	R30,3
    00C2 9508      RET
    00C3 90E9      LD	R14,Y+
    00C4 90F9      LD	R15,Y+
    00C5 9508      RET

⌨️ 快捷键说明

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