📄 main.s
字号:
.module main.c
.area text
_main::
; /*-----------------------------------------------------*
; *工 程 名:Prgframe.prj *
; *硬件连接:PTA.1接指示灯 *
; *程序描述:指示灯PTA.1闪烁 *
; *目 的:第一个freescale(Motorola) HC08系列MCU程序框架*
; *说 明:提供Motorola MCU的编程框架,供教学入门使用 *
; *注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一 *
; * 直亮,这是由于人的视觉的引起的。 *
; *--------《嵌入式应用技术基础教程》教学实例-----------*/
; /*[头文件]*/
; /*[???]*/
; #include "GP32C.h" //映像寄存器地址头文件
; /*[指示灯所接引脚定义]*/
; #define light_a PTA //灯(Light)接在PTA口
; #define light_ctrla DDRA //相应的方向寄存器
; #define light_b PTB
; #define light_ctrlb DDRB
; #define light_pin i //灯所在的引脚
; /*[全局变量声明]*/
; unsigned char i;
; int k,z;
; /*[延时子函数声明]*/
; void Delay1000(void);
; /*[主函数]*/
; void main()
; {
; light_ctrla=0xff;
lda #-1
sta 0x4
; light_ctrlb=0x00;
clr 0x5
jmp L3
L2:
; while(1)
; {
; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
; if((light_b&0x03)==0x00)
lda 0x1
bit #3
beq X17
jmp L5
X17:
; { for(i=0;i<8;i++)
clr *_i
bra L10
L7:
; {if((light_b&0x03)==0x00)
lda 0x1
bit #3
bne L11
; {
; light_a=~(1<<light_pin);
mov #1,*__r0
lda *_i
and #7
beq X2
X1:
lsl *__r0
dbnza X1
X2:
lda *__r0
coma
sta 0
; for(k=0;k<512;k++) //延时0.25秒
clr *_k+1
clr *_k
L13:
jsr _Delay1000
tsx
L14:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L13
; Delay1000();
; }
L11:
L8:
inc *_i
L10:
lda *_i
cmp #8
blo L7
; }
; light_a=0xff;
lda #-1
sta 0
; for(k=0;k<512;k++) //延时0.25秒
clr *_k+1
clr *_k
L17:
jsr _Delay1000
tsx
L18:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L17
; Delay1000();
; Delay1000();
jsr _Delay1000
tsx
; for(i=0;i<=8;i++)
clr *_i
bra L24
L21:
; {if((light_b&0x03)==0x00)
lda 0x1
bit #3
bne L25
; {
; light_a=~(0x80>>light_pin);
lda *_i
mov #0,*__r2
mov #-128,*__r3
and #15
beq X4
X3:
asr *__r2
ror *__r3
dbnza X3
X4:
mov *__r2,*__r0
mov *__r3,*__r1
com *__r1
com *__r0
mov *__r1,0
; for(k=0;k<512;k++)
clr *_k+1
clr *_k
L27:
jsr _Delay1000
tsx
L28:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L27
; Delay1000();
; }
L25:
L22:
inc *_i
L24:
lda *_i
cmp #8
bls L21
; }
; }
jmp L6
L5:
;
; //8个LED中只有两个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
; else if((light_b&0x03)==0x01)
lda 0x1
and #3
cmp #1
beq X18
jmp L31
X18:
; { for(i=0;i<8;i++)
clr *_i
bra L36
L33:
; {if((light_b&0x03)==0x01)
lda 0x1
and #3
cmp #1
bne L37
; {
; light_a=~(3<<light_pin);
mov #3,*__r0
lda *_i
and #7
beq X6
X5:
lsl *__r0
dbnza X5
X6:
lda *__r0
coma
sta 0
; for(k=0;k<512;k++) //延时0.25秒
clr *_k+1
clr *_k
L39:
jsr _Delay1000
tsx
L40:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L39
; Delay1000();
; }
L37:
L34:
inc *_i
L36:
lda *_i
cmp #8
blo L33
; }
; light_a=0xff;
lda #-1
sta 0
; for(k=0;k<512;k++) //延时0.25秒
clr *_k+1
clr *_k
L43:
jsr _Delay1000
tsx
L44:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L43
; Delay1000();
; for(i=0;i<=8;i++)
clr *_i
bra L50
L47:
; {if((light_b&0x03)==0x01)
lda 0x1
and #3
cmp #1
bne L51
; {
; light_a=~(0xc0>>light_pin);
lda *_i
mov #0,*__r2
mov #-64,*__r3
and #15
beq X8
X7:
asr *__r2
ror *__r3
dbnza X7
X8:
mov *__r2,*__r0
mov *__r3,*__r1
com *__r1
com *__r0
mov *__r1,0
; for(k=0;k<512;k++)
clr *_k+1
clr *_k
L53:
jsr _Delay1000
tsx
L54:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #512
tsx
blt L53
; Delay1000();
; }
L51:
L48:
inc *_i
L50:
lda *_i
cmp #8
bls L47
; }
; }
jmp L32
L31:
; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
; else if((light_b&0x03)==0x02)
lda 0x1
and #3
cmp #2
beq X19
jmp L57
X19:
; { for(i=0;i<8;i++)
clr *_i
bra L62
L59:
; {if((light_b&0x03)==0x02)
lda 0x1
and #3
cmp #2
bne L63
; {
; light_a=~(1<<light_pin);
mov #1,*__r0
lda *_i
and #7
beq X10
X9:
lsl *__r0
dbnza X9
X10:
lda *__r0
coma
sta 0
; for(k=0;k<1024;k++) //延时0.5秒
clr *_k+1
clr *_k
L65:
jsr _Delay1000
tsx
L66:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L65
; Delay1000();
; }
L63:
L60:
inc *_i
L62:
lda *_i
cmp #8
blo L59
; }
; light_a=0xff;
lda #-1
sta 0
; for(k=0;k<1024;k++) //延时0.5秒
clr *_k+1
clr *_k
L69:
jsr _Delay1000
tsx
L70:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L69
; Delay1000();
; for(i=0;i<=8;i++)
clr *_i
bra L76
L73:
; {if((light_b&0x03)==0x02)
lda 0x1
and #3
cmp #2
bne L77
; {
; light_a=~(0x80>>light_pin);
lda *_i
mov #0,*__r2
mov #-128,*__r3
and #15
beq X12
X11:
asr *__r2
ror *__r3
dbnza X11
X12:
mov *__r2,*__r0
mov *__r3,*__r1
com *__r1
com *__r0
mov *__r1,0
; for(k=0;k<1024;k++)
clr *_k+1
clr *_k
L79:
jsr _Delay1000
tsx
L80:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L79
; Delay1000();
; }
L77:
L74:
inc *_i
L76:
lda *_i
cmp #8
bls L73
; }
; }
jmp L58
L57:
; //8个LED中只有两个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
; else if((light_b&0x03)==0x03)
lda 0x1
and #3
cmp #3
beq X20
jmp L83
X20:
; { for(i=0;i<8;i++)
clr *_i
bra L88
L85:
; {if((light_b&0x03)==0x03)
lda 0x1
and #3
cmp #3
bne L89
; {
; light_a=~(3<<light_pin);
mov #3,*__r0
lda *_i
and #7
beq X14
X13:
lsl *__r0
dbnza X13
X14:
lda *__r0
coma
sta 0
; for(k=0;k<1024;k++) //延时0.5秒
clr *_k+1
clr *_k
L91:
jsr _Delay1000
tsx
L92:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L91
; Delay1000();
; }
L89:
L86:
inc *_i
L88:
lda *_i
cmp #8
blo L85
; }
; light_a=0xff;
lda #-1
sta 0
; for(k=0;k<1024;k++) //延时0.5秒
clr *_k+1
clr *_k
L95:
jsr _Delay1000
tsx
L96:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L95
; Delay1000();
; Delay1000();
jsr _Delay1000
tsx
; for(i=0;i<=8;i++) //延时0.6秒
clr *_i
bra L102
L99:
; {if((light_b&0x03)==0x03)
lda 0x1
and #3
cmp #3
bne L103
; {
; light_a=~(0xc0>>light_pin);
lda *_i
mov #0,*__r2
mov #-64,*__r3
and #15
beq X16
X15:
asr *__r2
ror *__r3
dbnza X15
X16:
mov *__r2,*__r0
mov *__r3,*__r1
com *__r1
com *__r0
mov *__r1,0
; for(k=0;k<1024;k++)
clr *_k+1
clr *_k
L105:
jsr _Delay1000
tsx
L106:
ldhx *_k
aix #1
sthx *_k
ldhx *_k
cphx #1024
tsx
blt L105
; Delay1000();
; }
L103:
L100:
inc *_i
L102:
lda *_i
cmp #8
bls L99
; }
; }
L83:
L58:
L32:
L6:
L3:
jmp L2
X0:
L1:
.dbline 0 ; func end
rts
; u -> 0,X
_Delay1000::
ais #-1
tsx
; //IF结束
; }
; //while 结束
;
; }
; //主函数结束
; /*[内部子程序存放处]
; /*Delay1000:延时1000个时钟周期-------------------------*
; *功 能:延时函数(约1000个时钟周期) *
; *参 数:无 *
; *返 回:无 *
; *-----------------------------------------------------*/
; void Delay1000(void)
; { unsigned char u;
clr ,X
bra L113
L110:
L111:
inc ,X
L113:
; for(u=0;u<=110;u++);
lda ,X
cmp #110
bls L110
L109:
ais #1
.dbline 0 ; func end
rts
.area bss
_z::
.blkb 2
_k::
.blkb 2
_i::
.blkb 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -