📄 sci.lis
字号:
.module SCI.C
.area text
0000 .dbfile SCI.C
0000 .dbfunc e SCIInit _SCIInit fV
0000 _SCIInit::
0000 .dbline -1
0000 .dbline 20
0000 ; /*-----------------------------------------------------*
0000 ; *文件描述:本文件包含了串行通信的4子程序,分别为: *
0000 ; *(1)SCIInit:SCI初始化
0000 ; *(2)SCISend1:串行发送1字节 *
0000 ; *(3)SCISendN:串行发送n字节 *
0000 ; *(4)SCIRe1:串行接收1字节 *
0000 ; *(5)SCIReN:串行接收n字节 *
0000 ; *-------------《嵌入式应用技术基础教程》--------------*/
0000 ; //[以下为子程序源代码]
0000 ; //[包含头文件]
0000 ; #include "Includes.h"
0000 ; /*SCIInit:串行口初始化子程序---------------------------*
0000 ; *功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位 *
0000 ; * 数据,无校验等,允许发送器允许接收器.查询方式收发,*
0000 ; * 波特率为9600(设fBUS=2.4576MHz) *
0000 ; *参 数:无 *
0000 ; *返 回:无 *
0000 ; *-----------------------------------------------------*/
0000 ; void SCIInit(void)
0000 ; {
0000 .dbline 22
0000 ; //总线频率fBUS=2.4576MHz,定义波特率Bt=9600
0000 ; SCBR=0b00000010;
0000 A602 lda #2
0002 B719 sta 0x19
0004 .dbline 24
0004 ; //设置允许SCI,正常码输出、8位数据、无校验
0004 ; SCC1=0b01000000;
0004 A640 lda #64
0006 B713 sta 0x13
0008 .dbline 26
0008 ; //设置允许发送、允许接收,查询方式收发
0008 ; SCC2=0b00001100;
0008 A60C lda #12
000A B714 sta 0x14
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 81 rts
000D .dbend
000D .dbfunc e SCISend1 _SCISend1 fV
000D ; i -> 0,X
000D ; j -> 1,X
000D ; o -> 4,X
000D _SCISend1::
000D .dbline -1
000D A7FE ais #-2
000F 95 tsx
0010 .dbline 34
0010 ; }
0010 ; /*SCISend1:串行发送1个字节-----------------------------*
0010 ; *功 能:串行发送1个字节 *
0010 ; *参 数:要发送的数据 *
0010 ; *返 回:无 *
0010 ; *-----------------------------------------------------*/
0010 ; void SCISend1(INT8U o)
0010 ; {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
0010 201E bra L4
0012 L3:
0012 .dbline 37
0012 ; INT8U i,j;
0012 ; while(1)
0012 ; if ((ReSendStatusR & (1<<SendTestBit)) != 0)
0012 0F161B brclr #7,0x16,L6
0015 .dbline 38
0015 ; { ReSendDataR=o;
0015 .dbline 38
0015 E604 lda 4,X
0017 B718 sta 0x18
0019 .dbline 39
0019 ; for(i=0;i<100;i++)
0019 7F clr ,X
001A 200D bra L11
001C L8:
001C .dbline 40
001C 6F01 clr 1,X
001E 2002 bra L15
0020 L12:
0020 .dbline 40
0020 L13:
0020 .dbline 40
0020 6C01 inc 1,X
0022 L15:
0022 .dbline 40
0022 E601 lda 1,X
0024 A132 cmp #50
0026 25F8 blo L12
0028 L9:
0028 .dbline 39
0028 7C inc ,X
0029 L11:
0029 .dbline 39
0029 F6 lda ,X
002A A164 cmp #100
002C 25EE blo L8
002E .dbline 41
002E ; for(j=0;j<50;j++);
002E ; break;}
002E 2002 bra L5
0030 L6:
0030 L4:
0030 .dbline 36
0030 20E0 bra L3
0032 L5:
0032 .dbline -2
0032 L2:
0032 A702 ais #2
0034 .dbline 0 ; func end
0034 81 rts
0035 .dbsym l i 0 c
0035 .dbsym l j 1 c
0035 .dbsym l o 4 c
0035 .dbend
0035 .dbfunc e SCISendN _SCISendN fV
0035 ; i -> 0,X
0035 ; ch -> 5,X
0035 ; n -> 4,X
0035 _SCISendN::
0035 .dbline -1
0035 A7FE ais #-2
0037 95 tsx
0038 .dbline 49
0038 ; }
0038 ; /*SCISendN:串行发送N个字节-----------------------------*
0038 ; *功 能:发送数组中的N个字节数据 *
0038 ; *参 数:待发送的数据字节数及其要存放的数组首地址 *
0038 ; *返 回:无 *
0038 ; *-----------------------------------------------------*/
0038 ; void SCISendN(INT8U n,INT8U ch[])
0038 ; {INT16U i;
0038 .dbline 50
0038 ; for(i=0;i<n;i++)
0038 6F01 clr 1,X
003A 7F clr ,X
003B 201F bra L20
003D L17:
003D .dbline 51
003D E601 lda 1,X
003F EB06 add 6,X
0041 B700 sta *__r1
0043 F6 lda ,X
0044 E905 adc 5,X
0046 B700 sta *__r0
0048 5500 ldhx *__r0
004A F6 lda ,x
004B 87 psha
004C CD000D jsr _SCISend1
004F A701 ais #1
0051 95 tsx
0052 L18:
0052 .dbline 50
0052 E601 lda 1,X
0054 AB01 add #1
0056 E701 sta 1,X
0058 F6 lda ,X
0059 A900 adc #0
005B F7 sta ,X
005C L20:
005C .dbline 50
005C 3F00 clr *__r0
005E E604 lda 4,X
0060 B700 sta *__r1
0062 E601 lda 1,X
0064 B700 sta *__r3
0066 F6 lda ,X
0067 B700 sta *__r2
0069 5500 ldhx *__r2
006B 7500 cphx *__r0
006D 95 tsx
006E 25CD blo L17
0070 .dbline -2
0070 L16:
0070 A702 ais #2
0072 .dbline 0 ; func end
0072 81 rts
0073 .dbsym l i 0 s
0073 .dbsym l ch 5 pc
0073 .dbsym l n 4 c
0073 .dbend
0073 .dbfunc e SCIRe1 _SCIRe1 fc
0073 ; i -> 0,X
0073 ; k -> 1,X
0073 ; p -> 5,X
0073 _SCIRe1::
0073 .dbline -1
0073 A7FD ais #-3
0075 95 tsx
0076 .dbline 60
0076 ; SCISend1(ch[i]);
0076 ; }
0076 ; /*SCIRe1:串行收一个字节数据----------------------------*
0076 ; *功 能:从串行口接收1个字节的数据 *
0076 ; *参 数:标志指针p *
0076 ; *返 回:接收到的数据(若接收失败,返回0xff) *
0076 ; *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 *
0076 ; *-----------------------------------------------------*/
0076 ; INT8U SCIRe1(INT8U *p)
0076 ; { INT16U k;
0076 .dbline 63
0076 ; INT8U i;
0076 ; //ReStatusR第ReTestBit位为1表示可接收数据
0076 ; for(k=0;k<0xfbbb;k++)
0076 6F02 clr 2,X
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -