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 + -
显示快捷键?