📄 训练项目三:跑马灯.lis
字号:
.module _训练项目三:跑马灯.c
.area text(rom, con, rel)
; i -> R20,R21
; voi49d -> <dead>
.even
0000 _delay_1ms::
0000 1A93 st -y,r17
0002 0A93 st -y,r16
0004 4A93 st -y,R20
0006 5A93 st -y,R21
0008 ; /****************************************************************************
0008 ; ** File Name: 跑马灯
0008 ; ** Createed By: Wangchangsong
0008 ; ** Create Date: 07/25/2008
0008 ; ** Version: 1.0
0008 ; ** Descriptions: led display
0008 ; **
0008 ; **---------------------------------------------------------------------------
0008 ; ** Modified By:
0008 ; ** Modified Date:
0008 ; ** Version:
0008 ; ** Descriptions:
0008 ; **
0008 ; ****************************************************************************/
0008 ;
0008 ; #include <iom128v.h>
0008 ;
0008 ;
0008 ; /****************************************************************************
0008 ; ** Function Name: delay_1ms
0008 ; ** Descriptions: delay time
0008 ; ** Input Parameters: void
0008 ; ** Output parameters: void
0008 ; ** Returned Value: void
0008 ; **---------------------------------------------------------------------------
0008 ; ****************************************************************************/
0008 ;
0008 ; void delay_1ms(voi49d) /* 延时 */
0008 ; {
0008 ; unsigned int i;
0008 ;
0008 ; for (i = 0;i < 2260;i++);
0008 4427 clr R20
000A 5527 clr R21
000C 02C0 xjmp L5
000E L2:
000E L3:
000E 4F5F subi R20,255 ; offset = 1
0010 5F4F sbci R21,255
0012 L5:
0012 443D cpi R20,212
0014 E8E0 ldi R30,8
0016 5E07 cpc R21,R30
0018 D0F3 brlo L2
001A X0:
001A L1:
001A .dbline 0 ; func end
001A 5991 ld R21,y+
001C 4991 ld R20,y+
001E 2296 adiw R28,2
0020 0895 ret
0022 ; i -> R20,R21
0022 ; uiTime -> R10,R11
.even
0022 _delay_nms::
0022 0E940000 xcall push_xgset300C
0026 5801 movw R10,R16
0028 ; }
0028 ;
0028 ; /****************************************************************************
0028 ; ** Function Name: delay_nms
0028 ; ** Descriptions: delay time
0028 ; ** Input Parameters: uiTime
0028 ; ** Output parameters: void
0028 ; ** Returned Value: void
0028 ; **---------------------------------------------------------------------------
0028 ; ****************************************************************************/
0028 ;
0028 ; void delay_nms(unsigned int uiTime) /* 延时 */
0028 ; {
0028 ; unsigned int i = 0;
0028 4427 clr R20
002A 5527 clr R21
002C ;
002C ; for (i = 0;i < uiTime;i++)
002C 03C0 xjmp L10
002E L7:
002E ; delay_1ms();
002E E8DF xcall _delay_1ms
0030 L8:
0030 4F5F subi R20,255 ; offset = 1
0032 5F4F sbci R21,255
0034 L10:
0034 4A15 cp R20,R10
0036 5B05 cpc R21,R11
0038 D0F3 brlo L7
003A X1:
003A L6:
003A .dbline 0 ; func end
003A 0C940000 xjmp pop_xgset300C
003E ; i -> R10,R11
.even
003E _LED_On::
003E AA92 st -y,R10
0040 BA92 st -y,R11
0042 5801 movw R10,R16
0044 ; }
0044 ;
0044 ; /****************************************************************************
0044 ; ** Function Name: timeDelay
0044 ; ** Descriptions: delay time
0044 ; ** Input Parameters: uiTime
0044 ; ** Output parameters: void
0044 ; ** Returned Value: void
0044 ; **---------------------------------------------------------------------------
0044 ; ****************************************************************************/
0044 ;
0044 ; void LED_On(int i)
0044 ; {
0044 ; PORTB = ~(1<<i); /* 将1左移i位,取反,LED低电平有效 */
0044 01E0 ldi R16,1
0046 10E0 ldi R17,0
0048 9501 movw R18,R10
004A 0E940000 xcall lsl16
004E 1801 movw R2,R16
0050 2094 com R2
0052 3094 com R3
0054 28BA out 0x18,R2
0056 ; delay_nms(100);
0056 04E6 ldi R16,100
0058 10E0 ldi R17,0
005A E3DF xcall _delay_nms
005C L11:
005C .dbline 0 ; func end
005C B990 ld R11,y+
005E A990 ld R10,y+
0060 0895 ret
0062 ; i -> R20,R21
.even
0062 _main::
0062 ; }
0062 ;
0062 ; /****************************************************************************
0062 ; ** Function Name: main
0062 ; ** Descriptions: led display
0062 ; ** Input Parameters: void
0062 ; ** Output parameters: void
0062 ; ** Returned Value: void
0062 ; **---------------------------------------------------------------------------
0062 ; ****************************************************************************/
0062 ;
0062 ; void main()
0062 ; {
0062 ; int i;
0062 ; DDRB = 0xFF; /* B口作输出 */
0062 8FEF ldi R24,255
0064 87BB out 0x17,R24
0066 ; PORTB = 0xFF; /* B口初始化为1 */
0066 88BB out 0x18,R24
0068 2AC0 xjmp L14
006A L13:
006A ;
006A ; while (1) /* 死循环 */
006A ; {
006A ; for (i = 0; i < 8; i++)
006A 4427 clr R20
006C 5527 clr R21
006E L16:
006E ; LED_On(i);
006E 8A01 movw R16,R20
0070 E6DF xcall _LED_On
0072 L17:
0072 4F5F subi R20,255 ; offset = 1
0074 5F4F sbci R21,255
0076 4830 cpi R20,8
0078 E0E0 ldi R30,0
007A 5E07 cpc R21,R30
007C C4F3 brlt L16
007E X2:
007E ; for (i = 8; i > 0; i--)
007E 48E0 ldi R20,8
0080 50E0 ldi R21,0
0082 L20:
0082 ; LED_On(i);
0082 8A01 movw R16,R20
0084 DCDF xcall _LED_On
0086 L21:
0086 4150 subi R20,1
0088 5040 sbci R21,0
008A 2224 clr R2
008C 3324 clr R3
008E 2416 cp R2,R20
0090 3506 cpc R3,R21
0092 BCF3 brlt L20
0094 X3:
0094 ; for (i = 0; i < 8; i += 2)
0094 4427 clr R20
0096 5527 clr R21
0098 L24:
0098 ; LED_On(i);
0098 8A01 movw R16,R20
009A D1DF xcall _LED_On
009C L25:
009C 4E5F subi R20,254 ; offset = 2
009E 5F4F sbci R21,255
00A0 4830 cpi R20,8
00A2 E0E0 ldi R30,0
00A4 5E07 cpc R21,R30
00A6 C4F3 brlt L24
00A8 X4:
00A8 ; for (i = 7; i > 0; i -= 2)
00A8 47E0 ldi R20,7
00AA 50E0 ldi R21,0
00AC L28:
00AC ; LED_On(i);
00AC 8A01 movw R16,R20
00AE C7DF xcall _LED_On
00B0 L29:
00B0 4250 subi R20,2
00B2 5040 sbci R21,0
00B4 2224 clr R2
00B6 3324 clr R3
00B8 2416 cp R2,R20
00BA 3506 cpc R3,R21
00BC BCF3 brlt L28
00BE X5:
00BE ; }
00BE L14:
00BE D5CF xjmp L13
00C0 X6:
00C0 L12:
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 ; }
00C2 ;
00C2 ; /****************************************************************************
00C2 ; END FILE
00C2 ; ****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -