📄 8255扩展.s
字号:
.module _8255扩展.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\user\MYDOCU~1\李智(正)\8255\8255扩展.c
.dbfunc e init _init fV
.even
_init::
.dbline -1
.dbline 6
; #include <iom128v.h>
; #define CON8255 0x8003
; #define A8255 0x8000
; #define B8255 0x8001
; void init(void)
; {
.dbline 7
; MCUCR=MCUCR|0x80;
in R24,0x35
ori R24,128
out 0x35,R24
.dbline 8
; XMCRB=0x80;
ldi R24,128
sts 108,R24
.dbline 9
; w8255con(0x80);
ldi R16,128
ldi R17,0
xcall _w8255con
.dbline 10
; w8255con(0x82);
ldi R16,130
ldi R17,0
xcall _w8255con
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e w8255con _w8255con fV
; p -> R20,R21
; ctrl -> R16
.even
_w8255con::
xcall push_gset1
.dbline -1
.dbline 13
; }
; void w8255con(unsigned char ctrl)
; {
.dbline 14
; unsigned char *p=(unsigned char *)(CON8255);
ldi R20,32771
ldi R21,128
.dbline 15
; *p=ctrl;
movw R30,R20
std z+0,R16
.dbline -2
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r p 20 pc
.dbsym r ctrl 16 c
.dbend
.dbfunc e w8255a _w8255a fV
; p -> R20,R21
; value -> R16
.even
_w8255a::
xcall push_gset1
.dbline -1
.dbline 18
; }
; void w8255a(unsigned char value)
; {
.dbline 19
; unsigned char *p=(unsigned char *)(A8255);
ldi R20,32768
ldi R21,128
.dbline 20
; *p=value;
movw R30,R20
std z+0,R16
.dbline -2
L3:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r p 20 pc
.dbsym r value 16 c
.dbend
.dbfunc e r8255b _r8255b fI
; p -> R16,R17
; dp -> R16
.even
_r8255b::
.dbline -1
.dbline 23
; }
;
; r8255b(){
.dbline 25
; unsigned char dp;
; unsigned char *p=(unsigned char *)(B8255);
ldi R16,32769
ldi R17,128
.dbline 26
; dp=*p;
movw R30,R16
ldd R16,z+0
.dbline 27
; return dp;
clr R17
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym r p 16 pc
.dbsym r dp 16 c
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 30
; }
; void delay_1ms(void)
; { unsigned int i;
.dbline 31
ldi R16,1
ldi R17,0
xjmp L9
L6:
.dbline 31
L7:
.dbline 31
subi R16,255 ; offset = 1
sbci R17,255
L9:
.dbline 31
; for(i=1;i<2286;i++);
cpi R16,238
ldi R30,8
cpc R17,R30
brlo L6
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R22,R23
.even
_delay_nms::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 34
; }
; void delay_nms(unsigned int n)
; { unsigned int i=0;
.dbline 34
clr R20
clr R21
xjmp L12
L11:
.dbline 36
.dbline 36
xcall _delay_1ms
.dbline 37
subi R20,255 ; offset = 1
sbci R21,255
.dbline 38
L12:
.dbline 35
; while(i<n)
cp R20,R22
cpc R21,R23
brlo L11
.dbline -2
L10:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 42
; {delay_1ms();
; i++;
; }
;
; }
; void main(void)
; { init();
.dbline 42
xcall _init
xjmp L16
L15:
.dbline 43
; while(1){
.dbline 44
; if((r8255b()&0x01)==0)
xcall _r8255b
movw R24,R16
andi R24,1
andi R25,0
cpi R24,0
cpc R24,R25
brne L18
X0:
.dbline 45
; {w8255a(0xfe);
.dbline 45
ldi R16,254
xcall _w8255a
.dbline 46
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 47
; w8255a(0xfd);
ldi R16,253
xcall _w8255a
.dbline 48
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 49
; w8255a(0xfb);
ldi R16,251
xcall _w8255a
.dbline 50
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 51
; w8255a(0xf7);
ldi R16,247
xcall _w8255a
.dbline 52
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 53
; w8255a(0xef);
ldi R16,239
xcall _w8255a
.dbline 54
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 55
; w8255a(0xdf);
ldi R16,223
xcall _w8255a
.dbline 56
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 57
; w8255a(0xbf);
ldi R16,191
xcall _w8255a
.dbline 58
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 59
; w8255a(0x7f);
ldi R16,127
xcall _w8255a
.dbline 60
; delay_nms(50);}
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 60
xjmp L19
L18:
.dbline 62
; else
; w8255a(0xff);
ldi R16,255
xcall _w8255a
L19:
.dbline 64
;
; if((r8255b()&0x02)==0)
xcall _r8255b
movw R24,R16
andi R24,2
andi R25,0
cpi R24,0
cpc R24,R25
brne L20
X1:
.dbline 65
; {w8255a(0x7f);
.dbline 65
ldi R16,127
xcall _w8255a
.dbline 66
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 67
; w8255a(0x3f);
ldi R16,63
xcall _w8255a
.dbline 68
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 69
; w8255a(0x1f);
ldi R16,31
xcall _w8255a
.dbline 70
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 71
; w8255a(0x0f);
ldi R16,15
xcall _w8255a
.dbline 72
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 73
; w8255a(0x07);
ldi R16,7
xcall _w8255a
.dbline 74
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 75
; w8255a(0x03);
ldi R16,3
xcall _w8255a
.dbline 76
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 77
; w8255a(0x01);
ldi R16,1
xcall _w8255a
.dbline 78
; delay_nms(50);
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 79
; w8255a(0x00);
clr R16
xcall _w8255a
.dbline 80
; delay_nms(50);}
ldi R16,50
ldi R17,0
xcall _delay_nms
.dbline 80
xjmp L21
L20:
.dbline 82
; else
; w8255a(0xff);
ldi R16,255
xcall _w8255a
L21:
.dbline 84
;
; if((r8255b()&0x04)==0)
xcall _r8255b
movw R24,R16
andi R24,4
andi R25,0
cpi R24,0
cpc R24,R25
brne L22
X2:
.dbline 85
; {w8255a(0x00);
.dbline 85
clr R16
xcall _w8255a
.dbline 86
; delay_nms(20);
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 87
; w8255a(0xff);
ldi R16,255
xcall _w8255a
.dbline 88
; delay_nms(20);
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 89
; w8255a(0x00);
clr R16
xcall _w8255a
.dbline 90
; delay_nms(20);
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 91
; w8255a(0xff);
ldi R16,255
xcall _w8255a
.dbline 92
; delay_nms(20);
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 93
; w8255a(0x00);
clr R16
xcall _w8255a
.dbline 94
; delay_nms(20);
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 95
; w8255a(0xff);
ldi R16,255
xcall _w8255a
.dbline 96
; delay_nms(20);}
ldi R16,20
ldi R17,0
xcall _delay_nms
.dbline 96
xjmp L23
L22:
.dbline 98
; else
; w8255a(0xff);
ldi R16,255
xcall _w8255a
L23:
.dbline 99
L16:
.dbline 43
xjmp L15
X3:
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -