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 + -
显示快捷键?