main.lis
来自「要用到开发工具SD-H08」· LIS 代码 · 共 590 行 · 第 1/2 页
LIS
590 行
.module main.c
.area text
0000 _main::
0000 ; /*-----------------------------------------------------*
0000 ; *工 程 名:Prgframe.prj *
0000 ; *硬件连接:PTA.1接指示灯 *
0000 ; *程序描述:指示灯PTA.1闪烁 *
0000 ; *目 的:第一个freescale(Motorola) HC08系列MCU程序框架*
0000 ; *说 明:提供Motorola MCU的编程框架,供教学入门使用 *
0000 ; *注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一 *
0000 ; * 直亮,这是由于人的视觉的引起的。 *
0000 ; *--------《嵌入式应用技术基础教程》教学实例-----------*/
0000 ; /*[头文件]*/
0000 ; /*[???]*/
0000 ; #include "GP32C.h" //映像寄存器地址头文件
0000 ; /*[指示灯所接引脚定义]*/
0000 ; #define light_a PTA //灯(Light)接在PTA口
0000 ; #define light_ctrla DDRA //相应的方向寄存器
0000 ; #define light_b PTB
0000 ; #define light_ctrlb DDRB
0000 ; #define light_pin i //灯所在的引脚
0000 ; /*[全局变量声明]*/
0000 ; unsigned char i;
0000 ; int k,z;
0000 ; /*[延时子函数声明]*/
0000 ; void Delay1000(void);
0000 ; /*[主函数]*/
0000 ; void main()
0000 ; {
0000 ; light_ctrla=0xff;
0000 A6FF lda #-1
0002 B704 sta 0x4
0004 ; light_ctrlb=0x00;
0004 3F05 clr 0x5
0006 CC02BC jmp L3
0009 L2:
0009 ; while(1)
0009 ; {
0009 ; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
0009 ; if((light_b&0x03)==0x00)
0009 B601 lda 0x1
000B A503 bit #3
000D 2703 beq X17
000F CC00B4 jmp L5
0012 X17:
0012 ; { for(i=0;i<8;i++)
0012 3F04 clr *_i
0014 2030 bra L10
0016 L7:
0016 ; {if((light_b&0x03)==0x00)
0016 B601 lda 0x1
0018 A503 bit #3
001A 2628 bne L11
001C ; {
001C ; light_a=~(1<<light_pin);
001C 6E0100 mov #1,*__r0
001F B604 lda *_i
0021 A407 and #7
0023 2704 beq X2
0025 X1:
0025 3800 lsl *__r0
0027 4BFC dbnza X1
0029 X2:
0029 B600 lda *__r0
002B 43 coma
002C B700 sta 0
002E ; for(k=0;k<512;k++) //延时0.25秒
002E 3F03 clr *_k+1
0030 3F02 clr *_k
0032 L13:
0032 CD02C0 jsr _Delay1000
0035 95 tsx
0036 L14:
0036 5502 ldhx *_k
0038 AF01 aix #1
003A 3502 sthx *_k
003C 5502 ldhx *_k
003E 650200 cphx #512
0041 95 tsx
0042 91EE blt L13
0044 ; Delay1000();
0044 ; }
0044 L11:
0044 L8:
0044 3C04 inc *_i
0046 L10:
0046 B604 lda *_i
0048 A108 cmp #8
004A 25CA blo L7
004C ; }
004C ; light_a=0xff;
004C A6FF lda #-1
004E B700 sta 0
0050 ; for(k=0;k<512;k++) //延时0.25秒
0050 3F03 clr *_k+1
0052 3F02 clr *_k
0054 L17:
0054 CD02C0 jsr _Delay1000
0057 95 tsx
0058 L18:
0058 5502 ldhx *_k
005A AF01 aix #1
005C 3502 sthx *_k
005E 5502 ldhx *_k
0060 650200 cphx #512
0063 95 tsx
0064 91EE blt L17
0066 ; Delay1000();
0066 ; Delay1000();
0066 CD02C0 jsr _Delay1000
0069 95 tsx
006A ; for(i=0;i<=8;i++)
006A 3F04 clr *_i
006C 203D bra L24
006E L21:
006E ; {if((light_b&0x03)==0x00)
006E B601 lda 0x1
0070 A503 bit #3
0072 2635 bne L25
0074 ; {
0074 ; light_a=~(0x80>>light_pin);
0074 B604 lda *_i
0076 6E0000 mov #0,*__r2
0079 6E8000 mov #-128,*__r3
007C A40F and #15
007E 2706 beq X4
0080 X3:
0080 3700 asr *__r2
0082 3600 ror *__r3
0084 4BFA dbnza X3
0086 X4:
0086 4E0000 mov *__r2,*__r0
0089 4E0000 mov *__r3,*__r1
008C 3300 com *__r1
008E 3300 com *__r0
0090 4E0000 mov *__r1,0
0093 ; for(k=0;k<512;k++)
0093 3F03 clr *_k+1
0095 3F02 clr *_k
0097 L27:
0097 CD02C0 jsr _Delay1000
009A 95 tsx
009B L28:
009B 5502 ldhx *_k
009D AF01 aix #1
009F 3502 sthx *_k
00A1 5502 ldhx *_k
00A3 650200 cphx #512
00A6 95 tsx
00A7 91EE blt L27
00A9 ; Delay1000();
00A9 ; }
00A9 L25:
00A9 L22:
00A9 3C04 inc *_i
00AB L24:
00AB B604 lda *_i
00AD A108 cmp #8
00AF 23BD bls L21
00B1 ; }
00B1 ; }
00B1 CC02BC jmp L6
00B4 L5:
00B4 ;
00B4 ; //8个LED中只有两个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
00B4 ; else if((light_b&0x03)==0x01)
00B4 B601 lda 0x1
00B6 A403 and #3
00B8 A101 cmp #1
00BA 2703 beq X18
00BC CC0161 jmp L31
00BF X18:
00BF ; { for(i=0;i<8;i++)
00BF 3F04 clr *_i
00C1 2032 bra L36
00C3 L33:
00C3 ; {if((light_b&0x03)==0x01)
00C3 B601 lda 0x1
00C5 A403 and #3
00C7 A101 cmp #1
00C9 2628 bne L37
00CB ; {
00CB ; light_a=~(3<<light_pin);
00CB 6E0300 mov #3,*__r0
00CE B604 lda *_i
00D0 A407 and #7
00D2 2704 beq X6
00D4 X5:
00D4 3800 lsl *__r0
00D6 4BFC dbnza X5
00D8 X6:
00D8 B600 lda *__r0
00DA 43 coma
00DB B700 sta 0
00DD ; for(k=0;k<512;k++) //延时0.25秒
00DD 3F03 clr *_k+1
00DF 3F02 clr *_k
00E1 L39:
00E1 CD02C0 jsr _Delay1000
00E4 95 tsx
00E5 L40:
00E5 5502 ldhx *_k
00E7 AF01 aix #1
00E9 3502 sthx *_k
00EB 5502 ldhx *_k
00ED 650200 cphx #512
00F0 95 tsx
00F1 91EE blt L39
00F3 ; Delay1000();
00F3 ; }
00F3 L37:
00F3 L34:
00F3 3C04 inc *_i
00F5 L36:
00F5 B604 lda *_i
00F7 A108 cmp #8
00F9 25C8 blo L33
00FB ; }
00FB ; light_a=0xff;
00FB A6FF lda #-1
00FD B700 sta 0
00FF ; for(k=0;k<512;k++) //延时0.25秒
00FF 3F03 clr *_k+1
0101 3F02 clr *_k
0103 L43:
0103 CD02C0 jsr _Delay1000
0106 95 tsx
0107 L44:
0107 5502 ldhx *_k
0109 AF01 aix #1
010B 3502 sthx *_k
010D 5502 ldhx *_k
010F 650200 cphx #512
0112 95 tsx
0113 91EE blt L43
0115 ; Delay1000();
0115 ; for(i=0;i<=8;i++)
0115 3F04 clr *_i
0117 203F bra L50
0119 L47:
0119 ; {if((light_b&0x03)==0x01)
0119 B601 lda 0x1
011B A403 and #3
011D A101 cmp #1
011F 2635 bne L51
0121 ; {
0121 ; light_a=~(0xc0>>light_pin);
0121 B604 lda *_i
0123 6E0000 mov #0,*__r2
0126 6EC000 mov #-64,*__r3
0129 A40F and #15
012B 2706 beq X8
012D X7:
012D 3700 asr *__r2
012F 3600 ror *__r3
0131 4BFA dbnza X7
0133 X8:
0133 4E0000 mov *__r2,*__r0
0136 4E0000 mov *__r3,*__r1
0139 3300 com *__r1
013B 3300 com *__r0
013D 4E0000 mov *__r1,0
0140 ; for(k=0;k<512;k++)
0140 3F03 clr *_k+1
0142 3F02 clr *_k
0144 L53:
0144 CD02C0 jsr _Delay1000
0147 95 tsx
0148 L54:
0148 5502 ldhx *_k
014A AF01 aix #1
014C 3502 sthx *_k
014E 5502 ldhx *_k
0150 650200 cphx #512
0153 95 tsx
0154 91EE blt L53
0156 ; Delay1000();
0156 ; }
0156 L51:
0156 L48:
0156 3C04 inc *_i
0158 L50:
0158 B604 lda *_i
015A A108 cmp #8
015C 23BB bls L47
015E ; }
015E ; }
015E CC02BC jmp L32
0161 L31:
0161 ; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
0161 ; else if((light_b&0x03)==0x02)
0161 B601 lda 0x1
0163 A403 and #3
0165 A102 cmp #2
0167 2703 beq X19
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?