⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 assist~1.lst

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -