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

📄 1.lst

📁 AVR mega16双机通讯实验 从机接受数据并发送到lcd1602上显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    0037 E5CF      LDI	R28,0x5F
    0038 E0D4      LDI	R29,4
    0039 BFCD      OUT	0x3D,R28
    003A BFDE      OUT	0x3E,R29
    003B 51CE      SUBI	R28,0x1E
    003C 40D0      SBCI	R29,0
    003D EA0A      LDI	R16,0xAA
    003E 8308      STD	Y+0,R16
    003F 2400      CLR	R0
    0040 E7E9      LDI	R30,0x79
    0041 E0F0      LDI	R31,0
    0042 E010      LDI	R17,0
    0043 37E9      CPI	R30,0x79
    0044 07F1      CPC	R31,R17
    0045 F011      BEQ	0x0048
    0046 9201      ST	R0,Z+
    0047 CFFB      RJMP	0x0043
    0048 8300      STD	Z+0,R16
    0049 E5E4      LDI	R30,0x54
    004A E0F0      LDI	R31,0
    004B E6A0      LDI	R26,0x60
    004C E0B0      LDI	R27,0
    004D E010      LDI	R17,0
    004E 36ED      CPI	R30,0x6D
    004F 07F1      CPC	R31,R17
    0050 F021      BEQ	0x0055
    0051 95C8      LPM
    0052 9631      ADIW	R30,1
    0053 920D      ST	R0,X+
    0054 CFF9      RJMP	0x004E
    0055 940E0073  CALL	_main
_exit:
    0057 CFFF      RJMP	_exit
FILE: E:\MYAVRW~1\SPI双~2\1.c
(0001) #include < iom16v.h>
(0002) #include <macros.h>
(0003) #include "lcd1602.h"
(0004) unsigned char disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
(0005) void delayms(void)
(0006) {
(0007) char a;
(0008) for(a=0;a<141;a++)
_delayms:
  a                    --> R16
    0058 2700      CLR	R16
    0059 C001      RJMP	0x005B
    005A 9503      INC	R16
    005B 380D      CPI	R16,0x8D
    005C F3E8      BCS	0x005A
    005D 9508      RET
_delay:
  b                    --> R20
  a                    --> R22
    005E 940E016C  CALL	push_gset2
    0060 01B8      MOVW	R22,R16
(0009) ;
(0010) }
(0011) void delay(int a)
(0012) {
(0013) int b;
(0014) for(b=0;b<a;b++)
    0061 2744      CLR	R20
    0062 2755      CLR	R21
    0063 C003      RJMP	0x0067
(0015) delayms();
    0064 DFF3      RCALL	_delayms
    0065 5F4F      SUBI	R20,0xFF
    0066 4F5F      SBCI	R21,0xFF
    0067 1746      CP	R20,R22
    0068 0757      CPC	R21,R23
    0069 F3D4      BLT	0x0064
    006A 940E0160  CALL	pop_gset2
    006C 9508      RET
(0016) }
(0017) void Spi_init()
(0018) {
(0019) DDRB|=(1<<6);
_Spi_init:
    006D 9ABE      SBI	0x17,6
(0020) SPCR=0xE3;
    006E EE83      LDI	R24,0xE3
    006F B98D      OUT	0x0D,R24
(0021) SPSR=0x00;
    0070 2422      CLR	R2
    0071 B82E      OUT	0x0E,R2
    0072 9508      RET
_main:
  str                  --> R20
    0073 9722      SBIW	R28,2
(0022) }
(0023) 
(0024) void main()
(0025) {
(0026) char *str="receive data :";
    0074 E64A      LDI	R20,0x6A
    0075 E050      LDI	R21,0
(0027) 
(0028) DDRA=0xFF;
    0076 EF8F      LDI	R24,0xFF
    0077 BB8A      OUT	0x1A,R24
(0029) PORTA=0x00;
    0078 2422      CLR	R2
    0079 BA2B      OUT	0x1B,R2
(0030) DDRB=0xFF;
    007A BB87      OUT	0x17,R24
(0031) PORTB=0x00;
    007B BA28      OUT	0x18,R2
(0032) DDRC=0x00;
    007C BA24      OUT	0x14,R2
(0033) PORTC=0x00;
    007D BA25      OUT	0x15,R2
(0034) DDRD=0x00;
    007E BA21      OUT	0x11,R2
(0035) PORTD=0x00;
    007F BA22      OUT	0x12,R2
(0036) 
(0037) 
(0038) SEI();
    0080 9478      BSET	7
(0039) 
(0040) Spi_init();
    0081 DFEB      RCALL	_Spi_init
(0041) 
(0042) LCD_init();
    0082 940E012A  CALL	_LCD_init
(0043) LCD_write_str(0,0,str);
    0084 8359      STD	Y+1,R21
    0085 8348      STD	Y+0,R20
    0086 2722      CLR	R18
    0087 2700      CLR	R16
    0088 940E00FC  CALL	_LCD_write_str
(0044) 
(0045) 
(0046) 
(0047) while(1);
    008A CFFF      RJMP	0x008A
    008B 9622      ADIW	R28,2
    008C 9508      RET
_in:
  temp                 --> Y+1
    008D 940E0185  CALL	push_lset
    008F 9724      SBIW	R28,4
(0048) 
(0049) }
(0050) 
(0051) 
(0052) #pragma interrupt_handler in:11
(0053) void in()
(0054) {
(0055) char temp[3];
(0056) 
(0057) 
(0058) temp[2]= (SPDR /100)%10+'0';
    0090 E614      LDI	R17,0x64
    0091 B10F      IN	R16,0x0F
    0092 940E014A  CALL	div8u
    0094 E01A      LDI	R17,0xA
    0095 940E0148  CALL	mod8u
    0097 2F80      MOV	R24,R16
    0098 5D80      SUBI	R24,0xD0
    0099 838B      STD	Y+3,R24
(0059) temp[1] = (SPDR /10) %10+'0';
    009A E01A      LDI	R17,0xA
    009B B10F      IN	R16,0x0F
    009C 940E014A  CALL	div8u
    009E E01A      LDI	R17,0xA
    009F 940E0148  CALL	mod8u
    00A1 2F80      MOV	R24,R16
    00A2 5D80      SUBI	R24,0xD0
    00A3 838A      STD	Y+2,R24
(0060) temp[0] = (SPDR % 10)+'0';
    00A4 E01A      LDI	R17,0xA
    00A5 B10F      IN	R16,0x0F
    00A6 940E0148  CALL	mod8u
    00A8 2F80      MOV	R24,R16
    00A9 5D80      SUBI	R24,0xD0
    00AA 8389      STD	Y+1,R24
(0061) 
(0062) 
(0063) LCD_write_char(11,1,temp[2]);
    00AB 802B      LDD	R2,Y+3
    00AC 8228      STD	Y+0,R2
    00AD E021      LDI	R18,1
    00AE E00B      LDI	R16,0xB
    00AF 940E0118  CALL	_LCD_write_char
(0064) 
(0065) LCD_write_char(12,1,temp[1]);
    00B1 802A      LDD	R2,Y+2
    00B2 8228      STD	Y+0,R2
    00B3 E021      LDI	R18,1
    00B4 E00C      LDI	R16,0xC
    00B5 940E0118  CALL	_LCD_write_char
(0066) 
(0067) LCD_write_char(13,1,temp[0]);
    00B7 8029      LDD	R2,Y+1
    00B8 8228      STD	Y+0,R2
    00B9 E021      LDI	R18,1
    00BA E00D      LDI	R16,0xD
    00BB 940E0118  CALL	_LCD_write_char
    00BD 9624      ADIW	R28,4
    00BE 940E019C  CALL	pop_lset
    00C0 9518      RETI
FILE: E:\MYAVRW~1\SPI双~2\lcd1602.c
(0001) /*
(0002) 	LCD1602液晶屏驱动模块
(0003) 	1、可直接嵌入到项目中使用
(0004) 	2、晶振频率:1M
(0005) 	3、如晶振提高低层驱动延时要作相应修改
(0006) 
(0007) 	AVR_AFA
(0008) 	www.iccavr.com
(0009) 	程序编写过程中参照了peak的4线显示程序
(0010) 	peak:AVR论坛技术版版主
(0011) */
(0012) 
(0013) #include <iom16v.h>
(0014) 
(0015) #define RS_CLR	PORTD &= ~(1 << PD3)
(0016) #define RS_SET	PORTD |= (1 << PD3)
(0017) 
(0018) #define RW_CLR	PORTD &= ~(1 << PD4)
(0019) #define RW_SET	PORTD |= (1 << PD4)
(0020) 
(0021) #define EN_CLR	PORTD &= ~(1 << PD6)
(0022) #define EN_SET	PORTD |= (1 << PD6)
(0023) 
(0024) /*延时函数*/
(0025) void delay_us(unsigned int n) {
(0026) 
(0027) 	if (n == 0) {
_delay_us:
  n                    --> R16
    00C1 3000      CPI	R16,0
    00C2 0701      CPC	R16,R17
    00C3 F409      BNE	0x00C5
(0028) 		return ;
    00C4 C006      RJMP	0x00CB
(0029) 		}
(0030) 	while (--n);
    00C5 01C8      MOVW	R24,R16
    00C6 9701      SBIW	R24,1
    00C7 018C      MOVW	R16,R24
    00C8 3000      CPI	R16,0
    00C9 0701      CPC	R16,R17
    00CA F7D1      BNE	0x00C5
    00CB 9508      RET
_delay_ms:
  a                    --> R20
  b                    --> R22
  i                    --> R16
    00CC 940E016C  CALL	push_gset2
(0031) }
(0032) 
(0033) /*延时函数*/
(0034) void delay_ms(unsigned char i) {
(0035) 
(0036) 	unsigned char a, b;
(0037) 	for (a = 1; a < i; a++) {
    00CE E041      LDI	R20,1
    00CF C006      RJMP	0x00D6
(0038) 		for (b = 1; b; b++) {
    00D0 E061      LDI	R22,1
    00D1 C001      RJMP	0x00D3
    00D2 9563      INC	R22
    00D3 2366      TST	R22
    00D4 F7E9      BNE	0x00D2
    00D5 9543      INC	R20
    00D6 1740      CP	R20,R16
    00D7 F3C0      BCS	0x00D0
    00D8 940E0160  CALL	pop_gset2
    00DA 9508      RET
_LCD_write_com:
  com                  --> R20
    00DB 940E016E  CALL	push_gset1
    00DD 2F40      MOV	R20,R16
(0039) 			;
(0040) 			}
(0041) 		}
(0042) }
(0043) 
(0044) /*显示屏命令写入函数*/
(0045) void LCD_write_com(unsigned char com) {
(0046) 	
(0047) 	RS_CLR;
    00DE 9893      CBI	0x12,3
(0048) 	RW_CLR;
    00DF 9894      CBI	0x12,4
(0049) 	EN_SET;
    00E0 9A96      SBI	0x12,6
(0050) 	PORTA = com;
    00E1 BB4B      OUT	0x1B,R20
(0051) 	delay_us(5);
    00E2 E005      LDI	R16,5

⌨️ 快捷键说明

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