📄 main.lis
字号:
.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 CC0280 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 CC00A8 jmp L5
0012 X17:
0012 ; { for(i=0;i<8;i++)
0012 3F04 clr *_i
0014 202A bra L10
0016 L7:
0016 ; {
0016 ; light_a=~(1<<light_pin);
0016 6E0100 mov #1,*__r0
0019 B604 lda *_i
001B A407 and #7
001D 2704 beq X2
001F X1:
001F 3800 lsl *__r0
0021 4BFC dbnza X1
0023 X2:
0023 B600 lda *__r0
0025 43 coma
0026 B700 sta 0
0028 ; for(k=0;k<512;k++) //延时0.25秒
0028 3F03 clr *_k+1
002A 3F02 clr *_k
002C L11:
002C CD0284 jsr _Delay1000
002F 95 tsx
0030 L12:
0030 5502 ldhx *_k
0032 AF01 aix #1
0034 3502 sthx *_k
0036 5502 ldhx *_k
0038 650200 cphx #512
003B 95 tsx
003C 91EE blt L11
003E L8:
003E 3C04 inc *_i
0040 L10:
0040 B604 lda *_i
0042 A108 cmp #8
0044 25D0 blo L7
0046 ; Delay1000();
0046 ; }
0046 ; light_a=0xff;
0046 A6FF lda #-1
0048 B700 sta 0
004A ; for(k=0;k<512;k++) //延时0.25秒
004A 3F03 clr *_k+1
004C 3F02 clr *_k
004E L15:
004E CD0284 jsr _Delay1000
0051 95 tsx
0052 L16:
0052 5502 ldhx *_k
0054 AF01 aix #1
0056 3502 sthx *_k
0058 5502 ldhx *_k
005A 650200 cphx #512
005D 95 tsx
005E 91EE blt L15
0060 ; Delay1000();
0060 ; Delay1000();
0060 CD0284 jsr _Delay1000
0063 95 tsx
0064 ; for(i=0;i<=8;i++)
0064 3F04 clr *_i
0066 2037 bra L22
0068 L19:
0068 ; {
0068 ; light_a=~(0x80>>light_pin);
0068 B604 lda *_i
006A 6E0000 mov #0,*__r2
006D 6E8000 mov #-128,*__r3
0070 A40F and #15
0072 2706 beq X4
0074 X3:
0074 3700 asr *__r2
0076 3600 ror *__r3
0078 4BFA dbnza X3
007A X4:
007A 4E0000 mov *__r2,*__r0
007D 4E0000 mov *__r3,*__r1
0080 3300 com *__r1
0082 3300 com *__r0
0084 4E0000 mov *__r1,0
0087 ; for(k=0;k<512;k++)
0087 3F03 clr *_k+1
0089 3F02 clr *_k
008B L23:
008B CD0284 jsr _Delay1000
008E 95 tsx
008F L24:
008F 5502 ldhx *_k
0091 AF01 aix #1
0093 3502 sthx *_k
0095 5502 ldhx *_k
0097 650200 cphx #512
009A 95 tsx
009B 91EE blt L23
009D L20:
009D 3C04 inc *_i
009F L22:
009F B604 lda *_i
00A1 A108 cmp #8
00A3 23C3 bls L19
00A5 ; Delay1000();
00A5 ; }
00A5 ; }
00A5 CC0280 jmp L6
00A8 L5:
00A8 ;
00A8 ; //8个LED中只有两个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
00A8 ; else if((light_b&0x03)==0x01)
00A8 B601 lda 0x1
00AA A403 and #3
00AC A101 cmp #1
00AE 2703 beq X18
00B0 CC0145 jmp L27
00B3 X18:
00B3 ; { for(i=0;i<8;i++)
00B3 3F04 clr *_i
00B5 202A bra L32
00B7 L29:
00B7 ; {
00B7 ; light_a=~(3<<light_pin);
00B7 6E0300 mov #3,*__r0
00BA B604 lda *_i
00BC A407 and #7
00BE 2704 beq X6
00C0 X5:
00C0 3800 lsl *__r0
00C2 4BFC dbnza X5
00C4 X6:
00C4 B600 lda *__r0
00C6 43 coma
00C7 B700 sta 0
00C9 ; for(k=0;k<512;k++) //延时0.25秒
00C9 3F03 clr *_k+1
00CB 3F02 clr *_k
00CD L33:
00CD CD0284 jsr _Delay1000
00D0 95 tsx
00D1 L34:
00D1 5502 ldhx *_k
00D3 AF01 aix #1
00D5 3502 sthx *_k
00D7 5502 ldhx *_k
00D9 650200 cphx #512
00DC 95 tsx
00DD 91EE blt L33
00DF L30:
00DF 3C04 inc *_i
00E1 L32:
00E1 B604 lda *_i
00E3 A108 cmp #8
00E5 25D0 blo L29
00E7 ; Delay1000();
00E7 ; }
00E7 ; light_a=0xff;
00E7 A6FF lda #-1
00E9 B700 sta 0
00EB ; for(k=0;k<512;k++) //延时0.25秒
00EB 3F03 clr *_k+1
00ED 3F02 clr *_k
00EF L37:
00EF CD0284 jsr _Delay1000
00F2 95 tsx
00F3 L38:
00F3 5502 ldhx *_k
00F5 AF01 aix #1
00F7 3502 sthx *_k
00F9 5502 ldhx *_k
00FB 650200 cphx #512
00FE 95 tsx
00FF 91EE blt L37
0101 ; Delay1000();
0101 ; for(i=0;i<=8;i++)
0101 3F04 clr *_i
0103 2037 bra L44
0105 L41:
0105 ; {
0105 ; light_a=~(0xc0>>light_pin);
0105 B604 lda *_i
0107 6E0000 mov #0,*__r2
010A 6EC000 mov #-64,*__r3
010D A40F and #15
010F 2706 beq X8
0111 X7:
0111 3700 asr *__r2
0113 3600 ror *__r3
0115 4BFA dbnza X7
0117 X8:
0117 4E0000 mov *__r2,*__r0
011A 4E0000 mov *__r3,*__r1
011D 3300 com *__r1
011F 3300 com *__r0
0121 4E0000 mov *__r1,0
0124 ; for(k=0;k<512;k++)
0124 3F03 clr *_k+1
0126 3F02 clr *_k
0128 L45:
0128 CD0284 jsr _Delay1000
012B 95 tsx
012C L46:
012C 5502 ldhx *_k
012E AF01 aix #1
0130 3502 sthx *_k
0132 5502 ldhx *_k
0134 650200 cphx #512
0137 95 tsx
0138 91EE blt L45
013A L42:
013A 3C04 inc *_i
013C L44:
013C B604 lda *_i
013E A108 cmp #8
0140 23C3 bls L41
0142 ; Delay1000();
0142 ; }
0142 ; }
0142 CC0280 jmp L28
0145 L27:
0145 ; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
0145 ; else if((light_b&0x03)==0x02)
0145 B601 lda 0x1
0147 A403 and #3
0149 A102 cmp #2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -