main.s

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

S
1,067
字号
	.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:
;             		{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L18
;             			{
;             			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
L20:
	jsr _Delay1000
	tsx
L21:
	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 L20
;             			Delay1000();
;             			}
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
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L24:
	jsr _Delay1000
	tsx
L25:
	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 L24
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L28:
;             		{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L32
;             			{
;             			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
L34:
	jsr _Delay1000
	tsx
L35:
	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 L34
;             			Delay1000();
;             			}
L32:
L29:
	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 L28
;             		}
;             		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 L38
X20:
;      			{  SCISendN(10,"LED效果2 ");
	ldhx #L40
	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
L41:
	jsr _Delay1000
	tsx
L42:
	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 L41
;             		Delay1000();
;             	for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L45:
;             		{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L49
;             			{
;             			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
L51:
	jsr _Delay1000
	tsx
L52:
	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 L51
;             			Delay1000();
;             			}
L49:
L46:
	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 L45
;             		}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L55:
	jsr _Delay1000
	tsx
L56:
	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 L55
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L59:
;             		{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L63
;             			{
;             			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
L65:
	jsr _Delay1000
	tsx
L66:
	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 L65
;             			Delay1000();
;             			}
L63:
L60:
	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 L59
;             		}
;             		light_a=0xff;	
	lda #-1
	sta 0
; 
;      			}
	jmp L39
L38:
;  //8个LED中只有一个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约8秒。
;      		else if(SerialBuff[0]=='3')
	lda *_SerialBuff
	cmp #51
	beq X21
	jmp L69
X21:
;      			{   SCISendN(10,"LED效果3 ");
	ldhx #L71
	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
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
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L76:
;             			{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L80
;             			{
;             			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
L82:
	jsr _Delay1000
	tsx
L83:
	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 L82
;             			Delay1000();
;             			}
L80:
L77:
	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 L76
;             			}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			   	for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L86:
	jsr _Delay1000
	tsx
L87:
	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 L86
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L90:
;             			{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L94
;             			{
;             			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
L96:
	jsr _Delay1000
	tsx
L97:
	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 L96
;             			Delay1000();
;             			}
L94:
L91:
	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 L90
;             			}
;             		light_a=0xff;	
	lda #-1
	sta 0
; 
;      			} 
	jmp L70
L69:
;      			
;  //8个LED中只有2个灯亮,亮灯顺序是从左到右,再从右到左,一个周期时间长度约4秒。
;      		else if(SerialBuff[0]=='4')
	lda *_SerialBuff
	cmp #52
	beq X22
	jmp L100
X22:
;      			{   SCISendN(10,"LED效果4 ");
	ldhx #L102
	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
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:
;             			{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L111
;             			{
;             			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
L113:
	jsr _Delay1000
	tsx
L114:
	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 L113
;             			Delay1000();
;             			}
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
;             			}
;             		light_a=0xff;
	lda #-1
	sta 0
;      			  	for(lk=0;lk<1024;lk++)
	clr 7,X
	clr 6,X
L117:
	jsr _Delay1000
	tsx
L118:
	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 L117
;             		Delay1000();
;             		for(i=0;i<8;i++)
	clr 3,X
	clr 2,X
L121:
;             			{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,L125
;             			{
;             			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
L127:
	jsr _Delay1000
	tsx
L128:
	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 L127
;             			Delay1000();
; 						}
L125:
L122:
	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 L121
;             			}
;             		light_a=0xff;	
	lda #-1
	sta 0
;      			}
	jmp L101
L100:
; //收到其他字符:LED灯全部一起闪烁(同时亮同时熄,周期1秒),并向串行口发送字符串"输入错误!"
;      			else 
;      			{ SCISendN(10,"输入错误!");
	ldhx #L131
	pshx
	pshh
	lda #10
	psha
	jsr _SCISendN
	ais #3
	tsx
;      				for(i=0;i<4;i++)
	clr 3,X
	clr 2,X
L132:
;      				{if((ReSendStatusR & (1<<ReTestBit))==0)
	brset #5,0x16,X23
	bra X24
X23: jmp L136
X24:

;             			{
;      					light_a=0x00;
	clr 0
;      					for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L138:
;      						{
;      					for(p=0;p<2;p++)
	clr 5,X
	clr 4,X
L142:
	jsr _Delay1000
	tsx
L143:
	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 L142
L139:
	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 L138
;             			Delay1000();//延长时间0.5秒
;             				}
;             			light_a=0xff;
	lda #-1
	sta 0
;      				for(lk=0;lk<512;lk++)
	clr 7,X
	clr 6,X
L146:
;      					{
;      				for(p=0;p<2;p++)
	clr 5,X
	clr 4,X
L150:
	jsr _Delay1000
	tsx
L151:
	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 L150
L147:
	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 L146
;             		Delay1000();}
;             			}        //延长时间0.5秒
L136:
	lda #-1
	sta 0
L133:
	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 X25
	jmp L132
X25:
;             		light_a=0xff;
;             		}
;      			}   			
L101:
L70:
L39:
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 L158
L155:
L156:
	inc ,X
L158:
;     for(u=0;u<=110;u++);
	lda ,X
	cmp #110
	bls L155
L154:
	ais #1
	.dbline 0 ; func end
	rts
	.area bss
_SerialBuff::
	.blkb 1
_z::
	.blkb 2
_k::
	.blkb 2
_i::
	.blkb 1
	.area lit
L131:
	.byte 202,228,200,235,180,237,206,243,163,161,0
L102:
	.byte 'L,'E,'D,208,167,185,251,52,32,0
L71:
	.byte 'L,'E,'D,208,167,185,251,51,32,0
L40:
	.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 + -
显示快捷键?