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

📄 sci_po~1.lst

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    8000 45 0240      ldHX	#0x0240
    8003 94           tXS	
    8004 CD 83E2      jsr	__HC08Setup
    8007 45 0045      ldHX	#0x0045
    800A 65 0045      cpHX	#0x0045
    800D 27 06        beq	0x8015
    800F 6F 00        clr	0,X
    8011 AF 01        aiX	#1
    8013 20 F5        bra	0x800A
    8015 45 0046      ldHX	#0x0046
    8018 94           tXS	
    8019 45 8000      ldHX	#0x8000
    801C 65 8000      cpHX	#0x8000
    801F 27 0B        beq	0x802C
    8021 E6 00        ldA	0,X
    8023 9EE7 00      stA	0,S
    8026 AF 01        aiX	#1
    8028 A7 01        aiS	#1
    802A 20 F0        bra	0x801C
    802C 45 0240      ldHX	#0x0240
    802F 94           tXS	
    8030 CD 8141      jsr	_main
_exit:
    8033 20 FE        bra	0x8033
FILE: H08SCI.c
(0001) //[H08SCI.c]串行通信-------------------------------------------------------*
(0002) //本文件包含:                                                              *  
(0003) //(1)SCIInit:串行口初始化                                                  *
(0004) //(2)SCISend1:串行发送1个字节                                              *
(0005) //(3)SCISendN:串行发送n字节                                                *
(0006) //(4)SCIRe1:串行接收1字节                                                  *
(0007) //(5)SCIReN:串行接收n字节                                                  *
(0008) //硬件连接:                                                                *
(0009) //    MCU的SCI模块接口与PC方的COM1相连                                     *
(0010) //-------------------------------------------------------------------------*
(0011) 
(0012) //头文件
(0013) #include "H08SCI.h"
(0014) 
(0015) //SCIInit:串行口初始化-----------------------------------------------------*
(0016) //功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数据,无校验,        *
(0017) //      允许发送器,允许接收器.查询方式收发,波特率为9600(设fBUS=2.4576MHz) *                                       
(0018) //参 数:无                                                                 *
(0019) //返 回:无                                                                 *
(0020) //-------------------------------------------------------------------------*
(0021) void SCIInit(void)
(0022) {   //1.总线频率fBUS=2.4576MHz,定义波特率Bt=9600
_SCIInit:
    8035 A6 02        ldA	#2
    8037 B7 19        stA	0x19
(0023)     SCBR=0b00000010;
(0024)     //2.设置允许SCI,正常码输出、8位数据、无校验
(0025)     SCC1=0b01000000; 
    8039 A6 40        ldA	#64
    803B B7 13        stA	0x13
(0026)     //3.设置允许发送、允许接收,查询方式收发     
(0027)     SCC2=0b00001100; 
    803D A6 0C        ldA	#12
    803F B7 14        stA	0x14
    8041 81           rts	
_SCISend1:
  o                    --> X+2
    8042 95           tSX	
(0028) }
(0029) 
(0030) //SCISend1:串行发送1个字节-------------------------------------------------*
(0031) //功  能:串行发送1个字节                                                   *
(0032) //参  数:要发送的数据                                                      *
(0033) //返  回:无                                                                *
(0034) //-------------------------------------------------------------------------*
(0035) void SCISend1(INT8U o)
(0036) {
    8043 20 09        bra	0x804E
(0037)    //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
(0038)    while(1)	
(0039)       if ((ReSendStatusR & (1<<SendTestBit)) != 0)
    8045 0F 1606      BRclr	7,0x16,0x804E
(0040)       {
    8048 E6 02        ldA	2,X
    804A B7 18        stA	0x18
(0041)       	ReSendDataR=o;
(0042)       	break;
    804C 20 02        bra	0x8050
    804E 20 F5        bra	0x8045
    8050 81           rts	
_SCISendN:
  i                    --> X+0
  ch                   --> X+5
  n                    --> X+4
    8051 A7 FE        aiS	#-2
    8053 95           tSX	
(0043)       }
(0044) }
(0045) 
(0046) //SCISendN:串行发送N个字节-------------------------------------------------*
(0047) //功  能:发送数组中的N个字节数据                                           *
(0048) //参  数:待发送数据的字节数及存放这些数据的数组首地址                      *          
(0049) //返  回:无                                                                *
(0050) //-------------------------------------------------------------------------*
(0051) void SCISendN(INT8U n,INT8U ch[])
(0052) {
    8054 6F 01        clr	1,X
    8056 7F           clr	0,X
    8057 20 1F        bra	0x8078
(0053)   int i;
(0054)   for(i=0;i<n;i++)          
(0055)   	SCISend1(ch[i]);
    8059 E6 01        ldA	1,X
    805B EB 06        add	6,X
    805D B7 41        stA	*__r1
    805F F6           ldA	0,X
    8060 E9 05        adc	5,X
    8062 B7 40        stA	*__r0
    8064 55 40        ldHX	*__r0
    8066 F6           ldA	0,X
    8067 87           pshA	
    8068 CD 8042      jsr	_SCISend1
    806B A7 01        aiS	#1
    806D 95           tSX	
    806E E6 01        ldA	1,X
    8070 AB 01        add	#1
    8072 E7 01        stA	1,X
    8074 F6           ldA	0,X
    8075 A9 00        adc	#0
    8077 F7           stA	0,X
    8078 3F 40        clr	*__r0
    807A E6 04        ldA	4,X
    807C B7 41        stA	*__r1
    807E E6 01        ldA	1,X
    8080 B7 43        stA	*__r3
    8082 F6           ldA	0,X
    8083 B7 42        stA	*__r2
    8085 55 42        ldHX	*__r2
    8087 75 40        cpHX	*__r0
    8089 95           tSX	
    808A 91 CD        blt	0x8059
    808C A7 02        aiS	#2
    808E 81           rts	
_SCIRe1:
  i                    --> X+0
  k                    --> X+1
  p                    --> X+5
    808F A7 FD        aiS	#-3
    8091 95           tSX	
(0056) }
(0057) 
(0058) //SCIRe1:串行收一个字节数据------------------------------------------------*
(0059) //功  能:从串行口接收1个字节的数据                                         *
(0060) //参  数:标志指针p                                                         *
(0061) //返  回:接收到的数据(若接收失败,返回0xff)                              * 
(0062) //说  明:参数*p带回接收标志.*p=0,收到数据;*p=1,未收到数据                  *
(0063) //-------------------------------------------------------------------------*
(0064) INT8U SCIRe1(INT8U *p)
(0065) {  
    8092 6F 02        clr	2,X
    8094 6F 01        clr	1,X
    8096 20 21        bra	0x80B9
(0066)    INT16U k;
(0067)    INT8U  i;
(0068)    //ReStatusR第ReTestBit位为1表示可接收数据
(0069)    for(k=0;k<0xfbbb;k++)
(0070) 	  if ((ReSendStatusR & (1<<ReTestBit)) != 0)
    8098 0B 1612      BRclr	5,0x16,0x80AD
(0071) 	  {
    809B B6 18        ldA	0x18
    809D F7           stA	0,X
(0072) 	      i=ReSendDataR;
(0073) 	      *p=0x00; 
    809E E6 06        ldA	6,X
    80A0 B7 41        stA	*__r1
    80A2 E6 05        ldA	5,X
    80A4 B7 40        stA	*__r0
    80A6 4F           clrA	
    80A7 55 40        ldHX	*__r0
    80A9 F7           stA	0,X
    80AA 95           tSX	
(0074) 	      break;
    80AB 20 1C        bra	0x80C9
    80AD E6 02        ldA	2,X
    80AF AB 01        add	#1
    80B1 E7 02        stA	2,X
    80B3 E6 01        ldA	1,X
    80B5 A9 00        adc	#0
    80B7 E7 01        stA	1,X
    80B9 E6 02        ldA	2,X
    80BB B7 41        stA	*__r1
    80BD E6 01        ldA	1,X
    80BF B7 40        stA	*__r0
    80C1 55 40        ldHX	*__r0
    80C3 65 FBBB      cpHX	#0xFBBB
    80C6 95           tSX	
    80C7 25 CF        bcs	0x8098
(0075) 	  } 
(0076)    //接受失败
(0077)    if(k>=0xfbbb) 
    80C9 E6 02        ldA	2,X
    80CB B7 41        stA	*__r1
    80CD E6 01        ldA	1,X
    80CF B7 40        stA	*__r0
    80D1 55 40        ldHX	*__r0
    80D3 65 FBBB      cpHX	#0xFBBB
    80D6 95           tSX	
    80D7 25 11        bcs	0x80EA
(0078)    {
    80D9 A6 FF        ldA	#-1
    80DB F7           stA	0,X
(0079) 	  i=0xff;
(0080) 	  *p=0x01;
    80DC E6 06        ldA	6,X
    80DE B7 41        stA	*__r1
    80E0 E6 05        ldA	5,X
    80E2 B7 40        stA	*__r0
    80E4 A6 01        ldA	#1
    80E6 55 40        ldHX	*__r0
    80E8 F7           stA	0,X
    80E9 95           tSX	
(0081)    }
    80EA F6           ldA	0,X
    80EB A7 03        aiS	#3
    80ED 81           rts	
_SCIReN:
  fp                   --> X+0
  m                    --> X+1
  ch                   --> X+6
  n                    --> X+5
    80EE A7 FD        aiS	#-3
    80F0 95           tSX	
(0082)    return i;
(0083) }
(0084) 
(0085) //SCIReN:HC08串行接收N个字节-----------------------------------------------*
(0086) //功  能:接收N个字节数据,并存放在ch数组中                                  *
(0087) //参  数:待接收的数据字节数及其存放的数组首地址                            *
(0088) //返  回:接收标志=0 收到数据,=1 未收到数据                                 *
(0089) //-------------------------------------------------------------------------*
(0090) INT8U SCIReN(INT8U n,INT8U ch[])
(0091) {
    80F1 6F 02        clr	2,X
    80F3 6F 01        clr	1,X
    80F5 20 31        bra	0x8128
(0092)    int m;                  
(0093)    INT8U fp;
(0094)    m=0;
(0095)    while (m<n)
(0096)    { 	          
    80F7 89           pshX	
    80F8 8B           pshH	
    80F9 CD 808F      jsr	_SCIRe1
    80FC A7 02        aiS	#2
    80FE 95           tSX	
    80FF B7 41        stA	*__r1
    8101 E6 02        ldA	2,X
    8103 EB 07        add	7,X
    8105 B7 43        stA	*__r3
    8107 E6 01        ldA	1,X
    8109 E9 06        adc	6,X
    810B B7 42        stA	*__r2
    810D B6 41        ldA	*__r1
    810F 55 42        ldHX	*__r2
    8111 F7           stA	0,X
    8112 95           tSX	
(0097) 	  ch[m]=SCIRe1(&fp); 
(0098) 	  if (fp==1) return 1;
    8113 F6           ldA	0,X
    8114 A1 01        cmp	#1
    8116 26 04        bne	0x811C
    8118 A6 01        ldA	#1
    811A 20 22        bra	0x813E
(0099) 	  m++;
    811C E6 02        ldA	2,X
    811E AB 01        add	#1
    8120 E7 02        stA	2,X
    8122 E6 01        ldA	1,X
    8124 A9 00        adc	#0
    8126 E7 01        stA	1,X
(0100)    } 
    8128 3F 40        clr	*__r0
    812A E6 05        ldA	5,X
    812C B7 41        stA	*__r1
    812E E6 02        ldA	2,X
    8130 B7 43        stA	*__r3
    8132 E6 01        ldA	1,X
    8134 B7 42        stA	*__r2
    8136 55 42        ldHX	*__r2
    8138 75 40        cpHX	*__r0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -