main.s

来自「要用到开发工具SD-H08」· S 代码 · 共 1,026 行

S
1,026
字号
	.module main.c
	.area text
;             mo -> 0,X
;              k -> 1,X
;              i -> 2,X
;              p -> 4,X
;             lk -> 6,X
_main::
	ais #-8
	tsx
; /*-----------------------------------------------------*
; *工 程 名:H08SCI_1                                     *
; *硬件连接:无                                           *
; *程序描述:把收到的数据发送回去                         *
; *目    的:初步掌握利用查询方式进行串行通信的基本知识   *
; *-------《嵌入式应用技术基础教程》教学实例------------*/
; //头文件
; #include "SCI.h"         //串行通信子程序头文件
; #include "light.h"     //灯的初始化头文件
; //函数声明
; extern void SCIInit(void);  //串行口初始化子程序
; //内存变量声明
; unsigned char SerialBuff[]; //存放接收数据的数组
; void Delay1000(void);
; //主程序
; void main()
;  {   int lk,i,p;  
;     unsigned char k,mo;
;     light_ctrla=0xff;
	lda #-1
	sta 0x4
;       light_ctrlb=0x00;
	clr 0x5
;     SCIInit();       //调串行口初始化子程序
	jsr _SCIInit
	tsx
	jmp L3
L2:
;           //调串行口初始化子程序
; 
;     while(1)
;      {
;       i=SCIReN(1,SerialBuff);         //等待接收1个数据
	ldhx #_SerialBuff
	pshx
	pshh
	lda #1
	psha
	jsr _SCIReN
	ais #3
	tsx
	sta *__r1
	clr 2,X
	sta 3,X
;       if(i==0)
	lda 2,X
	beq X17
	jmp L5
X17:
	lda 3,X
	beq X18
	jmp L5
X18:
;       {  
;       k=SerialBuff[0];
	lda *_SerialBuff
	sta 1,X
; //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
;      		if(SerialBuff[0]=='1')
	lda *_SerialBuff
	cmp #49
	beq X19
	jmp L7
X19:
;      			{   SCISendN(10,"LED效果1");
	ldhx #L9
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      			        light_a=0xff;
	lda #-1
	sta 0
;      			             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L10:
	jsr _Delay1000
	tsx
L11:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L10
;             		Delay1000();
;             	for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L14:
;             		{
;             		light_a=(0xff)^(1<<i);
	mov #0,*__r0
	mov #1,*__r1
	lda 3,X
	and #15
	beq X2
X1:
	lsl *__r1
	rol *__r0
	dbnza X1
X2:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L18:
	jsr _Delay1000
	tsx
L19:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L18
L15:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L14
;             		Delay1000();
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L22:
	jsr _Delay1000
	tsx
L23:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L22
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L26:
;             		{
;             		light_a=(0xff)^(0x80>>i);
	mov #0,*__r0
	mov #-128,*__r1
	lda 3,X
	and #15
	beq X4
X3:
	asr *__r0
	ror *__r1
	dbnza X3
X4:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L30:
	jsr _Delay1000
	tsx
L31:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L30
L27:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L26
;             		Delay1000();
;             		}
;             		light_a=0xff;	
	lda #-1
	sta 0
; 							
;      			}	
	jmp L8
L7:
;  //8个LED中只有2个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
;      		else if(SerialBuff[0]=='2')
	lda *_SerialBuff
	cmp #50
	beq X20
	jmp L34
X20:
;      			{        SCISendN(10,"LED效果2 ");
	ldhx #L36
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      			   light_a=0xff;
	lda #-1
	sta 0
;      			             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L37:
	jsr _Delay1000
	tsx
L38:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L37
;             		Delay1000();
;             	for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L41:
;             		{
;             		light_a=(0xff)^(3<<i);
	mov #0,*__r0
	mov #3,*__r1
	lda 3,X
	and #15
	beq X6
X5:
	lsl *__r1
	rol *__r0
	dbnza X5
X6:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L45:
	jsr _Delay1000
	tsx
L46:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L45
L42:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L41
;             		Delay1000();
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L49:
	jsr _Delay1000
	tsx
L50:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L49
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L53:
;             		{
;             		light_a=(0xff)^(0xc0>>i);
	mov #0,*__r0
	mov #-64,*__r1
	lda 3,X
	and #15
	beq X8
X7:
	asr *__r0
	ror *__r1
	dbnza X7
X8:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L57:
	jsr _Delay1000
	tsx
L58:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #512
	tsx
	blt L57
L54:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L53
;             		Delay1000();
;             		}
;             		light_a=0xff;	
	lda #-1
	sta 0
; 
;      			}
	jmp L35
L34:
;  //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
;      		else if(SerialBuff[0]=='3')
	lda *_SerialBuff
	cmp #51
	beq X21
	jmp L61
X21:
;      			{   SCISendN(10,"LED效果3 ");
	ldhx #L63
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      			        light_a=0xff;
	lda #-1
	sta 0
;      			             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L64:
	jsr _Delay1000
	tsx
L65:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L64
;             		Delay1000();
;             	for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L68:
;             		{
;             		light_a=(0xff)^(1<<i);
	mov #0,*__r0
	mov #1,*__r1
	lda 3,X
	and #15
	beq X10
X9:
	lsl *__r1
	rol *__r0
	dbnza X9
X10:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L72:
	jsr _Delay1000
	tsx
L73:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L72
L69:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L68
;             		Delay1000();
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L76:
	jsr _Delay1000
	tsx
L77:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L76
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L80:
;             		{
;             		light_a=(0xff)^(0x80>>i);
	mov #0,*__r0
	mov #-128,*__r1
	lda 3,X
	and #15
	beq X12
X11:
	asr *__r0
	ror *__r1
	dbnza X11
X12:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L84:
	jsr _Delay1000
	tsx
L85:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L84
L81:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L80
;             		Delay1000();
;             		}
;             		light_a=0xff;	
	lda #-1
	sta 0
; 
;      			} 
	jmp L62
L61:
;      			
;  //8个LED中只有2个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
;      		else if(SerialBuff[0]=='4')
	lda *_SerialBuff
	cmp #52
	beq X22
	jmp L88
X22:
;      			{        SCISendN(10,"LED效果4 ");
	ldhx #L90
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      			   light_a=0xff;
	lda #-1
	sta 0
;      			             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L91:
	jsr _Delay1000
	tsx
L92:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L91
;             		Delay1000();
;             	for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L95:
;             		{
;             		light_a=(0xff)^(3<<i);
	mov #0,*__r0
	mov #3,*__r1
	lda 3,X
	and #15
	beq X14
X13:
	lsl *__r1
	rol *__r0
	dbnza X13
X14:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L99:
	jsr _Delay1000
	tsx
L100:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L99
L96:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L95
;             		Delay1000();
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L103:
	jsr _Delay1000
	tsx
L104:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L103
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L107:
;             		{
;             		light_a=(0xff)^(0xc0>>i);
	mov #0,*__r0
	mov #-64,*__r1
	lda 3,X
	and #15
	beq X16
X15:
	asr *__r0
	ror *__r1
	dbnza X15
X16:
	lda *__r1
	eor #-1
	sta *__r1
	lda *__r0
	eor #0
	mov *__r1,0
;             		for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L111:
	jsr _Delay1000
	tsx
L112:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L111
L108:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #8
	tsx
	blt L107
;             		Delay1000();
;             		}
;             		light_a=0xff;	
	lda #-1
	sta 0
;      			}
	jmp L89
L88:
; //收到其他字符:LED灯全部一起闪烁(同时亮同时熄,周期1秒),并向串行口发送字符串"输入错误!"
;      			else 
;      			{ SCISendN(10,"输入错误!");
	ldhx #L115
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      				for(i=0;i<4;i++)
	clr 3,X
	clr 2,X
L116:
;      				{
;      				light_a=0xff;
	lda #-1
	sta 0
	clr 7,X
	clr 6,X
L120:
;      				for(lk=0;lk<1024;lk++){
;      				for(p=0;p<2;p++)
	clr 5,X
	clr 4,X
L124:
	jsr _Delay1000
	tsx
L125:
	lda 5,X
	add #1
	sta 5,X
	lda 4,X
	adc #0
	sta 4,X
	lda 5,X
	sta *__r1
	lda 4,X
	sta *__r0
	ldhx *__r0
	cphx #2
	tsx
	blt L124
L121:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L120
;             		Delay1000();}
;             		light_a=0x00;
	clr 0
	clr 7,X
	clr 6,X
L128:
;      				for(lk=0;lk<1024;lk++){
;      				for(p=0;p<2;p++)
	clr 5,X
	clr 4,X
L132:
	jsr _Delay1000
	tsx
L133:
	lda 5,X
	add #1
	sta 5,X
	lda 4,X
	adc #0
	sta 4,X
	lda 5,X
	sta *__r1
	lda 4,X
	sta *__r0
	ldhx *__r0
	cphx #2
	tsx
	blt L132
L129:
	lda 7,X
	add #1
	sta 7,X
	lda 6,X
	adc #0
	sta 6,X
	lda 7,X
	sta *__r1
	lda 6,X
	sta *__r0
	ldhx *__r0
	cphx #1024
	tsx
	blt L128
L117:
	lda 3,X
	add #1
	sta 3,X
	lda 2,X
	adc #0
	sta 2,X
	lda 3,X
	sta *__r1
	lda 2,X
	sta *__r0
	ldhx *__r0
	cphx #4
	tsx
	bge X23
	jmp L116
X23:
;             		Delay1000();}
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			}   			
L89:
L62:
L35:
L8:
;      	}//接收效果演示结束;
L5:
L3:
	jmp L2
X0:
L1:
	ais #8
	.dbline 0 ; func end
	rts
;              u -> 0,X
_Delay1000::
	ais #-1
	tsx
;      				
;      				
;        }//while(1)尾部
;       
;  }//主函数结束
; 
; 
;  //延时程序,延长时间1000个周期
;  void Delay1000(void)
;   {  unsigned char u; 
	clr ,X
	bra L140
L137:
L138:
	inc ,X
L140:
;     for(u=0;u<=110;u++);
	lda ,X
	cmp #110
	bls L137
L136:
	ais #1
	.dbline 0 ; func end
	rts
	.area bss
_SerialBuff::
	.blkb 1
_z::
	.blkb 2
_k::
	.blkb 2
_i::
	.blkb 1
	.area lit
L115:
	.byte 202,228,200,235,180,237,206,243,163,161,0
L90:
	.byte 'L,'E,'D,208,167,185,251,52,32,0
L63:
	.byte 'L,'E,'D,208,167,185,251,51,32,0
L36:
	.byte 'L,'E,'D,208,167,185,251,50,32,0
L9:
	.byte 'L,'E,'D,208,167,185,251,49,0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?