📄 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 ; #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;
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&=~(0x03);
0004 B605 lda 0x5
0006 A4FC and #-4
0008 B705 sta 0x5
000A CC024A jmp L3
000D L2:
000D ; while(1)
000D ; {
000D ; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
000D ; if((light_b&0x3)==0x0)
000D B601 lda 0x1
000F A503 bit #3
0011 2703 beq X17
0013 CC00A1 jmp L5
0016 X17:
0016 ; {
0016 ; light_a|=0xff;
0016 A6FF lda #-1
0018 B700 sta 0
001A ; for(i=0;i<=8;i++)
001A 3F02 clr *_i
001C 202D bra L10
001E L7:
001E ; {
001E ; light_a&=~(1<<light_pin);
001E 6E0100 mov #1,*__r0
0021 B602 lda *_i
0023 A407 and #7
0025 2704 beq X2
0027 X1:
0027 3800 lsl *__r0
0029 4BFC dbnza X1
002B X2:
002B 3300 com *__r0
002D B600 lda 0
002F B400 and *__r0
0031 B700 sta 0
0033 ; for(k=0;k<512;k++) //延时0.25秒
0033 3F01 clr *_k+1
0035 3F00 clr *_k
0037 L11:
0037 CD024E jsr _Delay1000
003A 95 tsx
003B L12:
003B 5500 ldhx *_k
003D AF01 aix #1
003F 3500 sthx *_k
0041 5500 ldhx *_k
0043 650200 cphx #512
0046 95 tsx
0047 91EE blt L11
0049 L8:
0049 3C02 inc *_i
004B L10:
004B B602 lda *_i
004D A108 cmp #8
004F 23CD bls L7
0051 ; Delay1000();
0051 ; }
0051 ; for(i=0;i<=8;i++)
0051 3F02 clr *_i
0053 2043 bra L18
0055 L15:
0055 ; {
0055 ; light_a&=~(0x80>>light_pin);
0055 B602 lda *_i
0057 6E0000 mov #0,*__r2
005A 6E8000 mov #-128,*__r3
005D A40F and #15
005F 2706 beq X4
0061 X3:
0061 3700 asr *__r2
0063 3600 ror *__r3
0065 4BFA dbnza X3
0067 X4:
0067 4E0000 mov *__r2,*__r0
006A 4E0000 mov *__r3,*__r1
006D 3300 com *__r1
006F 3300 com *__r0
0071 3F00 clr *__r2
0073 B600 lda 0
0075 B400 and *__r1
0077 B700 sta *__r1
0079 B600 lda *__r2
007B B400 and *__r0
007D 4E0000 mov *__r1,0
0080 ; for(k=0;k<512;k++)
0080 3F01 clr *_k+1
0082 3F00 clr *_k
0084 L19:
0084 CD024E jsr _Delay1000
0087 95 tsx
0088 L20:
0088 5500 ldhx *_k
008A AF01 aix #1
008C 3500 sthx *_k
008E 5500 ldhx *_k
0090 650200 cphx #512
0093 95 tsx
0094 91EE blt L19
0096 L16:
0096 3C02 inc *_i
0098 L18:
0098 B602 lda *_i
009A A108 cmp #8
009C 23B7 bls L15
009E ; Delay1000();
009E ; }
009E ; }
009E CC024A jmp L6
00A1 L5:
00A1 ; // 8个LED中只有两个连在一起的灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
00A1 ;
00A1 ; else if((light_b&0x3)==0x01)
00A1 B601 lda 0x1
00A3 A403 and #3
00A5 A101 cmp #1
00A7 2703 beq X18
00A9 CC0121 jmp L23
00AC X18:
00AC ; {
00AC ; light_a|=0xff;
00AC A6FF lda #-1
00AE B700 sta 0
00B0 ; for(i=0;i<=8;i++)
00B0 3F02 clr *_i
00B2 202D bra L28
00B4 L25:
00B4 ; {
00B4 ; light_a&=~(3<<light_pin);
00B4 6E0300 mov #3,*__r0
00B7 B602 lda *_i
00B9 A407 and #7
00BB 2704 beq X6
00BD X5:
00BD 3800 lsl *__r0
00BF 4BFC dbnza X5
00C1 X6:
00C1 3300 com *__r0
00C3 B600 lda 0
00C5 B400 and *__r0
00C7 B700 sta 0
00C9 ; for(k=0;k<512;k++) //延时0.25秒
00C9 3F01 clr *_k+1
00CB 3F00 clr *_k
00CD L29:
00CD CD024E jsr _Delay1000
00D0 95 tsx
00D1 L30:
00D1 5500 ldhx *_k
00D3 AF01 aix #1
00D5 3500 sthx *_k
00D7 5500 ldhx *_k
00D9 650200 cphx #512
00DC 95 tsx
00DD 91EE blt L29
00DF L26:
00DF 3C02 inc *_i
00E1 L28:
00E1 B602 lda *_i
00E3 A108 cmp #8
00E5 23CD bls L25
00E7 ; Delay1000();
00E7 ; }
00E7 ; for(i=0;i<=8;i++)
00E7 3F02 clr *_i
00E9 202D bra L36
00EB L33:
00EB ; {
00EB ; light_a&=~(0x12>>light_pin);
00EB 6E1200 mov #18,*__r0
00EE B602 lda *_i
00F0 A407 and #7
00F2 2704 beq X8
00F4 X7:
00F4 3700 asr *__r0
00F6 4BFC dbnza X7
00F8 X8:
00F8 3300 com *__r0
00FA B600 lda 0
00FC B400 and *__r0
00FE B700 sta 0
0100 ; for(k=0;k<512;k++)
0100 3F01 clr *_k+1
0102 3F00 clr *_k
0104 L37:
0104 CD024E jsr _Delay1000
0107 95 tsx
0108 L38:
0108 5500 ldhx *_k
010A AF01 aix #1
010C 3500 sthx *_k
010E 5500 ldhx *_k
0110 650200 cphx #512
0113 95 tsx
0114 91EE blt L37
0116 L34:
0116 3C02 inc *_i
0118 L36:
0118 B602 lda *_i
011A A108 cmp #8
011C 23CD bls L33
011E ; Delay1000();
011E ; }
011E ; }
011E CC024A jmp L24
0121 L23:
0121 ; // 8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒
0121 ; else if((light_b&0x3)==0x02)
0121 B601 lda 0x1
0123 A403 and #3
0125 A102 cmp #2
0127 2703 beq X19
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -