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

📄 ls.s

📁 本人编写的mega16单片机控制的 八种花样流水灯源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module ls.c
	.area text(rom, con, rel)
	.dbfile D:\试验\ls.c
	.dbfunc e Delay _Delay fV
;              a -> R16
;              b -> R18
;              c -> R20
	.even
_Delay::
	st -y,R20
	.dbline -1
	.dbline 7
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int 
;  
; void Delay()                        //延时函数
;     {
	.dbline 9
;     uchar a, b, c;
;     for (a = 1; a; a++)
	ldi R16,1
	xjmp L5
L2:
	.dbline 10
;         for (b = 1; b; b++)
	ldi R18,1
	xjmp L9
L6:
	.dbline 11
;             for (c = 0; c<10; c++)  //循环次数=255*255*10
	clr R20
	xjmp L13
L10:
	.dbline 12
;           ;
L11:
	.dbline 11
	inc R20
L13:
	.dbline 11
	cpi R20,10
	brlo L10
X0:
L7:
	.dbline 10
	inc R18
L9:
	.dbline 10
	tst R18
	brne L6
X1:
L3:
	.dbline 9
	inc R16
L5:
	.dbline 9
	tst R16
	brne L2
X2:
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r a 16 c
	.dbsym r b 18 c
	.dbsym r c 20 c
	.dbend
	.dbfunc e DelayMs _DelayMs fV
;              j -> R20,R21
;              i -> R16,R17
	.even
_DelayMs::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 16
;     }
;  
; void DelayMs(uint i)                //1ms延时,准确性较Delay();高
;    {
	xjmp L16
L15:
	.dbline 18
;     while(i--)
;     {                          
	.dbline 20
;      uint j;                
;         for(j=1;j<=613;j++)   
	ldi R20,1
	ldi R21,0
	xjmp L21
L18:
	.dbline 21
;       ;               
L19:
	.dbline 20
	subi R20,255  ; offset = 1
	sbci R21,255
L21:
	.dbline 20
	ldi R24,613
	ldi R25,2
	cp R24,R20
	cpc R25,R21
	brsh L18
X3:
	.dbline 22
;     }                       
L16:
	.dbline 17
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L15
	tst R3
	brne L15
X4:
	.dbline -2
L14:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r j 20 i
	.dbsym r i 16 i
	.dbend
	.dbfunc e LED_on _LED_on fV
	.even
_LED_on::
	.dbline -1
	.dbline 26
;    }
;    
; void LED_on()                            //打开所有LED
;     {
	.dbline 27
;  PORTC =0X00; 
	clr R2
	out 0x15,R2
	.dbline 28
;  Delay();
	xcall _Delay
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LED_off _LED_off fV
	.even
_LED_off::
	.dbline -1
	.dbline 32
;  } 
;  
; void LED_off()                           //关闭所有LED
;     {
	.dbline 33
;  PORTC = 0xFF;
	ldi R24,255
	out 0x15,R24
	.dbline 34
;  Delay(); 
	xcall _Delay
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LED_01 _LED_01 fV
;              i -> R10,R11
	.even
_LED_01::
	st -y,R10
	st -y,R11
	movw R10,R16
	.dbline -1
	.dbline 38
;  }
; 
; void LED_01(int i)                  //LED亮灭控制
;     {
	.dbline 39
;     PORTC = ~BIT(i);                //输出低电平 
	ldi R16,1
	ldi R17,0
	movw R18,R10
	xcall lsl16
	movw R2,R16
	com R2
	com R3
	out 0x15,R2
	.dbline 40
;     DelayMs(100);                   //调用延时程序
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline -2
L24:
	.dbline 0 ; func end
	ld R11,y+
	ld R10,y+
	ret
	.dbsym r i 10 I
	.dbend
	.dbfunc e LED_02 _LED_02 fV
;              i -> R20,R21
	.even
_LED_02::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 44
;     }
;  
; void LED_02(int i)                  //间隔点亮
;     {
	.dbline 45
;  PORTC=~(BIT(i)|BIT(i-2));
	movw R18,R20
	subi R18,2
	sbci R19,0
	ldi R16,1
	ldi R17,0
	xcall lsl16
	movw R2,R16
	ldi R16,1
	ldi R17,0
	movw R18,R20
	xcall lsl16
	movw R4,R16
	or R4,R2
	or R5,R3
	com R4
	com R5
	out 0x15,R4
	.dbline 46
;  DelayMs(100);
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline -2
L25:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e LED_03 _LED_03 fV
;              i -> R20,R21
	.even
_LED_03::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 50
;  }
;  
; void LED_03(int i)                 //相临点亮
;     {
	.dbline 51
;  PORTC=~(BIT(i)|BIT(i-1));      //~后内容需用括号括起来
	movw R18,R20
	subi R18,1
	sbci R19,0
	ldi R16,1
	ldi R17,0
	xcall lsl16
	movw R2,R16
	ldi R16,1
	ldi R17,0
	movw R18,R20
	xcall lsl16
	movw R4,R16
	or R4,R2
	or R5,R3
	com R4
	com R5
	out 0x15,R4
	.dbline 52
;  DelayMs(100);
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline -2
L26:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e LED_04 _LED_04 fV
;              i -> R20,R21
	.even
_LED_04::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 56
;  }
;  
; void LED_04(int i)                 //发散聚集点亮
;     {
	.dbline 57
;  switch(i)
	cpi R20,0
	cpc R20,R21
	breq L30
X5:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L31
X6:
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L32
X7:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L33
X8:
	xjmp L29
L30:
	.dbline 59
;   {
;   case 0:PORTC=0xE7;DelayMs(100);break;    //延时100ms
	ldi R24,231
	out 0x15,R24
	.dbline 59
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 59
	xjmp L29
L31:
	.dbline 60
;   case 1:PORTC=0xDB;DelayMs(100);break;
	ldi R24,219
	out 0x15,R24
	.dbline 60
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 60
	xjmp L29
L32:
	.dbline 61
;   case 2:PORTC=0xBD;DelayMs(100);break;
	ldi R24,189
	out 0x15,R24
	.dbline 61
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 61
	xjmp L29
L33:
	.dbline 62
;   case 3:PORTC=0x7E;DelayMs(100);break;
	ldi R24,126
	out 0x15,R24
	.dbline 62
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 62
	.dbline 63
;   default:break;
L29:
	.dbline -2
L27:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e LED_05 _LED_05 fV
;              i -> R20,R21
	.even
_LED_05::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 68
;   }
;  }
;  
; void LED_05(int i)                 //00,0F,F0,FF方式显示
;     {
	.dbline 69
;  switch(i)
	cpi R20,0
	cpc R20,R21
	breq L37
X9:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L38
X10:
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L39
X11:
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L40
X12:
	xjmp L36
L37:
	.dbline 71
;   {
;   case 0:PORTC=0x00;DelayMs(100);break;    //延时100ms
	clr R2
	out 0x15,R2
	.dbline 71
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 71
	xjmp L36
L38:
	.dbline 72
;   case 1:PORTC=0x0F;DelayMs(100);break;
	ldi R24,15
	out 0x15,R24
	.dbline 72
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 72
	xjmp L36
L39:
	.dbline 73
;   case 2:PORTC=0xF0;DelayMs(100);break;
	ldi R24,240
	out 0x15,R24
	.dbline 73
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 73
	xjmp L36
L40:
	.dbline 74
;   case 3:PORTC=0xFF;DelayMs(100);break;
	ldi R24,255
	out 0x15,R24
	.dbline 74
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 74
	.dbline 75
;   default:break;
L36:
	.dbline -2
L34:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e LED_06 _LED_06 fV
;              i -> R20,R21
	.even
_LED_06::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 80
;   }
;  }
;  
; void LED_06(int i)
;    {
	.dbline 81
;    switch(i)
	cpi R20,0
	cpc R20,R21
	breq L44
X13:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L45
X14:
	xjmp L42
L44:
	.dbline 83
;     {
;  case 0:PORTC=0XAA;DelayMs(100);break;
	ldi R24,170
	out 0x15,R24
	.dbline 83
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 83
	xjmp L43
L45:
	.dbline 84
;  case 1:PORTC=0X55;DelayMs(100);break;
	ldi R24,85
	out 0x15,R24
	.dbline 84
	ldi R16,100
	ldi R17,0
	xcall _DelayMs
	.dbline 84
L42:
L43:
	.dbline -2
L41:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e main _main fV
;              r -> R20,R21
;              j -> R22,R23
;              s -> R22,R23
;              q -> R22,R23
;              p -> R22,R23
;              o -> R22,R23
;              n -> R22,R23
;              m -> R22,R23
;              l -> R22,R23
;              i -> R10,R11

⌨️ 快捷键说明

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