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

📄 sci.lis

📁 飞思卡尔的键盘中断源代码,C语言写的,很不错的
💻 LIS
字号:
                        .module SCI.c
                        .area text
                ;              o -> 2,X
 0000           _SCISend1::
 0000 95                tsx
 0001 2009              bra L3
 0003           L2:
 0003           ; /*-----------------------------------------------------*
 0003           ; *文件描述:本文件包含了串行通信的4子程序,分别为:        *  
 0003           ; *(1)SCISend1:串行发送1字节                             *
 0003           ; *(2)SCISendN:串行发送n字节                             *
 0003           ; *(3)SCIRe1:串行接收1字节                               *
 0003           ; *(4)SCIReN:串行接收n字节                               *
 0003           ; *-------------《嵌入式应用技术基础教程》--------------*/
 0003           ; //[以下为子程序源代码]
 0003           ; //[包含头文件]
 0003           ; #include "SCI.h"
 0003           ; /*SCISend1:串行发送1个字节-----------------------------*
 0003           ; *功  能:串行发送1个字节                                *
 0003           ; *参  数:要发送的数据                                   *
 0003           ; *返  回:无                                             *
 0003           ; *-----------------------------------------------------*/
 0003           ; void SCISend1(unsigned char o)
 0003           ;  {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
 0003           ;    while(1)	
 0003           ;       if ((ReSendStatusR & (1<<SendTestBit)) != 0)
 0003 0F1606            brclr #7,0x16,L5
 0006           ;          { ReSendDataR=o;
 0006 E602              lda 2,X
 0008 B718              sta 0x18
 000A           ;            break;}
 000A 2002              bra L4
 000C           L5:
 000C           L3:
 000C 20F5              bra L2
 000E           L4:
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 81                rts
 000F           ;              i -> 0,X
 000F           ;             ch -> 5,X
 000F           ;              n -> 4,X
 000F           _SCISendN::
 000F A7FE              ais #-2
 0011 95                tsx
 0012           ;  }
 0012           ; /*SCISendN:串行发送N个字节-----------------------------*
 0012           ; *功  能:发送数组中的N个字节数据                        *
 0012           ; *参  数:待发送的数据字节数及其要存放的数组首地址       *          
 0012           ; *返  回:无                                             *
 0012           ; *-----------------------------------------------------*/
 0012           ; void SCISendN(unsigned char n,unsigned char ch[])
 0012           ;   {int i;
 0012           ;    for(i=0;i<n;i++)          
 0012 6F01              clr 1,X
 0014 7F                clr ,X
 0015 201F              bra L11
 0017           L8:
 0017 E601              lda 1,X
 0019 EB06              add 6,X
 001B B700              sta *__r1
 001D F6                lda ,X
 001E E905              adc 5,X
 0020 B700              sta *__r0
 0022 5500              ldhx *__r0
 0024 F6                lda ,x
 0025 87                psha
 0026 CD0000            jsr _SCISend1
 0029 A701              ais #1
 002B 95                tsx
 002C           L9:
 002C E601              lda 1,X
 002E AB01              add #1
 0030 E701              sta 1,X
 0032 F6                lda ,X
 0033 A900              adc #0
 0035 F7                sta ,X
 0036           L11:
 0036 3F00              clr *__r0
 0038 E604              lda 4,X
 003A B700              sta *__r1
 003C E601              lda 1,X
 003E B700              sta *__r3
 0040 F6                lda ,X
 0041 B700              sta *__r2
 0043 5500              ldhx *__r2
 0045 7500              cphx *__r0
 0047 95                tsx
 0048 91CD              blt L8
 004A           L7:
 004A A702              ais #2
 004C                   .dbline 0 ; func end
 004C 81                rts
 004D           ;              i -> 0,X
 004D           ;              k -> 1,X
 004D           ;              p -> 5,X
 004D           _SCIRe1::
 004D A7FD              ais #-3
 004F 95                tsx
 0050           ;       SCISend1(ch[i]);
 0050           ;   }
 0050           ; /*SCIRe1:串行收一个字节数据----------------------------*
 0050           ; *功  能:从串行口接收1个字节的数据                      *         
 0050           ; *参  数:标志指针p                                      *
 0050           ; *返  回:接收到的数据(若接收失败,返回0xff)           * 
 0050           ; *说  明:参数*p带回接收标志=0收到数据,=1未收到数据      *  
 0050           ; *-----------------------------------------------------*/
 0050           ; unsigned char SCIRe1(unsigned char *p)
 0050           ;  { unsigned int k;
 0050           ;    unsigned char i;
 0050           ;    //ReStatusR第ReTestBit位为1表示可接收数据
 0050           ;       for(k=0;k<0xfbbb;k++)
 0050 6F02              clr 2,X
 0052 6F01              clr 1,X
 0054 2021              bra L16
 0056           L13:
 0056           ; 	  if ((ReSendStatusR & (1<<ReTestBit)) != 0)
 0056 0B1612            brclr #5,0x16,L17
 0059           ;            {i=ReSendDataR;
 0059 B618              lda 0x18
 005B F7                sta ,X
 005C           ;             *p=0x00; 
 005C E606              lda 6,X
 005E B700              sta *__r1
 0060 E605              lda 5,X
 0062 B700              sta *__r0
 0064 4F                clra
 0065 5500              ldhx *__r0
 0067 F7                sta ,x
 0068 95                tsx
 0069           ;             break;} 
 0069 201C              bra L15
 006B           L17:
 006B           L14:
 006B E602              lda 2,X
 006D AB01              add #1
 006F E702              sta 2,X
 0071 E601              lda 1,X
 0073 A900              adc #0
 0075 E701              sta 1,X
 0077           L16:
 0077 E602              lda 2,X
 0079 B700              sta *__r1
 007B E601              lda 1,X
 007D B700              sta *__r0
 007F 5500              ldhx *__r0
 0081 65FBBB            cphx #-1093
 0084 95                tsx
 0085 25CF              blo L13
 0087           L15:
 0087           ; 	if(k>=0xfbbb) 
 0087 E602              lda 2,X
 0089 B700              sta *__r1
 008B E601              lda 1,X
 008D B700              sta *__r0
 008F 5500              ldhx *__r0
 0091 65FBBB            cphx #-1093
 0094 95                tsx
 0095 2511              blo L19
 0097           ;         {i=0xff;
 0097 A6FF              lda #-1
 0099 F7                sta ,X
 009A           ;          *p=0x01;}    
 009A E606              lda 6,X
 009C B700              sta *__r1
 009E E605              lda 5,X
 00A0 B700              sta *__r0
 00A2 A601              lda #1
 00A4 5500              ldhx *__r0
 00A6 F7                sta ,x
 00A7 95                tsx
 00A8           L19:
 00A8           ;     return i;             //返回接收到的数据
 00A8 F6                lda ,X
 00A9           L12:
 00A9 A703              ais #3
 00AB                   .dbline 0 ; func end
 00AB 81                rts
 00AC           ;             fp -> 0,X
 00AC           ;              m -> 1,X
 00AC           ;             ch -> 6,X
 00AC           ;              n -> 5,X
 00AC           _SCIReN::
 00AC A7FD              ais #-3
 00AE 95                tsx
 00AF           ;  }
 00AF           ; /*SCIReN:HC08串行接收N个字节---------------------------*
 00AF           ; *功  能:接收N个字节数据,并存放在ch数组中               *       
 00AF           ; *参  数:待接收的数据字节数及其存放的数组首地址         *       
 00AF           ; *返  回:接收标志=0收到数据,=1未收到数据                * 
 00AF           ; *-----------------------------------------------------*/
 00AF           ; unsigned char SCIReN(unsigned char n,unsigned char ch[])
 00AF           ;  {int m;                  
 00AF           ;    unsigned char fp;
 00AF           ;    m=0;
 00AF 6F02              clr 2,X
 00B1 6F01              clr 1,X
 00B3 2031              bra L23
 00B5           L22:
 00B5           ;    while (m<n)
 00B5           ; 	{ 	          
 00B5           ; 	  ch[m]=SCIRe1(&fp); 
 00B5 89                pshx
 00B6 8B                pshh
 00B7 CD004D            jsr _SCIRe1
 00BA A702              ais #2
 00BC 95                tsx
 00BD B700              sta *__r1
 00BF E602              lda 2,X
 00C1 EB07              add 7,X
 00C3 B700              sta *__r3
 00C5 E601              lda 1,X
 00C7 E906              adc 6,X
 00C9 B700              sta *__r2
 00CB B600              lda *__r1
 00CD 5500              ldhx *__r2
 00CF F7                sta ,x
 00D0 95                tsx
 00D1           ;         if (fp==1) return 1;
 00D1 F6                lda ,X
 00D2 A101              cmp #1
 00D4 2604              bne L25
 00D6 A601              lda #1
 00D8 2022              bra L21
 00DA           L25:
 00DA E602              lda 2,X
 00DC AB01              add #1
 00DE E702              sta 2,X
 00E0 E601              lda 1,X
 00E2 A900              adc #0
 00E4 E701              sta 1,X
 00E6           L23:
 00E6 3F00              clr *__r0
 00E8 E605              lda 5,X
 00EA B700              sta *__r1
 00EC E602              lda 2,X
 00EE B700              sta *__r3
 00F0 E601              lda 1,X
 00F2 B700              sta *__r2
 00F4 5500              ldhx *__r2
 00F6 7500              cphx *__r0
 00F8 95                tsx
 00F9 91BA              blt L22
 00FB           ;         m++;
 00FB           ;        } 
 00FB           ;    return 0;   
 00FB 4F                clra
 00FC           L21:
 00FC A703              ais #3
 00FE                   .dbline 0 ; func end
 00FE 81                rts

⌨️ 快捷键说明

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