📄 sci.s
字号:
.module SCI.c
.area text
.dbfile SCI.c
.dbfunc e SCISend1 _SCISend1 fV
; o -> 2,X
_SCISend1::
.dbline -1
tsx
.dbline 17
; /*-------------------------------------------------------------------------*
; *文件描述:本文件包含了串行通信的4子程序,分别为: *
; *(1)SCISend1:串行发送1字节 *
; *(2)SCISendN:串行发送n字节 *
; *(3)SCIRe1:串行接收1字节 *
; *(4)SCIReN:串行接收n字节 *
; *----------------------《嵌入式应用技术基础教程》-------------------------*/
;
; /*[包含头文件]*/
; #include "SCI.h"
; /*SCISend1:串行发送1个字节-------------------------------------------------*
; *功 能:串行发送1个字节 *
; *参 数:要发送的数据 *
; *返 回:无 *
; *-------------------------------------------------------------------------*/
; void SCISend1(unsigned char o)
; {
bra L3
L2:
.dbline 20
; //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
; while(1)
; if ((ReSendStatusR & (1<<SendTestBit)) != 0)
brclr #7,0x16,L5
.dbline 21
; {
.dbline 22
; ReSendDataR=o;
lda 2,X
sta 0x18
.dbline 23
; break;
bra L4
L5:
L3:
.dbline 19
bra L2
L4:
.dbline -2
L1:
.dbline 0 ; func end
rts
.dbsym l o 2 c
.dbend
.dbfunc e SCISendN _SCISendN fV
; i -> 0,X
; ch -> 5,X
; n -> 4,X
_SCISendN::
.dbline -1
ais #-2
tsx
.dbline 32
; }
; }
; /*SCISendN:串行发送N个字节-------------------------------------------------*
; *功 能:发送数组中的N个字节数据 *
; *参 数:待发送的数据字节数及其要存放的数组首地址 *
; *返 回:无 *
; *-------------------------------------------------------------------------*/
; void SCISendN(unsigned char n,unsigned char ch[])
; {
.dbline 34
; int i;
; for(i=0;i<n;i++)
clr 1,X
clr ,X
bra L11
L8:
.dbline 35
lda 1,X
add 6,X
sta *__r1
lda ,X
adc 5,X
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _SCISend1
ais #1
tsx
L9:
.dbline 34
lda 1,X
add #1
sta 1,X
lda ,X
adc #0
sta ,X
L11:
.dbline 34
clr *__r0
lda 4,X
sta *__r1
lda 1,X
sta *__r3
lda ,X
sta *__r2
ldhx *__r2
cphx *__r0
tsx
blt L8
.dbline -2
L7:
ais #2
.dbline 0 ; func end
rts
.dbsym l i 0 I
.dbsym l ch 5 pc
.dbsym l n 4 c
.dbend
.dbfunc e SCIRe1 _SCIRe1 fc
; i -> 0,X
; k -> 1,X
; p -> 5,X
_SCIRe1::
.dbline -1
ais #-3
tsx
.dbline 44
; SCISend1(ch[i]);
; }
; /*SCIRe1:串行收一个字节数据------------------------------------------------*
; *功 能:从串行口接收1个字节的数据 *
; *参 数:标志指针p *
; *返 回:接收到的数据(若接收失败,返回0xff) *
; *说 明:参数*p带回接收标志=0 收到数据,=1 未收到数据 *
; *-------------------------------------------------------------------------*/
; unsigned char SCIRe1(unsigned char *p)
; {
.dbline 48
; unsigned int k;
; unsigned char i;
; //ReStatusR第ReTestBit位为1表示可接收数据
; for(k=0;k<0xfbbb;k++)
clr 2,X
clr 1,X
bra L16
L13:
.dbline 49
; if ((ReSendStatusR & (1<<ReTestBit)) != 0)
brclr #5,0x16,L17
.dbline 50
; {
.dbline 51
; i=ReSendDataR;
lda 0x18
sta ,X
.dbline 52
; *p=0x00;
lda 6,X
sta *__r1
lda 5,X
sta *__r0
clra
ldhx *__r0
sta ,x
tsx
.dbline 53
; break;
bra L15
L17:
L14:
.dbline 48
lda 2,X
add #1
sta 2,X
lda 1,X
adc #0
sta 1,X
L16:
.dbline 48
lda 2,X
sta *__r1
lda 1,X
sta *__r0
ldhx *__r0
cphx #-1093
tsx
blo L13
L15:
.dbline 56
; }
; //接受失败
; if(k>=0xfbbb)
lda 2,X
sta *__r1
lda 1,X
sta *__r0
ldhx *__r0
cphx #-1093
tsx
blo L19
.dbline 57
; {
.dbline 58
; i=0xff;
lda #-1
sta ,X
.dbline 59
; *p=0x01;
lda 6,X
sta *__r1
lda 5,X
sta *__r0
lda #1
ldhx *__r0
sta ,x
tsx
.dbline 60
; }
L19:
.dbline 61
; return i;
lda ,X
.dbline -2
L12:
ais #3
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbsym l k 1 i
.dbsym l p 5 pc
.dbend
.dbfunc e SCIReN _SCIReN fc
; fp -> 0,X
; m -> 1,X
; ch -> 6,X
; n -> 5,X
_SCIReN::
.dbline -1
ais #-3
tsx
.dbline 69
; }
; /*SCIReN:HC08串行接收N个字节-----------------------------------------------*
; *功 能:接收N个字节数据,并存放在ch数组中 *
; *参 数:待接收的数据字节数及其存放的数组首地址 *
; *返 回:接收标志=0 收到数据,=1 未收到数据 *
; *-------------------------------------------------------------------------*/
; unsigned char SCIReN(unsigned char n,unsigned char ch[])
; {
.dbline 72
; int m;
; unsigned char fp;
; m=0;
clr 2,X
clr 1,X
bra L23
L22:
.dbline 74
; while (m<n)
; {
.dbline 75
; ch[m]=SCIRe1(&fp);
pshx
pshh
jsr _SCIRe1
ais #2
tsx
sta *__r1
lda 2,X
add 7,X
sta *__r3
lda 1,X
adc 6,X
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 76
; if (fp==1) return 1;
lda ,X
cmp #1
bne L25
.dbline 76
lda #1
bra L21
L25:
.dbline 77
lda 2,X
add #1
sta 2,X
lda 1,X
adc #0
sta 1,X
.dbline 78
L23:
.dbline 73
clr *__r0
lda 5,X
sta *__r1
lda 2,X
sta *__r3
lda 1,X
sta *__r2
ldhx *__r2
cphx *__r0
tsx
blt L22
.dbline 79
; m++;
; }
; return 0;
clra
.dbline -2
L21:
ais #3
.dbline 0 ; func end
rts
.dbsym l fp 0 c
.dbsym l m 1 I
.dbsym l ch 6 pc
.dbsym l n 5 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -