📄 assist~1.lst
字号:
8541 81 rts
FILE: SCI.C
(0001) /*-----------------------------------------------------*
(0002) *文件描述:本文件包含了串行通信的4子程序,分别为: *
(0003) *(1)SCIInit:SCI初始化
(0004) *(2)SCISend1:串行发送1字节 *
(0005) *(3)SCISendN:串行发送n字节 *
(0006) *(4)SCIRe1:串行接收1字节 *
(0007) *(5)SCIReN:串行接收n字节 *
(0008) *-------------《嵌入式应用技术基础教程》--------------*/
(0009) //[以下为子程序源代码]
(0010) //[包含头文件]
(0011) #include "Includes.h"
(0012) /*SCIInit:串行口初始化子程序---------------------------*
(0013) *功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位 *
(0014) * 数据,无校验等,允许发送器允许接收器.查询方式收发,*
(0015) * 波特率为9600(设fBUS=2.4576MHz) *
(0016) *参 数:无 *
(0017) *返 回:无 *
(0018) *-----------------------------------------------------*/
(0019) void SCIInit(void)
(0020) {
_SCIInit:
8542 A6 02 ldA #2
8544 B7 19 stA 0x19
(0021) //总线频率fBUS=2.4576MHz,定义波特率Bt=9600
(0022) SCBR=0b00000010;
(0023) //设置允许SCI,正常码输出、8位数据、无校验
(0024) SCC1=0b01000000;
8546 A6 40 ldA #64
8548 B7 13 stA 0x13
(0025) //设置允许发送、允许接收,查询方式收发
(0026) SCC2=0b00001100;
854A A6 0C ldA #12
854C B7 14 stA 0x14
854E 81 rts
_SCISend1:
i --> X+0
j --> X+1
o --> X+4
854F A7 FE aiS #-2
8551 95 tSX
(0027) }
(0028) /*SCISend1:串行发送1个字节-----------------------------*
(0029) *功 能:串行发送1个字节 *
(0030) *参 数:要发送的数据 *
(0031) *返 回:无 *
(0032) *-----------------------------------------------------*/
(0033) void SCISend1(INT8U o)
(0034) {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
8552 20 1E bra 0x8572
(0035) INT8U i,j;
(0036) while(1)
(0037) if ((ReSendStatusR & (1<<SendTestBit)) != 0)
8554 0F 161B BRclr 7,0x16,0x8572
(0038) { ReSendDataR=o;
8557 E6 04 ldA 4,X
8559 B7 18 stA 0x18
(0039) for(i=0;i<100;i++)
855B 7F clr 0,X
855C 20 0D bra 0x856B
(0040) for(j=0;j<50;j++);
855E 6F 01 clr 1,X
8560 20 02 bra 0x8564
8562 6C 01 inc 1,X
8564 E6 01 ldA 1,X
8566 A1 32 cmp #50
8568 25 F8 bcs 0x8562
856A 7C inc 0,X
856B F6 ldA 0,X
856C A1 64 cmp #100
856E 25 EE bcs 0x855E
(0041) break;}
8570 20 02 bra 0x8574
8572 20 E0 bra 0x8554
8574 A7 02 aiS #2
8576 81 rts
_SCISendN:
i --> X+0
ch --> X+5
n --> X+4
8577 A7 FE aiS #-2
8579 95 tSX
(0042) }
(0043) /*SCISendN:串行发送N个字节-----------------------------*
(0044) *功 能:发送数组中的N个字节数据 *
(0045) *参 数:待发送的数据字节数及其要存放的数组首地址 *
(0046) *返 回:无 *
(0047) *-----------------------------------------------------*/
(0048) void SCISendN(INT8U n,INT8U ch[])
(0049) {INT16U i;
857A 6F 01 clr 1,X
857C 7F clr 0,X
857D 20 1F bra 0x859E
(0050) for(i=0;i<n;i++)
(0051) SCISend1(ch[i]);
857F E6 01 ldA 1,X
8581 EB 06 add 6,X
8583 B7 41 stA *__r1
8585 F6 ldA 0,X
8586 E9 05 adc 5,X
8588 B7 40 stA *__r0
858A 55 40 ldHX *__r0
858C F6 ldA 0,X
858D 87 pshA
858E CD 854F jsr _SCISend1
8591 A7 01 aiS #1
8593 95 tSX
8594 E6 01 ldA 1,X
8596 AB 01 add #1
8598 E7 01 stA 1,X
859A F6 ldA 0,X
859B A9 00 adc #0
859D F7 stA 0,X
859E 3F 40 clr *__r0
85A0 E6 04 ldA 4,X
85A2 B7 41 stA *__r1
85A4 E6 01 ldA 1,X
85A6 B7 43 stA *__r3
85A8 F6 ldA 0,X
85A9 B7 42 stA *__r2
85AB 55 42 ldHX *__r2
85AD 75 40 cpHX *__r0
85AF 95 tSX
85B0 25 CD bcs 0x857F
85B2 A7 02 aiS #2
85B4 81 rts
_SCIRe1:
i --> X+0
k --> X+1
p --> X+5
85B5 A7 FD aiS #-3
85B7 95 tSX
(0052) }
(0053) /*SCIRe1:串行收一个字节数据----------------------------*
(0054) *功 能:从串行口接收1个字节的数据 *
(0055) *参 数:标志指针p *
(0056) *返 回:接收到的数据(若接收失败,返回0xff) *
(0057) *说 明:参数*p带回接收标志=0收到数据,=1未收到数据 *
(0058) *-----------------------------------------------------*/
(0059) INT8U SCIRe1(INT8U *p)
(0060) { INT16U k;
85B8 6F 02 clr 2,X
85BA 6F 01 clr 1,X
85BC 20 21 bra 0x85DF
(0061) INT8U i;
(0062) //ReStatusR第ReTestBit位为1表示可接收数据
(0063) for(k=0;k<0xfbbb;k++)
(0064) if ((ReSendStatusR & (1<<ReTestBit)) != 0)
85BE 0B 1612 BRclr 5,0x16,0x85D3
(0065) {i=ReSendDataR;
85C1 B6 18 ldA 0x18
85C3 F7 stA 0,X
(0066) *p=0x00;
85C4 E6 06 ldA 6,X
85C6 B7 41 stA *__r1
85C8 E6 05 ldA 5,X
85CA B7 40 stA *__r0
85CC 4F clrA
85CD 55 40 ldHX *__r0
85CF F7 stA 0,X
85D0 95 tSX
(0067) break;}
85D1 20 1C bra 0x85EF
85D3 E6 02 ldA 2,X
85D5 AB 01 add #1
85D7 E7 02 stA 2,X
85D9 E6 01 ldA 1,X
85DB A9 00 adc #0
85DD E7 01 stA 1,X
85DF E6 02 ldA 2,X
85E1 B7 41 stA *__r1
85E3 E6 01 ldA 1,X
85E5 B7 40 stA *__r0
85E7 55 40 ldHX *__r0
85E9 65 FBBB cpHX #0xFBBB
85EC 95 tSX
85ED 25 CF bcs 0x85BE
(0068) if(k>=0xfbbb)
85EF E6 02 ldA 2,X
85F1 B7 41 stA *__r1
85F3 E6 01 ldA 1,X
85F5 B7 40 stA *__r0
85F7 55 40 ldHX *__r0
85F9 65 FBBB cpHX #0xFBBB
85FC 95 tSX
85FD 25 11 bcs 0x8610
(0069) {i=0xff;
85FF A6 FF ldA #-1
8601 F7 stA 0,X
(0070) *p=0x01;}
8602 E6 06 ldA 6,X
8604 B7 41 stA *__r1
8606 E6 05 ldA 5,X
8608 B7 40 stA *__r0
860A A6 01 ldA #1
860C 55 40 ldHX *__r0
860E F7 stA 0,X
860F 95 tSX
(0071) return i; //返回接收到的数据
8610 F6 ldA 0,X
8611 A7 03 aiS #3
8613 81 rts
_SCIReN:
fp --> X+0
m --> X+1
ch --> X+6
n --> X+5
8614 A7 FD aiS #-3
8616 95 tSX
(0072) }
(0073) /*SCIReN:HC08串行接收N个字节---------------------------*
(0074) *功 能:接收N个字节数据,并存放在ch数组中 *
(0075) *参 数:待接收的数据字节数及其存放的数组首地址 *
(0076) *返 回:接收标志=0收到数据,=1未收到数据 *
(0077) *-----------------------------------------------------*/
(0078) INT8U SCIReN(INT8U n,INT8U ch[])
(0079) { INT16U m;
8617 6F 02 clr 2,X
8619 6F 01 clr 1,X
861B 20 31 bra 0x864E
(0080) INT8U fp;
(0081) m=0;
(0082) while (m<n)
(0083) {
861D 89 pshX
861E 8B pshH
861F CD 85B5 jsr _SCIRe1
8622 A7 02 aiS #2
8624 95 tSX
8625 B7 41 stA *__r1
8627 E6 02 ldA 2,X
8629 EB 07 add 7,X
862B B7 43 stA *__r3
862D E6 01 ldA 1,X
862F E9 06 adc 6,X
8631 B7 42 stA *__r2
8633 B6 41 ldA *__r1
8635 55 42 ldHX *__r2
8637 F7 stA 0,X
8638 95 tSX
(0084) ch[m]=SCIRe1(&fp);
(0085) if (fp==1) return 1;
8639 F6 ldA 0,X
863A A1 01 cmp #1
863C 26 04 bne 0x8642
863E A6 01 ldA #1
8640 20 22 bra 0x8664
(0086) m++;
8642 E6 02 ldA 2,X
8644 AB 01 add #1
8646 E7 02 stA 2,X
8648 E6 01 ldA 1,X
864A A9 00 adc #0
864C E7 01 stA 1,X
(0087) }
864E 3F 40 clr *__r0
8650 E6 05 ldA 5,X
8652 B7 41 stA *__r1
8654 E6 02 ldA 2,X
8656 B7 43 stA *__r3
8658 E6 01 ldA 1,X
865A B7 42 stA *__r2
865C 55 42 ldHX *__r2
865E 75 40 cpHX *__r0
8660 95 tSX
8661 25 BA bcs 0x861D
(0088) return 0;
8663 4F clrA
8664 A7 03 aiS #3
8666 81 rts
(0089) }
(0090) /*RS485Init:RS485初始化子程序--------------------------*
(0091) *功 能:对RS485进行初始化,默认为允许SCI,正常码输出,8位 *
(0092) * 数据,无校验等,允许发送器允许接收器.查询方式收发,*
(0093) * 波特率为2400(设fBUS=2.4576MHz) *
(0094) *参 数:无 *
(0095) *返 回:无 *
(0096) *-----------------------------------------------------*/
(0097) void RS485Init(void)
(0098) {
_RS485Init:
8667 A6 22 ldA #34
8669 B7 19 stA 0x19
(0099) //总线频率fBUS=2.4576MHz,定义波特率Bt=2400
(0100) SCBR=0b00100010;
(0101) //设置允许SCI,正常码输出、8位数据、无校验
(0102) SCC1=0b01000000;
866B A6 40 ldA #64
866D B7 13 stA 0x13
(0103) //设置允许发送、允许接收,查询方式收发
(0104) SCC2=0b00001100;
866F A6 0C ldA #12
8671 B7 14 stA 0x14
8673 81 rts
FILE: DAC.c
(0001) /*-------------------------------------------------------*
(0002) *(1)TLV5608Init:TLV5608初始化
(0003) *(2)TLV5608Z:1路DA转换子程序 *
(0004) *(3)DAC:2片TLV5608转换 *
(0005) *-------------------------------------------------------*/
(0006) //[包含头文件]
(0007) #include "Includes.h"
(0008) //[包含外部函数]
(0009) void Delay(void);
(0010) /*SPIInit:SPI初始化子程序-------------------------------*
(0011) *功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟 *
(0012) * 空闲低电平,比特率2分频, *
(0013) * 波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz)*
(0014) *参 数:无 *
(0015) *返 回:无 *
(0016) *------------------------------------------------------*/
(0017) #include "Includes.h"
(0018) void DA_SPIInit(void)
(0019) {
_DA_SPIInit:
8674 A6 22 ldA #34
8676 B7 10 stA 0x10
(0020) SPCR=0b00100010; //不产生中断、主机方式、时钟空闲低电平
(0021) SPSCR=0b00000000; //2分频
8678 3F 11 clr 0x11
867A 81 rts
_DAC:
i --> X+0
value --> X+3
867B A7 FF aiS #-1
867D 95 tSX
(0022) }
(0023) /*D/A转换子程序(DAC.c)-----------------------------------*
(0024) *功能:将TLV5608(0)-(1)片,共16通道的数字量转换为模拟量 *
(0025) *入口:value--2片5608、16路通道的数字量值 *
(0026) *调用:TLV5608Z *
(0027) *-------------------------------------------------------*/
(0028) void DAC(INT16U *value)
(0029) {
867E CD 86C4 jsr _TLV5608Init
8681 95 tSX
(0030) INT8U i;
(0031) //TLV5608初始化
(0032) TLV5608Init();
(0033) for(i=1;i<=16;i++)
8682 A6 01 ldA #1
8684 F7 stA 0,X
8685 20 35 bra 0x86BC
(0034) TLV5608Z(i,*(value+i-1));
8687 3F 40 clr *__r0
8689 F6 ldA 0,X
868A B7 41 stA *__r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -