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

📄 h08sci.asm

📁 Freescale HC08GP32单片机接LCD源程序
💻 ASM
字号:
*------------------------------------------------------*
*文件描述:本文件包含了串行通信子程序,分别为:           *  
*(1)SCISend1:串行发送A中的1个字节                      *
*(2)SCISendN:串行发送N个字节                           *
*(3)SCIRe1:串行接收一个字节->A                         *
*(4)SCIReN:串行接收N个字节                             *
*------------------------------------------------------*
*[寄存器及相关位定义]
ReSendStatusR EQU  SCS1   ;SCI状态寄存器1    
ReTestBit     EQU  5      ;接收缓冲区满标志位         
SendTestBit   EQU  7      ;发送缓冲区空标志位     
ReSendDataR   EQU  SCDR   ;SCI数据寄存器    
*SCISend1:串行发送A中的1个字节-------------------------*
*功能描述:串行口发送A中的1个字节数据                   *
*入    口:A=待发送的数据                               *
*出    口:无                                           *
*堆栈深度:2                                            *
*------------------------------------------------------*  
SCISend1:
     BRCLR SendTestBit,ReSendStatusR,SCISend1
     STA   ReSendDataR
   RTS 
*SCISendN:串行发送N个字节------------------------------*
*功能描述:串行发送以HX为首地址的N个字节数据            *
*入    口:A=字节个数 HX=首地址                         *
*出    口:无                                           *
*堆栈深度:2+2+1=5                                      *
*------------------------------------------------------*
SCISendN:
     ;在堆栈区开辟1个字节作临时变量N
     AIS #-!1
     ;若发送字节数为0,退出
     STA !1,SP                
     CMP  #!0
     BEQ  SCISendN_EXIT  
SCISendN_1:
     LDA  ,X               ;从存储器中取出待发送的数据
     JSR  SCISend1
     AIX  #!1
   DBNZ  !1,SP,SCISendN_1  ;(N-1)不等于0转
SCISendN_EXIT:
     ;释放1个字节临时变量
     AIS #!1
   RTS
*SCIRe1:串行接收一个字节->A----------------------------*
*功能描述:(1) 串行接收1个字节的数据放在A中             *
*         (2) 约655350时钟周期内收不到数返回           *
*             若时钟周期=0.4us 大约等待2.6S            *
*入    口:无                                           *
*出    口:A=接收的数据 C=是否收到数据标志 0收到 1未收到*
*堆栈深度:2+2=4                                        *
*------------------------------------------------------*   
SCIRe1:
     PSHH         
     PSHX
     ;等待接收一个字节数据
     LDHX #$FFFF          ;循环次数
SCIRe1_1:
     BRCLR ReTestBit,ReSendStatusR,SCIRe1_2 ;无数据,转
     LDA   ReSendDataR    ;收到的数据放入A中
     CLC                  ;C=0 
     BRA   SCIRe1_3       ;收到数据,退出 
SCIRe1_2:
     NOP
     AIX #-$1
     CPHX #$0000
     BNE SCIRe1_1    
     ;等待时间到,未收到数据,令c=1,A=FF,返回
     LDA #$FF
     SEC     ;C=1           
SCIRe1_3:   
     PULX
     PULH
   RTS
*SCIReN:串行接收N个字节--------------------------------*
*功能描述:串行接收N个字节放在以HX为首地址的内存中      *
*入    口:A=待接收数据的字节数N,HX=接收数据存放的首地址*
*出    口:C=是否收到数据标志 0收到 1未收到             *
*堆栈深度:2+4+1=7                                      *
*内部调用:SCIRe1                                       *
*------------------------------------------------------*   
SCIReN:
     ;在堆栈区开辟1个字节作临时变量
     AIS #-!1
     ;若接受字节数为0,退出
     STA !1,SP              
     CMP  #!0
     BEQ  SCIReN_EXIT  
SCIReN_1:
     JSR  SCIRe1       ;调用接收1个字节的子程序
     BCS  SCIReN_EXIT  ;C=1未收到数据,退出
     STA  ,X           ;收到数据,放入内存 
     AIX  #!1          ;HX+1->HX
   DBNZ !1,SP,SCIReN_1
SCIReN_EXIT:   
     ;释放1个字节临时变量
     AIS #!1   
   RTS  

⌨️ 快捷键说明

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