8255扩展.lst

来自「基于AVR实验平台下ATMega128芯片实习作业」· LST 代码 · 共 392 行

LST
392
字号
__start:
__text_start:
    0030 EFCF      LDI	R28,0xFF
    0031 E0DF      LDI	R29,0xF
    0032 BFCD      OUT	0x3D,R28
    0033 BFDE      OUT	0x3E,R29
    0034 51C0      SUBI	R28,0x10
    0035 40D0      SBCI	R29,0
    0036 EA0A      LDI	R16,0xAA
    0037 8308      STD	Y+0,R16
    0038 2400      CLR	R0
    0039 E6E0      LDI	R30,0x60
    003A E0F0      LDI	R31,0
    003B E010      LDI	R17,0
    003C 36E0      CPI	R30,0x60
    003D 07F1      CPC	R31,R17
    003E F011      BEQ	0x0041
    003F 9201      ST	R0,Z+
    0040 CFFB      RJMP	0x003C
    0041 8300      STD	Z+0,R16
    0042 E6E0      LDI	R30,0x60
    0043 E0F0      LDI	R31,0
    0044 E6A0      LDI	R26,0x60
    0045 E0B0      LDI	R27,0
    0046 E010      LDI	R17,0
    0047 36E0      CPI	R30,0x60
    0048 07F1      CPC	R31,R17
    0049 F021      BEQ	0x004E
    004A 95C8      LPM
    004B 9631      ADIW	R30,1
    004C 920D      ST	R0,X+
    004D CFF9      RJMP	0x0047
    004E 940E008F  CALL	_main
_exit:
    0050 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\user\MYDOCU~1\李智(正)\8255\8255扩展.c
(0001) #include <iom128v.h> 
(0002) #define CON8255 0x8003
(0003) #define A8255 0x8000
(0004) #define B8255 0x8001
(0005) void init(void) 
(0006) { 
(0007)    MCUCR=MCUCR|0x80;
_init:
    0051 B785      IN	R24,0x35
    0052 6880      ORI	R24,0x80
    0053 BF85      OUT	0x35,R24
(0008)    XMCRB=0x80;
    0054 E880      LDI	R24,0x80
    0055 9380006C  STS	0x6C,R24
(0009)    w8255con(0x80); 
    0057 E800      LDI	R16,0x80
    0058 E010      LDI	R17,0
    0059 D004      RCALL	_w8255con
(0010)    w8255con(0x82); 
    005A E802      LDI	R16,0x82
    005B E010      LDI	R17,0
    005C D001      RCALL	_w8255con
    005D 9508      RET
_w8255con:
  p                    --> R20
  ctrl                 --> R16
    005E 940E012A  CALL	push_gset1
(0011)    }
(0012) void w8255con(unsigned char ctrl) 
(0013) { 
(0014)    unsigned char *p=(unsigned char *)(CON8255);
    0060 E043      LDI	R20,3
    0061 E850      LDI	R21,0x80
(0015)    *p=ctrl;           
    0062 01FA      MOVW	R30,R20
    0063 8300      STD	Z+0,R16
    0064 940E012D  CALL	pop_gset1
    0066 9508      RET
_w8255a:
  p                    --> R20
  value                --> R16
    0067 940E012A  CALL	push_gset1
(0016) }
(0017) void w8255a(unsigned char value) 
(0018) {   
(0019)    unsigned char *p=(unsigned char *)(A8255);
    0069 E040      LDI	R20,0
    006A E850      LDI	R21,0x80
(0020)    *p=value; 
    006B 01FA      MOVW	R30,R20
    006C 8300      STD	Z+0,R16
    006D 940E012D  CALL	pop_gset1
    006F 9508      RET
(0021) }
(0022) 
(0023) r8255b(){ 
(0024)    unsigned char dp;
(0025)    unsigned char *p=(unsigned char *)(B8255);
_r8255b:
  p                    --> R16
  dp                   --> R16
    0070 E001      LDI	R16,1
    0071 E810      LDI	R17,0x80
(0026)    dp=*p; 
    0072 01F8      MOVW	R30,R16
    0073 8100      LDD	R16,Z+0
(0027)    return dp;
    0074 2711      CLR	R17
    0075 9508      RET
(0028) }
(0029) void delay_1ms(void)
(0030) { unsigned int i;
(0031)  for(i=1;i<2286;i++);
_delay_1ms:
  i                    --> R16
    0076 E001      LDI	R16,1
    0077 E010      LDI	R17,0
    0078 C002      RJMP	0x007B
    0079 5F0F      SUBI	R16,0xFF
    007A 4F1F      SBCI	R17,0xFF
    007B 3E0E      CPI	R16,0xEE
    007C E0E8      LDI	R30,0x8
    007D 071E      CPC	R17,R30
    007E F3D0      BCS	0x0079
    007F 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0080 940E0128  CALL	push_gset2
    0082 01B8      MOVW	R22,R16
(0032) }
(0033) void delay_nms(unsigned int n)
(0034) {  unsigned int i=0;
    0083 2744      CLR	R20
    0084 2755      CLR	R21
    0085 C003      RJMP	0x0089
(0035)    while(i<n)
(0036)    {delay_1ms();
    0086 DFEF      RCALL	_delay_1ms
(0037)     i++;
    0087 5F4F      SUBI	R20,0xFF
    0088 4F5F      SBCI	R21,0xFF
    0089 1746      CP	R20,R22
    008A 0757      CPC	R21,R23
    008B F3D0      BCS	0x0086
    008C 940E011F  CALL	pop_gset2
    008E 9508      RET
(0038)    }
(0039)   
(0040) }
(0041) 	void main(void) 
(0042) {  init();
_main:
    008F DFC1      RCALL	_init
    0090 C08C      RJMP	0x011D
(0043)  while(1){
(0044)    if((r8255b()&0x01)==0)
    0091 DFDE      RCALL	_r8255b
    0092 01C8      MOVW	R24,R16
    0093 7081      ANDI	R24,1
    0094 7090      ANDI	R25,0
    0095 3080      CPI	R24,0
    0096 0789      CPC	R24,R25
    0097 F549      BNE	0x00C1
(0045)    {w8255a(0xfe);
    0098 EF0E      LDI	R16,0xFE
    0099 DFCD      RCALL	_w8255a
(0046)    delay_nms(50);
    009A E302      LDI	R16,0x32
    009B E010      LDI	R17,0
    009C DFE3      RCALL	_delay_nms
(0047)    w8255a(0xfd);
    009D EF0D      LDI	R16,0xFD
    009E DFC8      RCALL	_w8255a
(0048)    delay_nms(50);
    009F E302      LDI	R16,0x32
    00A0 E010      LDI	R17,0
    00A1 DFDE      RCALL	_delay_nms
(0049)    w8255a(0xfb);
    00A2 EF0B      LDI	R16,0xFB
    00A3 DFC3      RCALL	_w8255a
(0050)    delay_nms(50);
    00A4 E302      LDI	R16,0x32
    00A5 E010      LDI	R17,0
    00A6 DFD9      RCALL	_delay_nms
(0051)    w8255a(0xf7);
    00A7 EF07      LDI	R16,0xF7
    00A8 DFBE      RCALL	_w8255a
(0052)    delay_nms(50);
    00A9 E302      LDI	R16,0x32
    00AA E010      LDI	R17,0
    00AB DFD4      RCALL	_delay_nms
(0053)    w8255a(0xef);
    00AC EE0F      LDI	R16,0xEF
    00AD DFB9      RCALL	_w8255a
(0054)    delay_nms(50);
    00AE E302      LDI	R16,0x32
    00AF E010      LDI	R17,0
    00B0 DFCF      RCALL	_delay_nms
(0055)    w8255a(0xdf);
    00B1 ED0F      LDI	R16,0xDF
    00B2 DFB4      RCALL	_w8255a
(0056)    delay_nms(50);
    00B3 E302      LDI	R16,0x32
    00B4 E010      LDI	R17,0
    00B5 DFCA      RCALL	_delay_nms
(0057)    w8255a(0xbf);
    00B6 EB0F      LDI	R16,0xBF
    00B7 DFAF      RCALL	_w8255a
(0058)    delay_nms(50);
    00B8 E302      LDI	R16,0x32
    00B9 E010      LDI	R17,0
    00BA DFC5      RCALL	_delay_nms
(0059)    w8255a(0x7f);
    00BB E70F      LDI	R16,0x7F
    00BC DFAA      RCALL	_w8255a
(0060)    delay_nms(50);}
    00BD E302      LDI	R16,0x32
    00BE E010      LDI	R17,0
    00BF DFC0      RCALL	_delay_nms
    00C0 C002      RJMP	0x00C3
(0061)    else  
(0062)    w8255a(0xff);
    00C1 EF0F      LDI	R16,0xFF
    00C2 DFA4      RCALL	_w8255a
(0063)    
(0064)  if((r8255b()&0x02)==0)
    00C3 DFAC      RCALL	_r8255b
    00C4 01C8      MOVW	R24,R16
    00C5 7082      ANDI	R24,2
    00C6 7090      ANDI	R25,0
    00C7 3080      CPI	R24,0
    00C8 0789      CPC	R24,R25
    00C9 F549      BNE	0x00F3
(0065)   {w8255a(0x7f);
    00CA E70F      LDI	R16,0x7F
    00CB DF9B      RCALL	_w8255a
(0066)    delay_nms(50);
    00CC E302      LDI	R16,0x32
    00CD E010      LDI	R17,0
    00CE DFB1      RCALL	_delay_nms
(0067)    w8255a(0x3f);
    00CF E30F      LDI	R16,0x3F
    00D0 DF96      RCALL	_w8255a
(0068)    delay_nms(50);
    00D1 E302      LDI	R16,0x32
    00D2 E010      LDI	R17,0
    00D3 DFAC      RCALL	_delay_nms
(0069)    w8255a(0x1f);
    00D4 E10F      LDI	R16,0x1F
    00D5 DF91      RCALL	_w8255a
(0070)    delay_nms(50);
    00D6 E302      LDI	R16,0x32
    00D7 E010      LDI	R17,0
    00D8 DFA7      RCALL	_delay_nms
(0071)    w8255a(0x0f);
    00D9 E00F      LDI	R16,0xF
    00DA DF8C      RCALL	_w8255a
(0072)    delay_nms(50);
    00DB E302      LDI	R16,0x32
    00DC E010      LDI	R17,0
    00DD DFA2      RCALL	_delay_nms
(0073)    w8255a(0x07);
    00DE E007      LDI	R16,7
    00DF DF87      RCALL	_w8255a
(0074)    delay_nms(50);
    00E0 E302      LDI	R16,0x32
    00E1 E010      LDI	R17,0
    00E2 DF9D      RCALL	_delay_nms
(0075)    w8255a(0x03);
    00E3 E003      LDI	R16,3
    00E4 DF82      RCALL	_w8255a
(0076)    delay_nms(50);
    00E5 E302      LDI	R16,0x32
    00E6 E010      LDI	R17,0
    00E7 DF98      RCALL	_delay_nms
(0077)    w8255a(0x01);
    00E8 E001      LDI	R16,1
    00E9 DF7D      RCALL	_w8255a
(0078)    delay_nms(50);
    00EA E302      LDI	R16,0x32
    00EB E010      LDI	R17,0
    00EC DF93      RCALL	_delay_nms
(0079)    w8255a(0x00);
    00ED 2700      CLR	R16
    00EE DF78      RCALL	_w8255a
(0080)    delay_nms(50);}
    00EF E302      LDI	R16,0x32
    00F0 E010      LDI	R17,0
    00F1 DF8E      RCALL	_delay_nms
    00F2 C002      RJMP	0x00F5
(0081)    else
(0082)    w8255a(0xff);
    00F3 EF0F      LDI	R16,0xFF
    00F4 DF72      RCALL	_w8255a
(0083)    
(0084)   if((r8255b()&0x04)==0)
    00F5 DF7A      RCALL	_r8255b
    00F6 01C8      MOVW	R24,R16
    00F7 7084      ANDI	R24,4
    00F8 7090      ANDI	R25,0
    00F9 3080      CPI	R24,0
    00FA 0789      CPC	R24,R25
    00FB F4F9      BNE	0x011B
(0085)    {w8255a(0x00);
    00FC 2700      CLR	R16
    00FD DF69      RCALL	_w8255a
(0086)    delay_nms(20);
    00FE E104      LDI	R16,0x14
    00FF E010      LDI	R17,0
    0100 DF7F      RCALL	_delay_nms
(0087)    w8255a(0xff);
    0101 EF0F      LDI	R16,0xFF
    0102 DF64      RCALL	_w8255a
(0088)    delay_nms(20);
    0103 E104      LDI	R16,0x14
    0104 E010      LDI	R17,0
    0105 DF7A      RCALL	_delay_nms
(0089)    w8255a(0x00);
    0106 2700      CLR	R16
    0107 DF5F      RCALL	_w8255a
(0090)    delay_nms(20);
    0108 E104      LDI	R16,0x14
    0109 E010      LDI	R17,0
    010A DF75      RCALL	_delay_nms
(0091)    w8255a(0xff);
    010B EF0F      LDI	R16,0xFF
    010C DF5A      RCALL	_w8255a
(0092)    delay_nms(20);
    010D E104      LDI	R16,0x14
    010E E010      LDI	R17,0
    010F DF70      RCALL	_delay_nms
(0093)    w8255a(0x00);
    0110 2700      CLR	R16
    0111 DF55      RCALL	_w8255a
(0094)    delay_nms(20);
    0112 E104      LDI	R16,0x14
    0113 E010      LDI	R17,0
    0114 DF6B      RCALL	_delay_nms
(0095)    w8255a(0xff);
    0115 EF0F      LDI	R16,0xFF
    0116 DF50      RCALL	_w8255a
(0096)    delay_nms(20);}
    0117 E104      LDI	R16,0x14
    0118 E010      LDI	R17,0
    0119 DF66      RCALL	_delay_nms
    011A C002      RJMP	0x011D
(0097)    else
(0098)    w8255a(0xff);
FILE: <library>
    011B EF0F      LDI	R16,0xFF
    011C DF4A      RCALL	_w8255a
    011D CF73      RJMP	0x0091
    011E 9508      RET
pop_gset2:
    011F E0E2      LDI	R30,2
    0120 940C012E  JMP	pop
push_gset5:
    0122 92FA      ST	R15,-Y
    0123 92EA      ST	R14,-Y
push_gset4:
    0124 92DA      ST	R13,-Y
    0125 92CA      ST	R12,-Y
push_gset3:
    0126 92BA      ST	R11,-Y
    0127 92AA      ST	R10,-Y
push_gset2:
    0128 937A      ST	R23,-Y
    0129 936A      ST	R22,-Y
push_gset1:
    012A 935A      ST	R21,-Y
    012B 934A      ST	R20,-Y
    012C 9508      RET
pop_gset1:
    012D E0E1      LDI	R30,1
pop:
    012E 9149      LD	R20,Y+
    012F 9159      LD	R21,Y+
    0130 FDE0      SBRC	R30,0
    0131 9508      RET
    0132 9169      LD	R22,Y+
    0133 9179      LD	R23,Y+
    0134 FDE1      SBRC	R30,1
    0135 9508      RET
    0136 90A9      LD	R10,Y+
    0137 90B9      LD	R11,Y+
    0138 FDE2      SBRC	R30,2
    0139 9508      RET
    013A 90C9      LD	R12,Y+
    013B 90D9      LD	R13,Y+
    013C FDE3      SBRC	R30,3
    013D 9508      RET
    013E 90E9      LD	R14,Y+
    013F 90F9      LD	R15,Y+
    0140 9508      RET

⌨️ 快捷键说明

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