⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.s

📁 要用到开发工具SD-H08
💻 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 + -