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

📄 8255扩展.s

📁 基于AVR实验平台下ATMega128芯片实习作业
💻 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 + -