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

📄 comunication.lst

📁 详细介绍M8两版间通讯
💻 LST
字号:
__text_start:
__start:
    0014 E5CF      LDI	R28,0x5F
    0015 E0D4      LDI	R29,4
    0016 BFCD      OUT	0x3D,R28
    0017 BFDE      OUT	0x3E,R29
    0018 51C0      SUBI	R28,0x10
    0019 40D0      SBCI	R29,0
    001A EA0A      LDI	R16,0xAA
    001B 8308      STD	Y+0,R16
    001C 2400      CLR	R0
    001D E6E2      LDI	R30,0x62
    001E E0F0      LDI	R31,0
    001F E010      LDI	R17,0
    0020 36E2      CPI	R30,0x62
    0021 07F1      CPC	R31,R17
    0022 F011      BEQ	0x0025
    0023 9201      ST	R0,Z+
    0024 CFFB      RJMP	0x0020
    0025 8300      STD	Z+0,R16
    0026 E2E6      LDI	R30,0x26
    0027 E0F0      LDI	R31,0
    0028 E6A0      LDI	R26,0x60
    0029 E0B0      LDI	R27,0
    002A E010      LDI	R17,0
    002B 32E8      CPI	R30,0x28
    002C 07F1      CPC	R31,R17
    002D F021      BEQ	0x0032
    002E 95C8      LPM
    002F 9631      ADIW	R30,1
    0030 920D      ST	R0,X+
    0031 CFF9      RJMP	0x002B
    0032 D001      RCALL	_main
_exit:
    0033 CFFF      RJMP	_exit
FILE: G:\Mega8程序\测试MegaOSCCAL\Main.c
(0001) #include <macros.h>
(0002) #include<iom8v.h>
(0003) 
(0004) extern unsigned char charInput;
(0005) 
(0006) extern void uart_init(void);
(0007) extern int puts(char *s);
(0008) extern void putchar(unsigned char c);
(0009) 
(0010) void delay_us(int time);
(0011) void delay_ms(unsigned int time);
(0012) 
(0013) void main(void)
(0014) {
(0015) 	unsigned char cTemp;
(0016) 	unsigned char i;
(0017) 	for(cTemp=0x80;cTemp!=0xff;cTemp++)
_main:
  i                    --> Y+1
  cTemp                --> R20
    0034 E840      LDI	R20,0x80
    0035 C00F      RJMP	0x0045
(0018) 	 {
(0019) 	 	CLI();
    0036 94F8      BCLR	7
(0020) 		OSCCAL=cTemp;
    0037 BF41      OUT	0x31,R20
(0021) 		uart_init();
    0038 D04E      RCALL	_uart_init
(0022) 		SEI();
    0039 9478      BSET	7
(0023) 		delay_ms(10);
    003A E00A      LDI	R16,0xA
    003B E010      LDI	R17,0
    003C D013      RCALL	_delay_ms
(0024) 		putchar('c');		
    003D E603      LDI	R16,0x63
    003E D030      RCALL	_putchar
(0025) 		putchar('f');
    003F E606      LDI	R16,0x66
    0040 D02E      RCALL	_putchar
(0026) 		delay_ms(500);
    0041 EF04      LDI	R16,0xF4
    0042 E011      LDI	R17,1
    0043 D00C      RCALL	_delay_ms
    0044 9543      INC	R20
    0045 3F4F      CPI	R20,0xFF
    0046 F779      BNE	0x0036
    0047 9508      RET
(0027) 	 }
(0028) }
(0029) 
(0030) 
(0031) void delay_us(int time)
(0032) 	 {
(0033)   	  do
(0034) 	  	{
(0035) 		 time--;
_delay_us:
  time                 --> R16
    0048 5001      SUBI	R16,1
    0049 4010      SBCI	R17,0
(0036) 		}
(0037)   	  while (time>1);
    004A E081      LDI	R24,1
    004B E090      LDI	R25,0
    004C 1780      CP	R24,R16
    004D 0791      CPC	R25,R17
    004E F3CC      BLT	0x0048
    004F 9508      RET
_delay_ms:
  time                 --> R20
    0050 D04F      RCALL	push_gset1
    0051 01A8      MOVW	R20,R16
(0038) 	 }
(0039) /*	  		    毫秒级延时程序			*/
(0040) void delay_ms(unsigned int time)
(0041) 	 {
    0052 C005      RJMP	0x0058
(0042) 	  while(time!=0)
(0043) 	  	  {
(0044) 		   delay_us(1000);
    0053 EE08      LDI	R16,0xE8
    0054 E013      LDI	R17,3
    0055 DFF2      RCALL	_delay_us
(0045) 		   time--;
    0056 5041      SUBI	R20,1
    0057 4050      SBCI	R21,0
    0058 3040      CPI	R20,0
    0059 0745      CPC	R20,R21
    005A F7C1      BNE	0x0053
    005B D047      RCALL	pop_gset1
    005C 9508      RET
_UartGet:
    005D D059      RCALL	push_lset
FILE: G:\Mega8程序\测试MegaOSCCAL\Uart.c
(0001) /*串口通信模块,使用之前,应该在Main 函数中对串口进行初始化,
(0002) 串口数据接收方式采用中断进行,振荡频率修正参数不在EEPROM的
(0003) 0x1ff0中,使用PonyProg可以测试得OSCCAL=0xA1*/
(0004) #include <iom8v.h>
(0005) #include <macros.h>
(0006) 
(0007) extern void rom_write(unsigned int Address,unsigned char Data);
(0008) extern unsigned rom_read(unsigned int Address);
(0009) 
(0010) #define fosc 8000000 //晶振8MHZ
(0011) #define baud 19200	 //波特率
(0012) //使用中断方式接收UART的输入字符
(0013) #pragma interrupt_handler UartGet:12
(0014) 
(0015) unsigned char charInput=0x00;
(0016) void UartGet(void)
(0017)  {
(0018)  	static char cAddr=0;
(0019)  	charInput=UDR;
    005E B02C      IN	R2,0x0C
    005F 92200060  STS	charInput,R2
(0020)  	if(charInput=='c')
    0061 2D82      MOV	R24,R2
    0062 3683      CPI	R24,0x63
    0063 F449      BNE	0x006D
(0021)  	 {
(0022)  		cAddr++;
    0064 91800061  LDS	R24,cAddr
    0066 5F8F      SUBI	R24,0xFF
    0067 93800061  STS	cAddr,R24
(0023)  		rom_write(cAddr,OSCCAL);
    0069 B721      IN	R18,0x31
    006A 2F08      MOV	R16,R24
    006B 2711      CLR	R17
    006C D023      RCALL	_rom_write
(0024)  	 }
    006D D060      RCALL	pop_lset
    006E 9518      RETI
(0025)  }
(0026) 	 
(0027) void putchar(unsigned char c)/*  		字符输出函数 		 */
(0028) 	 {while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    006F 9B5D      SBIS	0x0B,5
    0070 CFFE      RJMP	_putchar
(0029) 	  UDR=c;}	
    0071 B90C      OUT	0x0C,R16
    0072 9508      RET
(0030) unsigned char getchar(void)/*  	字符输入函数-查询方式 */
(0031)   	{
(0032) 	 while(!(UCSRA& (1<<RXC)));
_getchar:
    0073 9B5F      SBIS	0x0B,7
    0074 CFFE      RJMP	_getchar
(0033)      return UDR;
    0075 B10C      IN	R16,0x0C
    0076 9508      RET
_puts:
  s                    --> R20
    0077 D028      RCALL	push_gset1
    0078 01A8      MOVW	R20,R16
(0034) 	}
(0035) /*			字符串输出函数	   	 */	
(0036) int puts(char *s)
(0037) 	{
    0079 C005      RJMP	0x007F
(0038) 	while (*s)
(0039) 		{
(0040) 		putchar(*s);
    007A 01FA      MOVW	R30,R20
    007B 8100      LDD	R16,Z+0
    007C DFF2      RCALL	_putchar
(0041) 		s++;
    007D 5F4F      SUBI	R20,0xFF
    007E 4F5F      SBCI	R21,0xFF
    007F 01FA      MOVW	R30,R20
    0080 8020      LDD	R2,Z+0
    0081 2022      TST	R2
    0082 F7B9      BNE	0x007A
(0042) 		}	
(0043) 	return 1;
    0083 E001      LDI	R16,1
    0084 E010      LDI	R17,0
    0085 D01D      RCALL	pop_gset1
    0086 9508      RET
(0044) 	}
(0045) void uart_init(void)
(0046) {
(0047)  UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//允许接收中断、发送和接收
_uart_init:
    0087 E988      LDI	R24,0x98
    0088 B98A      OUT	0x0A,R24
(0048)  /*UBRRL=(fosc/16/(baud+1))%256;
(0049)  UBRRH=((fosc/16/(baud+1))/256)&0b01111111;*/
(0050)  UBRRL=(fosc/16/baud-1)%256;
    0089 E189      LDI	R24,0x19
    008A B989      OUT	0x09,R24
(0051)  UBRRH=((fosc/16/baud-1)/256)&0b01111111;
    008B 2422      CLR	R2
    008C BC20      OUT	0x20,R2
(0052)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    008D E886      LDI	R24,0x86
    008E BD80      OUT	0x20,R24
    008F 9508      RET
FILE: G:\Mega8程序\测试MegaOSCCAL\RW_eeprom.c
(0001) #include <iom8v.h>
(0002) void rom_write(unsigned int Address,unsigned  char Data)
(0003) 	 {
(0004) 	  while(EECR&(1<<EEWE));
_rom_write:
  Data                 --> R18
  Address              --> R16
    0090 99E1      SBIC	0x1C,1
    0091 CFFE      RJMP	_rom_write
(0005) 	  EEAR=Address;
    0092 BB1F      OUT	0x1F,R17
    0093 BB0E      OUT	0x1E,R16
(0006) 	  EEDR=Data;
    0094 BB2D      OUT	0x1D,R18
(0007) 	  EECR|=(1<<EEMWE);
    0095 9AE2      SBI	0x1C,2
(0008) 	  EECR|=(1<<EEWE);
    0096 9AE1      SBI	0x1C,1
    0097 9508      RET
(0009) 	  }
(0010) unsigned rom_read(unsigned int Address)
(0011) 		  {
(0012) 		   while(EECR&(1<<EEWE));
_rom_read:
  Address              --> R16
    0098 99E1      SBIC	0x1C,1
    0099 CFFE      RJMP	_rom_read
(0013) 		   EEAR=Address;
    009A BB1F      OUT	0x1F,R17
    009B BB0E      OUT	0x1E,R16
(0014) 		   EECR|=(1<<EERE);
    009C 9AE0      SBI	0x1C,0
(0015) 		   return EEDR;
FILE: <library>
    009D B30D      IN	R16,0x1D
    009E 2711      CLR	R17
    009F 9508      RET
push_gset1:
    00A0 935A      ST	R21,-Y
    00A1 934A      ST	R20,-Y
    00A2 9508      RET
pop_gset1:
    00A3 E0E1      LDI	R30,1
pop:
    00A4 9149      LD	R20,Y+
    00A5 9159      LD	R21,Y+
    00A6 FDE0      SBRC	R30,0
    00A7 9508      RET
    00A8 9169      LD	R22,Y+
    00A9 9179      LD	R23,Y+
    00AA FDE1      SBRC	R30,1
    00AB 9508      RET
    00AC 90A9      LD	R10,Y+
    00AD 90B9      LD	R11,Y+
    00AE FDE2      SBRC	R30,2
    00AF 9508      RET
    00B0 90C9      LD	R12,Y+
    00B1 90D9      LD	R13,Y+
    00B2 FDE3      SBRC	R30,3
    00B3 9508      RET
    00B4 90E9      LD	R14,Y+
    00B5 90F9      LD	R15,Y+
    00B6 9508      RET
push_lset:
    00B7 93FA      ST	R31,-Y
    00B8 93EA      ST	R30,-Y
    00B9 93BA      ST	R27,-Y
    00BA 93AA      ST	R26,-Y
    00BB 939A      ST	R25,-Y
    00BC 938A      ST	R24,-Y
    00BD 933A      ST	R19,-Y
    00BE 932A      ST	R18,-Y
    00BF 931A      ST	R17,-Y
    00C0 930A      ST	R16,-Y
    00C1 929A      ST	R9,-Y
    00C2 928A      ST	R8,-Y
    00C3 927A      ST	R7,-Y
    00C4 926A      ST	R6,-Y
    00C5 925A      ST	R5,-Y
    00C6 924A      ST	R4,-Y
    00C7 923A      ST	R3,-Y
    00C8 922A      ST	R2,-Y
    00C9 921A      ST	R1,-Y
    00CA 920A      ST	R0,-Y
    00CB B60F      IN	R0,0x3F
    00CC 920A      ST	R0,-Y
    00CD 9508      RET
pop_lset:
    00CE 9009      LD	R0,Y+
    00CF BE0F      OUT	0x3F,R0
    00D0 9009      LD	R0,Y+
    00D1 9019      LD	R1,Y+
    00D2 9029      LD	R2,Y+
    00D3 9039      LD	R3,Y+
    00D4 9049      LD	R4,Y+
    00D5 9059      LD	R5,Y+
    00D6 9069      LD	R6,Y+
    00D7 9079      LD	R7,Y+
    00D8 9089      LD	R8,Y+
    00D9 9099      LD	R9,Y+
    00DA 9109      LD	R16,Y+
    00DB 9119      LD	R17,Y+
    00DC 9129      LD	R18,Y+
    00DD 9139      LD	R19,Y+
    00DE 9189      LD	R24,Y+
    00DF 9199      LD	R25,Y+
    00E0 91A9      LD	R26,Y+
    00E1 91B9      LD	R27,Y+
    00E2 91E9      LD	R30,Y+
    00E3 91F9      LD	R31,Y+
    00E4 9508      RET

⌨️ 快捷键说明

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