📄 sci_po~1.lst
字号:
813A 95 tSX
813B 91 BA blt 0x80F7
(0101) return 0;
813D 4F clrA
813E A7 03 aiS #3
8140 81 rts
_main:
ADValue --> X+0
Temp --> X+22
i --> X+23
8141 A7 E8 aiS #-24
8143 95 tSX
FILE: Main.c
(0001) //-------------------------------------------------------------------------*
(0002) //工程文件名:TLC2543.prj *
(0003) //硬件连接: *
(0004) // TLC2543的CS,I/O CLOCK,DATA INPUT,DATA OUT分别接PTC0,PTD1~PTD3 *
(0005) //程序描述:由TLC2543采集11路AD值 *
(0006) //日 期:2007.04.18 *
(0007) //-------------------------------------------------------------------------*
(0008) #include "Includes.h" //总头文件
(0009)
(0010) //主函数
(0011) void main()
(0012) {
8144 CD 818B jsr _MCUInit
(0013) INT16U ADValue[11];
(0014) INT8U Temp[1];
(0015) INT8U i;
(0016) MCUInit();
(0017) SPIInit();
8147 CD 81B0 jsr _SPIInit
(0018) SCIInit(); //调串行口初始化子程序
814A CD 8035 jsr _SCIInit
814D 95 tSX
814E 20 36 bra 0x8186
(0019) while(1)
(0020) {
8150 AF 16 aiX #22
8152 89 pshX
8153 8B pshH
8154 A6 01 ldA #1
8156 87 pshA
8157 CD 80EE jsr _SCIReN
815A A7 03 aiS #3
815C 95 tSX
815D B7 41 stA *__r1
815F E7 17 stA 23,X
(0021) i=SCIReN(1,Temp);
(0022) if(i==0)
8161 26 23 bne 0x8186
(0023) {
8163 E6 16 ldA 22,X
8165 A1 AA cmp #-86
8167 26 1D bne 0x8186
(0024) if(Temp[0]==0xAA)
(0025) {
8169 89 pshX
816A 8B pshH
816B 4F clrA
816C 87 pshA
816D CD 81B9 jsr _ADC11P
8170 A7 03 aiS #3
8172 95 tSX
(0026) ADC11P(0,ADValue);
(0027) SCISendN(22,(INT8U*)ADValue);
8173 89 pshX
8174 8B pshH
8175 A6 16 ldA #22
8177 87 pshA
8178 CD 8051 jsr _SCISendN
817B A7 03 aiS #3
(0028) SCISend1(0xAA);
817D A6 AA ldA #-86
817F 87 pshA
8180 CD 8042 jsr _SCISend1
8183 A7 01 aiS #1
8185 95 tSX
(0029) }
8186 20 C8 bra 0x8150
8188 A7 18 aiS #24
818A 81 rts
FILE: SetUp.c
(0001) //_HC08Setup:芯片初始化----------------------------------------------------*
(0002) //功能:系统初始化设置 *
(0003) // (1)由外部晶振f,通过本程序设置内部总线频率fbus *
(0004) // (2) 确定是否禁止看门狗(COP) *
(0005) //参数:无 *
(0006) //返回:无 *
(0007) //说明:该程序与芯片具体型号有关. *
(0008) // (1)外部晶振f=32.768kHz,使用内部PLL(锁相环),产生内部总线时钟频率 *
(0009) // fbus=2.4576MHz. *
(0010) // (2)禁止COP模块 *
(0011) //-------------------------------------------------------------------------*
(0012)
(0013) #include "GP32C.h" //映像寄存器名定义
(0014)
(0015) void MCUInit(void)
(0016) {
_MCUInit:
818B A6 01 ldA #1
818D B7 1E stA 0x1E
(0017) //1.设置CONFIG2、CONFIG1
(0018) //1.1 设置CONFIG2
(0019) CONFIG2=0b00000001;
(0020) // ||_SCIBDSRC=1内部总线时钟用作SCI时钟
(0021) // |__OSCSTOPENB=0 在stop模式下禁止振荡器工作
(0022)
(0023) //1.2 设置CONFIG1
(0024) CONFIG1=0b00111101;
818F A6 3D ldA #61
8191 B7 1F stA 0x1F
(0025) //||||||||_COPD=1 禁止COP模块
(0026) //|||||||__STOP=0 禁止STOP指令
(0027) //||||||___SSREC=1 32个CGMXCLK周期退出STOP模式
(0028) //|||||____LVI5OR3=1 LVI工作在5V
(0029) //||||_____LVIPWRD=1 禁止LVI模块电源
(0030) //|||______LVIRSTD=1 允许LVI复位信号
(0031) //||_______LVISTOP=0 在stop模式下禁止LVI
(0032) //|________COPRS=0 COP溢出范围使用长的时间
(0033)
(0034) //2. PLL编程
(0035) PCTL=0x00; //①禁止PLL:清零PLL控制寄存器PCTL
8193 3F 36 clr 0x36
(0036) PCTL=0x01; //②将P、E写入PTCL,置VCO的参考频率为2
8195 A6 01 ldA #1
8197 B7 36 stA 0x36
(0037) PMSH=0x01; //③将N写入PMSH、PMSL,置VCO的倍频因子为$12C
8199 A6 01 ldA #1
819B B7 38 stA 0x38
(0038) PMSL=0x2C;
819D A6 2C ldA #44
819F B7 39 stA 0x39
(0039) PMRS=0b10000000; //④将L写入PMRS,置VCO的输出频率范围系数为$80
81A1 A6 80 ldA #-128
81A3 B7 3A stA 0x3A
(0040) PRDS=0x01; //⑤将R写入PRDS
81A5 A6 01 ldA #1
81A7 B7 3B stA 0x3B
(0041) PCTL|=(1<<5); //⑥置PCTL.PLLON=1,启动PLL电路
81A9 1A 36 Bset 5,0x36
(0042) PBWC|=(1<<7); //⑦PBWC自动带宽控制位=1,选择自动控制方式
81AB 1E 37 Bset 7,0x37
(0043) PCTL|=(1<<4); //⑧PCTL.BCS=1,选择PLL电路为时钟源
81AD 18 36 Bset 4,0x36
81AF 81 rts
FILE: SPIInit.c
(0001) //SPIInit:SPI初始化子程序--------------------------------------------------*
(0002) //功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟 *
(0003) // 空闲低电平,比特率8分频, *
(0004) // 波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz) *
(0005) //参 数:无 *
(0006) //返 回:无 *
(0007) //-------------------------------------------------------------------------*
(0008) #include "GP32C.h"
(0009) void SPIInit(void)
(0010) {
_SPIInit:
81B0 A6 22 ldA #34
81B2 B7 10 stA 0x10
(0011) SPCR=0b00100010; //不产生中断、主机方式、时钟空闲低电平
(0012) SPSCR=0b00000001; //8分频
81B4 A6 01 ldA #1
81B6 B7 11 stA 0x11
81B8 81 rts
_ADC11P:
i --> X+0
j --> X+1
temp --> X+2
buff --> X+4
flag --> X+6
channel --> X+7
ADValue --> X+11
cs --> X+10
81B9 A7 F8 aiS #-8
81BB 95 tSX
FILE: ADC11P.c
(0001) //-------------------------------------------------------------------------*
(0002) //文件描述:本文件包含了AD采集的2子程序,分别为: *
(0003) //(1)ADC11P:1片2543-11路AD采集 *
(0004) //(2)TLC2543:TLC2543芯片A/D转换子程序 *
(0005) //-------------------------------------------------------------------------*
(0006) #include "ADC11P.h"
(0007)
(0008) //A/D转换并求平均值(11路)子程序(AD22P.ASM)---------------------------------*
(0009) //功 能:采集TLC2543,共11通道,取16次平均值放入内存ADValue *
(0010) //参 数:cs:片选,cs=0~7对应PTC0~7 *
(0011) // ADValue:存放11路AD转换结果的数组首地址 *
(0012) //返 回:内存ADValue开始连续的11个地址内即为转换的结果 *
(0013) //调 用:TLC2543 *
(0014) //-------------------------------------------------------------------------*
(0015) void ADC11P(INT8U cs,INT16U *ADValue)
(0016) {
81BC 6F 06 clr 6,X
81BE 20 20 bra 0x81E0
(0017) INT8U i,j,channel,flag,buff[2];
(0018) INT16U temp;
(0019)
(0020) //1 将A/D数据存放区清0
(0021) for(flag=0;flag<=10;flag++)
(0022) ADValue[flag]=0;
81C0 3F 40 clr *__r0
81C2 E6 06 ldA 6,X
81C4 B7 41 stA *__r1
81C6 38 41 lsl *__r1
81C8 39 40 rol *__r0
81CA B6 41 ldA *__r1
81CC EB 0C add 12,X
81CE B7 41 stA *__r1
81D0 B6 40 ldA *__r0
81D2 E9 0B adc 11,X
81D4 B7 40 stA *__r0
81D6 4F clrA
81D7 55 40 ldHX *__r0
81D9 F7 stA 0,X
81DA 4F clrA
81DB E7 01 stA 1,X
81DD 95 tSX
81DE 6C 06 inc 6,X
81E0 E6 06 ldA 6,X
81E2 A1 0A cmp #10
81E4 23 DA bls 0x81C0
(0023)
(0024)
(0025) //3 对11个通道采集数据,每一路采集16次,16次的数据总和-->ADValue
(0026) for(j=1;j<=16;j++)
81E6 A6 01 ldA #1
81E8 E7 01 stA 1,X
81EA CC 8273 jmp 0x8273
(0027) {
81ED 6F 06 clr 6,X
(0028) flag=0;
(0029) //3.1第0片TLC2543的0~10通道转换
(0030) for(channel=0;channel<=10;channel++)
81EF 6F 07 clr 7,X
81F1 20 78 bra 0x826B
(0031) {
81F3 AF 04 aiX #4
81F5 89 pshX
81F6 8B pshH
81F7 95 tSX
81F8 AF 02 aiX #2
81FA 3F 40 clr *__r0
81FC E6 07 ldA 7,X
81FE 87 pshA
81FF B6 40 ldA *__r0
8201 87 pshA
8202 3F 40 clr *__r0
8204 E6 0A ldA 10,X
8206 87 pshA
8207 B6 40 ldA *__r0
8209 87 pshA
820A CD 82BC jsr _TLC2543
820D A7 06 aiS #6
820F 95 tSX
(0032) //3.1.1将通道j的AD转换结果存入内存buff
(0033) TLC2543(cs,channel,buff); //得到"空数据"--不要
(0034) TLC2543(cs,channel,buff);
8210 AF 04 aiX #4
8212 89 pshX
8213 8B pshH
8214 95 tSX
8215 AF 02 aiX #2
8217 3F 40 clr *__r0
8219 E6 07 ldA 7,X
821B 87 pshA
821C B6 40 ldA *__r0
821E 87 pshA
821F 3F 40 clr *__r0
8221 E6 0A ldA 10,X
8223 87 pshA
8224 B6 40 ldA *__r0
8226 87 pshA
8227 CD 82BC jsr _TLC2543
822A A7 06 aiS #6
822C 95 tSX
(0035) //3.1.2从内存buff取出数据-->ADValue[flag]中
(0036) temp=*((unsigned int *)buff);
822D E6 04 ldA 4,X
822F E7 02 stA 2,X
8231 E6 05 ldA 5,X
8233 E7 03 stA 3,X
(0037) ADValue[flag]=ADValue[flag]+temp;
8235 3F 40 clr *__r0
8237 E6 06 ldA 6,X
8239 B7 41 stA *__r1
823B 38 41 lsl *__r1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -