📄 8255扩展.lis
字号:
.module _8255扩展.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\user\MYDOCU~1\李智(正)\8255\8255扩展.c
0000 .dbfunc e init _init fV
.even
0000 _init::
0000 .dbline -1
0000 .dbline 6
0000 ; #include <iom128v.h>
0000 ; #define CON8255 0x8003
0000 ; #define A8255 0x8000
0000 ; #define B8255 0x8001
0000 ; void init(void)
0000 ; {
0000 .dbline 7
0000 ; MCUCR=MCUCR|0x80;
0000 85B7 in R24,0x35
0002 8068 ori R24,128
0004 85BF out 0x35,R24
0006 .dbline 8
0006 ; XMCRB=0x80;
0006 80E8 ldi R24,128
0008 80936C00 sts 108,R24
000C .dbline 9
000C ; w8255con(0x80);
000C 00E8 ldi R16,128
000E 10E0 ldi R17,0
0010 04D0 xcall _w8255con
0012 .dbline 10
0012 ; w8255con(0x82);
0012 02E8 ldi R16,130
0014 10E0 ldi R17,0
0016 01D0 xcall _w8255con
0018 .dbline -2
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e w8255con _w8255con fV
001A ; p -> R20,R21
001A ; ctrl -> R16
.even
001A _w8255con::
001A 0E940000 xcall push_gset1
001E .dbline -1
001E .dbline 13
001E ; }
001E ; void w8255con(unsigned char ctrl)
001E ; {
001E .dbline 14
001E ; unsigned char *p=(unsigned char *)(CON8255);
001E 43E0 ldi R20,32771
0020 50E8 ldi R21,128
0022 .dbline 15
0022 ; *p=ctrl;
0022 FA01 movw R30,R20
0024 0083 std z+0,R16
0026 .dbline -2
0026 L2:
0026 0E940000 xcall pop_gset1
002A .dbline 0 ; func end
002A 0895 ret
002C .dbsym r p 20 pc
002C .dbsym r ctrl 16 c
002C .dbend
002C .dbfunc e w8255a _w8255a fV
002C ; p -> R20,R21
002C ; value -> R16
.even
002C _w8255a::
002C 0E940000 xcall push_gset1
0030 .dbline -1
0030 .dbline 18
0030 ; }
0030 ; void w8255a(unsigned char value)
0030 ; {
0030 .dbline 19
0030 ; unsigned char *p=(unsigned char *)(A8255);
0030 40E0 ldi R20,32768
0032 50E8 ldi R21,128
0034 .dbline 20
0034 ; *p=value;
0034 FA01 movw R30,R20
0036 0083 std z+0,R16
0038 .dbline -2
0038 L3:
0038 0E940000 xcall pop_gset1
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r p 20 pc
003E .dbsym r value 16 c
003E .dbend
003E .dbfunc e r8255b _r8255b fI
003E ; p -> R16,R17
003E ; dp -> R16
.even
003E _r8255b::
003E .dbline -1
003E .dbline 23
003E ; }
003E ;
003E ; r8255b(){
003E .dbline 25
003E ; unsigned char dp;
003E ; unsigned char *p=(unsigned char *)(B8255);
003E 01E0 ldi R16,32769
0040 10E8 ldi R17,128
0042 .dbline 26
0042 ; dp=*p;
0042 F801 movw R30,R16
0044 0081 ldd R16,z+0
0046 .dbline 27
0046 ; return dp;
0046 1127 clr R17
0048 .dbline -2
0048 L4:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbsym r p 16 pc
004A .dbsym r dp 16 c
004A .dbend
004A .dbfunc e delay_1ms _delay_1ms fV
004A ; i -> R16,R17
.even
004A _delay_1ms::
004A .dbline -1
004A .dbline 30
004A ; }
004A ; void delay_1ms(void)
004A ; { unsigned int i;
004A .dbline 31
004A 01E0 ldi R16,1
004C 10E0 ldi R17,0
004E 02C0 xjmp L9
0050 L6:
0050 .dbline 31
0050 L7:
0050 .dbline 31
0050 0F5F subi R16,255 ; offset = 1
0052 1F4F sbci R17,255
0054 L9:
0054 .dbline 31
0054 ; for(i=1;i<2286;i++);
0054 0E3E cpi R16,238
0056 E8E0 ldi R30,8
0058 1E07 cpc R17,R30
005A D0F3 brlo L6
005C .dbline -2
005C L5:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbsym r i 16 i
005E .dbend
005E .dbfunc e delay_nms _delay_nms fV
005E ; i -> R20,R21
005E ; n -> R22,R23
.even
005E _delay_nms::
005E 0E940000 xcall push_gset2
0062 B801 movw R22,R16
0064 .dbline -1
0064 .dbline 34
0064 ; }
0064 ; void delay_nms(unsigned int n)
0064 ; { unsigned int i=0;
0064 .dbline 34
0064 4427 clr R20
0066 5527 clr R21
0068 03C0 xjmp L12
006A L11:
006A .dbline 36
006A .dbline 36
006A EFDF xcall _delay_1ms
006C .dbline 37
006C 4F5F subi R20,255 ; offset = 1
006E 5F4F sbci R21,255
0070 .dbline 38
0070 L12:
0070 .dbline 35
0070 ; while(i<n)
0070 4617 cp R20,R22
0072 5707 cpc R21,R23
0074 D0F3 brlo L11
0076 .dbline -2
0076 L10:
0076 0E940000 xcall pop_gset2
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r i 20 i
007C .dbsym r n 22 i
007C .dbend
007C .dbfunc e main _main fV
.even
007C _main::
007C .dbline -1
007C .dbline 42
007C ; {delay_1ms();
007C ; i++;
007C ; }
007C ;
007C ; }
007C ; void main(void)
007C ; { init();
007C .dbline 42
007C C1DF xcall _init
007E 8CC0 xjmp L16
0080 L15:
0080 .dbline 43
0080 ; while(1){
0080 .dbline 44
0080 ; if((r8255b()&0x01)==0)
0080 DEDF xcall _r8255b
0082 C801 movw R24,R16
0084 8170 andi R24,1
0086 9070 andi R25,0
0088 8030 cpi R24,0
008A 8907 cpc R24,R25
008C 49F5 brne L18
008E X0:
008E .dbline 45
008E ; {w8255a(0xfe);
008E .dbline 45
008E 0EEF ldi R16,254
0090 CDDF xcall _w8255a
0092 .dbline 46
0092 ; delay_nms(50);
0092 02E3 ldi R16,50
0094 10E0 ldi R17,0
0096 E3DF xcall _delay_nms
0098 .dbline 47
0098 ; w8255a(0xfd);
0098 0DEF ldi R16,253
009A C8DF xcall _w8255a
009C .dbline 48
009C ; delay_nms(50);
009C 02E3 ldi R16,50
009E 10E0 ldi R17,0
00A0 DEDF xcall _delay_nms
00A2 .dbline 49
00A2 ; w8255a(0xfb);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -