📄 sci.lis
字号:
.module SCI.c
.area text
; o -> 2,X
0000 _SCISend1::
0000 95 tsx
0001 2009 bra L3
0003 L2:
0003 ; /*-----------------------------------------------------*
0003 ; *文件描述:本文件包含了串行通信的4子程序,分别为: *
0003 ; *(1)SCISend1:串行发送1字节 *
0003 ; *(2)SCISendN:串行发送n字节 *
0003 ; *(3)SCIRe1:串行接收1字节 *
0003 ; *(4)SCIReN:串行接收n字节 *
0003 ; *-------------《嵌入式应用技术基础教程》--------------*/
0003 ; //[以下为子程序源代码]
0003 ; //[包含头文件]
0003 ; #include "SCI.h"
0003 ; /*SCISend1:串行发送1个字节-----------------------------*
0003 ; *功 能:串行发送1个字节 *
0003 ; *参 数:要发送的数据 *
0003 ; *返 回:无 *
0003 ; *-----------------------------------------------------*/
0003 ; void SCISend1(unsigned char o)
0003 ; {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
0003 ; while(1)
0003 ; if ((ReSendStatusR & (1<<SendTestBit)) != 0)
0003 0F1606 brclr #7,0x16,L5
0006 ; { ReSendDataR=o;
0006 E602 lda 2,X
0008 B718 sta 0x18
000A ; break;}
000A 2002 bra L4
000C L5:
000C L3:
000C 20F5 bra L2
000E L4:
000E L1:
000E .dbline 0 ; func end
000E 81 rts
000F ; i -> 0,X
000F ; ch -> 5,X
000F ; n -> 4,X
000F _SCISendN::
000F A7FE ais #-2
0011 95 tsx
0012 ; }
0012 ; /*SCISendN:串行发送N个字节-----------------------------*
0012 ; *功 能:发送数组中的N个字节数据 *
0012 ; *参 数:待发送的数据字节数及其要存放的数组首地址 *
0012 ; *返 回:无 *
0012 ; *-----------------------------------------------------*/
0012 ; void SCISendN(unsigned char n,unsigned char ch[])
0012 ; {int i;
0012 ; for(i=0;i<n;i++)
0012 6F01 clr 1,X
0014 7F clr ,X
0015 201F bra L11
0017 L8:
0017 E601 lda 1,X
0019 EB06 add 6,X
001B B700 sta *__r1
001D F6 lda ,X
001E E905 adc 5,X
0020 B700 sta *__r0
0022 5500 ldhx *__r0
0024 F6 lda ,x
0025 87 psha
0026 CD0000 jsr _SCISend1
0029 A701 ais #1
002B 95 tsx
002C L9:
002C E601 lda 1,X
002E AB01 add #1
0030 E701 sta 1,X
0032 F6 lda ,X
0033 A900 adc #0
0035 F7 sta ,X
0036 L11:
0036 3F00 clr *__r0
0038 E604 lda 4,X
003A B700 sta *__r1
003C E601 lda 1,X
003E B700 sta *__r3
0040 F6 lda ,X
0041 B700 sta *__r2
0043 5500 ldhx *__r2
0045 7500 cphx *__r0
0047 95 tsx
0048 91CD blt L8
004A L7:
004A A702 ais #2
004C .dbline 0 ; func end
004C 81 rts
004D ; i -> 0,X
004D ; k -> 1,X
004D ; p -> 5,X
004D _SCIRe1::
004D A7FD ais #-3
004F 95 tsx
0050 ; SCISend1(ch[i]);
0050 ; }
0050 ; /*SCIRe1:串行收一个字节数据----------------------------*
0050 ; *功 能:从串行口接收1个字节的数据 *
0050 ; *参 数:标志指针p *
0050 ; *返 回:接收到的数据(若接收失败,返回0xff) *
0050 ; *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 *
0050 ; *-----------------------------------------------------*/
0050 ; unsigned char SCIRe1(unsigned char *p)
0050 ; { unsigned int k;
0050 ; unsigned char i;
0050 ; //ReStatusR第ReTestBit位为1表示可接收数据
0050 ; for(k=0;k<0xfbbb;k++)
0050 6F02 clr 2,X
0052 6F01 clr 1,X
0054 2021 bra L16
0056 L13:
0056 ; if ((ReSendStatusR & (1<<ReTestBit)) != 0)
0056 0B1612 brclr #5,0x16,L17
0059 ; {i=ReSendDataR;
0059 B618 lda 0x18
005B F7 sta ,X
005C ; *p=0x00;
005C E606 lda 6,X
005E B700 sta *__r1
0060 E605 lda 5,X
0062 B700 sta *__r0
0064 4F clra
0065 5500 ldhx *__r0
0067 F7 sta ,x
0068 95 tsx
0069 ; break;}
0069 201C bra L15
006B L17:
006B L14:
006B E602 lda 2,X
006D AB01 add #1
006F E702 sta 2,X
0071 E601 lda 1,X
0073 A900 adc #0
0075 E701 sta 1,X
0077 L16:
0077 E602 lda 2,X
0079 B700 sta *__r1
007B E601 lda 1,X
007D B700 sta *__r0
007F 5500 ldhx *__r0
0081 65FBBB cphx #-1093
0084 95 tsx
0085 25CF blo L13
0087 L15:
0087 ; if(k>=0xfbbb)
0087 E602 lda 2,X
0089 B700 sta *__r1
008B E601 lda 1,X
008D B700 sta *__r0
008F 5500 ldhx *__r0
0091 65FBBB cphx #-1093
0094 95 tsx
0095 2511 blo L19
0097 ; {i=0xff;
0097 A6FF lda #-1
0099 F7 sta ,X
009A ; *p=0x01;}
009A E606 lda 6,X
009C B700 sta *__r1
009E E605 lda 5,X
00A0 B700 sta *__r0
00A2 A601 lda #1
00A4 5500 ldhx *__r0
00A6 F7 sta ,x
00A7 95 tsx
00A8 L19:
00A8 ; return i; //返回接收到的数据
00A8 F6 lda ,X
00A9 L12:
00A9 A703 ais #3
00AB .dbline 0 ; func end
00AB 81 rts
00AC ; fp -> 0,X
00AC ; m -> 1,X
00AC ; ch -> 6,X
00AC ; n -> 5,X
00AC _SCIReN::
00AC A7FD ais #-3
00AE 95 tsx
00AF ; }
00AF ; /*SCIReN:HC08串行接收N个字节---------------------------*
00AF ; *功 能:接收N个字节数据,并存放在ch数组中 *
00AF ; *参 数:待接收的数据字节数及其存放的数组首地址 *
00AF ; *返 回:接收标志=0收到数据,=1未收到数据 *
00AF ; *-----------------------------------------------------*/
00AF ; unsigned char SCIReN(unsigned char n,unsigned char ch[])
00AF ; {int m;
00AF ; unsigned char fp;
00AF ; m=0;
00AF 6F02 clr 2,X
00B1 6F01 clr 1,X
00B3 2031 bra L23
00B5 L22:
00B5 ; while (m<n)
00B5 ; {
00B5 ; ch[m]=SCIRe1(&fp);
00B5 89 pshx
00B6 8B pshh
00B7 CD004D jsr _SCIRe1
00BA A702 ais #2
00BC 95 tsx
00BD B700 sta *__r1
00BF E602 lda 2,X
00C1 EB07 add 7,X
00C3 B700 sta *__r3
00C5 E601 lda 1,X
00C7 E906 adc 6,X
00C9 B700 sta *__r2
00CB B600 lda *__r1
00CD 5500 ldhx *__r2
00CF F7 sta ,x
00D0 95 tsx
00D1 ; if (fp==1) return 1;
00D1 F6 lda ,X
00D2 A101 cmp #1
00D4 2604 bne L25
00D6 A601 lda #1
00D8 2022 bra L21
00DA L25:
00DA E602 lda 2,X
00DC AB01 add #1
00DE E702 sta 2,X
00E0 E601 lda 1,X
00E2 A900 adc #0
00E4 E701 sta 1,X
00E6 L23:
00E6 3F00 clr *__r0
00E8 E605 lda 5,X
00EA B700 sta *__r1
00EC E602 lda 2,X
00EE B700 sta *__r3
00F0 E601 lda 1,X
00F2 B700 sta *__r2
00F4 5500 ldhx *__r2
00F6 7500 cphx *__r0
00F8 95 tsx
00F9 91BA blt L22
00FB ; m++;
00FB ; }
00FB ; return 0;
00FB 4F clra
00FC L21:
00FC A703 ais #3
00FE .dbline 0 ; func end
00FE 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -