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