16V554 的测试代码
//------------------------------------------------------------------------
- #include "AT16C554.H"
- //--------------------------------------------------------------------------------------------------
- code Uint PORTAddrTABLE[PortNumber]={STARTADDR_SERIAL1,
- STARTADDR_SERIAL2,
- STARTADDR_SERIAL3,
- STARTADDR_SERIAL4}; //串口端口地址映射表
- xdata TCommHandle CommDevice[PortNumber];
- sbit reset_16c554 = P1^4; //ST16C554 复位控制线
- //---------------------------------------------------------------------------------------------------
- // Define Private Faction
- //-----------------------------------------------------------------------------------------------------
- bool ReadPortRecBuf(uchar Port,Uchar *Byte);
- bool WritePortSendBuf(uchar Port,Uchar Byte);
- void Port_open(Uchar PortID,Uint Baud);
- //-------------------------------------------------------------------------
- // Define Public Faction
- //-------------------------------------------------------------------------
- bool Init_16c554(void);
- void Port_open(Uchar PortID,Uint Baud);
- //void Port_open(Uchar PortID,int Baud,Uchar DataBitNum,Uchar Parit,Uchar Stop);
- void Port_close(Uchar PortID);
- int Port_Receive(Uchar PortID,void *Buffer,int Count);
- int Port_Send(Uchar PortID,void *Buffer,int Count);
- //---------------------------------------------------------------------------------------------
- // Public Faction Code
- //---------------------------------------------------------------------------------------------
- //---------------------------------------------------------------------------------------------
- // 初始化ST16C554
- //---------------------------------------------------------------------------------------------
- bool Init_16c554(void)
- {
- uchar xdata *ptr;
- uchar i=Init_16c554_Count;
- bool Result=false;
- while(--i) // 复位10次不成功,则返回出错
- {
- _nop_();
- reset_16c554 = FREE_RESET;
- ms_delay(5);
- reset_16c554 = RESET; // 复位16C554
- ms_delay(10); // 延时1毫秒
- reset_16c554 = FREE_RESET;
- ms_delay(10);
- ptr = STARTADDR_SERIAL1+SPR; // 通道1临时寄存器
- *ptr = 0xaa; // 写测试值到临时寄存器
- _nop_();
- _nop_();
- if(*ptr == 0xaa)
- {
- Result=true;
- break;
- };//end if
- };//end while
- for(i=0;i<PortNumber;i++) CommDevice[i].RAMAddress_Map=PORTAddrTABLE[i];
- return Result;
- }
- //---------------------------------------------------------------------------------------------
- // 打开串口
- //---------------------------------------------------------------------------------------------
- void Port_open(Uchar PortID,Uint Baud)
- {
- uchar xdata *ptr;
- ptr = CommDevice[PortID].RAMAddress_Map; // 取端口的基地址
- *(ptr+LCR) = LCR_DIV_EN; // 允许发送波特率
- *(ptr+DLM) = (uchar)(Baud>>8);
- *(ptr+DLL) = (uchar)Baud; // 设置默任波特率为19200
- *(ptr+LCR) = LCR_WORD_LEN8|LCR_STOP_LEN1; // 设置字长为8,1个停止位,无校验位
- *(ptr+FCR) = FIFO_EN|FIFO_TRI_LEVEL_1|FIFO_CLEAR_RCVR|FIFO_CLEAR_XMIT|FIFO_DMA_MODE; // 设置FIFO 控制寄存器
- *(ptr+IER) = IER_TRANSMITHOLD_INT|IER_RECEIVEHOLD_INT; // 设置中断屏蔽寄存器
- *(ptr+MCR) = MCR_INTX_EN; // 允许中断引脚输出
- if(PortID==0) EX0 = true; // 开外部中断0(通道1中断)
- if(PortID==1) EX1 = true; // 开外部中断1(通道2中断)
- if(PortID==2) EX2 = true; // 开外部中断2(通道3中断)
- if(PortID==3) EX3 = true; // 开外部中断3(通道4中断)
- CommDevice[PortID].CommReceive_Head=0;
- CommDevice[PortID].CommReceive_Trail=0;
- CommDevice[PortID].CommSend_Head=0;
- CommDevice[PortID].CommSend_Trail=0;
- CommDevice[PortID].Comm_Stu=SERIAL_STU_FREE;
- }
- //---------------------------------------------------------------------------------------------
- // 关闭指定的端口
- //---------------------------------------------------------------------------------------------
- /*void Port_close(Uchar PortID)
- {
- uchar xdata *ptr;
- ptr = CommDevice[PortID].RAMAddress_Map; // 取端口的基地址
- *(ptr+LCR) = LCR_DIV_Dis; // 禁止发送波特率
- *(ptr+MCR) = MCR_INTX_Dis; // 允许中断引脚输出
- CommDevice[PortID].CommReceive_Head=0;
- CommDevice[PortID].CommReceive_Trail=0;
- CommDevice[PortID].CommSend_Head=0;
- CommDevice[PortID].CommSend_Trail=0;
- CommDevice[PortID].Comm_Stu=SERIAL_STU_FREE;
- if(PortID==0) EX0 = false; // 关外部中断0(通道1中断)
- if(PortID==1) EX1 = false; // 关外部中断1(通道2中断)
- if(PortID==2) EX2 = false; // 关外部中断2(通道3中断)
- if(PortID==3) EX3 = false; // 关外部中断3(通道4中断)
- }*/
- //--------------------------------------------------------------------------------------------------
- //功 能:从串口中接收数据
- //返回值:从串口中接收到的数据个数
- //参 数:
- // Buffer:接收数的缓冲区
- // Count: 想从串口缓冲区中接收数据个数
- //--------------------------------------------------------------------------------------------------
- /*int Port_Receive(uchar Port,register void *Buffer,int Count)
- {
- Uchar Size=0;
- if(Port>PortNumber-1) return Size;
- while((Size<Count)&&(ReadPortRecBuf(Port,Buffer)))
- {
- Size++;
- Buffer=Buffer+1;
- };//end while
- return Size;
- }*/
- //--------------------------------------------------------------------------------------------------
- //功 能:往串口发送数据
- //返回值:已发送的数据个数
- //参 数:
- // Buffer:发送数据的缓冲区
- // Count: 想从串口发送数据的个数
- //--------------------------------------------------------------------------------------------------
- int Port_Send(uchar Port,register void *Buffer,int Count)
- {
- uchar i=0;
- Uchar Size=0;
- uchar xdata *ptr;
- if(Port>PortNumber-1) return Size;
- ptr = CommDevice[Port].RAMAddress_Map; // 取端口基地址
- while(Size<Count)
- {
- if(WritePortSendBuf(Port,*((Uchar *)Buffer)))
- {
- Size=Size+1;
- Buffer=Buffer+1;
- };//end if
- if(CommDevice[Port].Comm_Stu==SERIAL_STU_FREE)
- {
- for(i=0;(i<FIFO_SIZE)&&(CommDevice[Port].CommSend_Head!=CommDevice[Port].CommSend_Trail);i++)
- {
- CommDevice[Port].CommSend_Trail=(CommDevice[Port].CommSend_Trail+1)%CommMaxSendBuffer;
- *(ptr+THR) = CommDevice[Port].CommSendBuffer[CommDevice[Port].CommSend_Trail]; // 发送数据
- };//end for
- CommDevice[Port].Comm_Stu = SERIAL_STU_BUSY;
- };//end if
- };//end while
- return Size;
- }
- //----------------------------------------------------------------------------------------------------
- //----------------------------------------------------------------------------------------------------
- //私有函数
- //----------------------------------------------------------------------------------------------------
- //功 能:从串口接收缓冲区中取得数据
- //返回值:
- // true: 从缓冲区中成功取得数据
- // false: 从缓冲区中无法取得数据
- //参 数: *Byte:从缓冲区中取得数据返回
- //-----------------------------------------------------------------------------------------------------
- /*bool ReadPortRecBuf(uchar Port,Uchar *Byte)
- {
- if(CommDevice[Port].CommReceive_Trail==CommDevice[Port].CommReceive_Head) return false;
- *Byte=CommDevice[Port].CommReceiveBuffer[CommDevice[Port].CommReceive_Trail];
- CommDevice[Port].CommReceive_Trail=(CommDevice[Port].CommReceive_Trail+1)%CommMaxReceiveBuffer;
- return true;
- }*/
- //-----------------------------------------------------------------------------------------------------
- //功 能:往串口发送缓冲区中写数据
- //返回值:
- // true: 往缓冲区中写数据成功
- // false: 从缓冲区中写数据失败
- //参 数: Byte: 往缓冲区中写入的数据
- //------------------------------------------------------------------------------
- bool WritePortSendBuf(uchar Port,Uchar Byte)
- {
- if((CommDevice[Port].CommSend_Head+1)%CommMaxSendBuffer==CommDevice[Port].CommSend_Trail) return false;
- CommDevice[Port].CommSend_Head=(CommDevice[Port].CommSend_Head+1)%CommMaxSendBuffer;
- CommDevice[Port].CommSendBuffer[CommDevice[Port].CommSend_Head]=Byte;
- return true;
- }
- //--------------------------------------------------------------------------------
- // 外部扩展串行口1中断处理程序(外部中断0)
- //--------------------------------------------------------------------------------
- void serial1_int() interrupt 0
- {
- uchar xdata *ptr;
- uchar event;
- uchar port;
- port = CHANL1_PORT;
- ptr = CommDevice[port].RAMAddress_Map; // 读ISR 中断状态寄存器
- event = *(ptr+ISR)&0x0f; // 读最高优先级别的中断码
- _nop_();
- switch(event)
- {
- case EVENT_RXRDY: // 接受数据到中断
- case EVENT_RXRDY_TIMEOUT:
- for(;*(ptr+LSR)&EVENT_LSR_RECEIVE;)
- {
- CommDevice[port].CommReceiveBuffer[CommDevice[port].CommReceive_Head] = *(ptr+RHR);
- if(((CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer)!=CommDevice[port].CommReceive_Trail)
- CommDevice[port].CommReceive_Head=(CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer;
- }; //end for
- break;
- case EVENT_TXRDY: //发送数据中断
- if(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head) //判断数据包是否发送完毕
- {
- for(event=0;(event<FIFO_SIZE)&&(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head);event++)
- {
- CommDevice[port].CommSend_Trail=(CommDevice[port].CommSend_Trail+1)%CommMaxSendBuffer;
- *(ptr+THR) = CommDevice[port].CommSendBuffer[CommDevice[port].CommSend_Trail];
- };//end for
- CommDevice[port].Comm_Stu = SERIAL_STU_BUSY;
- }else CommDevice[port].Comm_Stu = SERIAL_STU_FREE;
- break;
- };//end switch
- }
- //--------------------------------------------------------------------------------
- // 外部扩展串行口2中断处理程序(外部中断2)
- //--------------------------------------------------------------------------------
- void serial2_int() interrupt 2
- {
- uchar xdata *ptr;
- uchar event;
- uchar port;
- port = CHANL2_PORT;
- ptr = CommDevice[port].RAMAddress_Map; //读ISR 中断状态寄存器
- event = *(ptr+ISR)&0x0f; //读最高优先级别的中断码
- _nop_();
- switch(event)
- {
- case EVENT_RXRDY: //接受数据到中断
- case EVENT_RXRDY_TIMEOUT:
- for(;*(ptr+LSR)&EVENT_LSR_RECEIVE;)
- {
- CommDevice[port].CommReceiveBuffer[CommDevice[port].CommReceive_Head] = *(ptr+RHR);
- if(((CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer)!=CommDevice[port].CommReceive_Trail)
- CommDevice[port].CommReceive_Head=(CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer;
- }; //end for
- break;
- case EVENT_TXRDY: //发送数据中断
- if(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head) //判断数据包是否发送完毕
- {
- for(event=0;(event<FIFO_SIZE)&&(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head);event++)
- {
- CommDevice[port].CommSend_Trail=(CommDevice[port].CommSend_Trail+1)%CommMaxSendBuffer;
- *(ptr+THR) = CommDevice[port].CommSendBuffer[CommDevice[port].CommSend_Trail];
- };//end for
- CommDevice[port].Comm_Stu = SERIAL_STU_BUSY;
- }else CommDevice[port].Comm_Stu = SERIAL_STU_FREE;
- break;
- };//end switch
- }
- //--------------------------------------------------------------------------------
- // 外部扩展串行口3中断处理程序(外部中断6)
- //--------------------------------------------------------------------------------
- void serial3_int () interrupt 6
- {
- uchar xdata *ptr;
- uchar event;
- uchar port;
- port = CHANL3_PORT;
- ptr = CommDevice[port].RAMAddress_Map; // 读ISR 中断状态寄存器
- event = *(ptr+ISR)&0x0f; // 读最高优先级别的中断码
- _nop_();
- switch(event)
- {
- case EVENT_RXRDY: // 接受数据到中断
- case EVENT_RXRDY_TIMEOUT:
- for(;*(ptr+LSR)&EVENT_LSR_RECEIVE;)
- {
- CommDevice[port].CommReceiveBuffer[CommDevice[port].CommReceive_Head] = *(ptr+RHR);
- if(((CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer)!=CommDevice[port].CommReceive_Trail)
- CommDevice[port].CommReceive_Head=(CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer;
- }; //end for
- break;
- case EVENT_TXRDY: //发送数据中断
- if(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head) //判断数据包是否发送完毕
- {
- for(event=0;(event<FIFO_SIZE)&&(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head);event++)
- {
- CommDevice[port].CommSend_Trail=(CommDevice[port].CommSend_Trail+1)%CommMaxSendBuffer;
- *(ptr+THR) = CommDevice[port].CommSendBuffer[CommDevice[port].CommSend_Trail];
- };//end for
- CommDevice[port].Comm_Stu = SERIAL_STU_BUSY;
- }else CommDevice[port].Comm_Stu = SERIAL_STU_FREE;
- break;
- };//end switch
- }
- //--------------------------------------------------------------------------------
- // 外部扩展串行口4中断处理程序(外部中断7)
- //--------------------------------------------------------------------------------
- void serial4_int () interrupt 7
- {
- uchar xdata *ptr;
- uchar event;
- uchar port;
- port = CHANL4_PORT;
- ptr = CommDevice[port].RAMAddress_Map; // 读ISR 中断状态寄存器
- event = *(ptr+ISR)&0x0f; // 读最高优先级别的中断码
- _nop_();
- switch(event)
- {
- case EVENT_RXRDY: // 接受数据到中断
- case EVENT_RXRDY_TIMEOUT:
- for(;*(ptr+LSR)&EVENT_LSR_RECEIVE;)
- {
- CommDevice[port].CommReceiveBuffer[CommDevice[port].CommReceive_Head] = *(ptr+RHR);
- if(((CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer)!=CommDevice[port].CommReceive_Trail)
- CommDevice[port].CommReceive_Head=(CommDevice[port].CommReceive_Head+1)%CommMaxReceiveBuffer;
- }; //end for
- break;
- case EVENT_TXRDY: //发送数据中断
- if(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head) //判断数据包是否发送完毕
- {
- for(event=0;(event<FIFO_SIZE)&&(CommDevice[port].CommSend_Trail!=CommDevice[port].CommSend_Head);event++)
- {
- CommDevice[port].CommSend_Trail=(CommDevice[port].CommSend_Trail+1)%CommMaxSendBuffer;
- *(ptr+THR) = CommDevice[port].CommSendBuffer[CommDevice[port].CommSend_Trail];
- };//end for
- CommDevice[port].Comm_Stu = SERIAL_STU_BUSY;
- }else CommDevice[port].Comm_Stu = SERIAL_STU_FREE;
- break;
- };//end switch
- }
- //--------------------------------------------------------------------------------
16V554 的测试代码的更多相关文章
- .NET单元测试的艺术-3.测试代码
开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...
- mysql锁 实战测试代码
存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...
- 使用Microsoft Fakes隔离测试代码
在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...
- iOS开发:XCTest单元测试(附上一个单例的测试代码)
测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...
- 在内核中异步请求设备固件firmware的测试代码
在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...
- x264测试代码
建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- Git合并开发代码分支到测试代码分支
——转载请注明出自天外归云的博客园 用TortoiseGit下载代码到本地 首先需要在本机安装好TortoiseGit.然后在随便哪个路径下比如D盘,右键“Git Clone”: 然后URL处选择项目 ...
- mvn编写主代码与测试代码
maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...
随机推荐
- HTTPS服务器配置
一.SSL证书申请 1.确认需要申请证书的域名 2.生成私钥和csr文件 在linux机器上执行以下命令生成私钥 #openssl genrsa -out server.key 2048 在linux ...
- linux shell的执行方式
./ ping.sh 这个意思 ,'./'的意思是在当前目录执行, ping.sh----------------------------------------------------------- ...
- API的文件遍历,未使用CFileFind,因为里面牵扯MFC,编个DLL好麻烦。
// FindFileDebug.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "FindFileDebug. ...
- MFC获得主窗体和父窗体指针
MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg ...
- python中各类时间的计算
python获取当前系统时间: nowTime=time.localtime() 获取当前系统日期: nowDate=datetime.datetime(nowTime[0],nowTime[1],n ...
- 取球游戏_nyoj_518(博弈-蓝桥杯原题).java
取球游戏 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 2 描述 今盒子里有n个小球,A.B两人轮流从盒中取球,每个人都可以看到另一个人取了多少个,也可以看到盒中还剩下 ...
- linux sheel重复执行上条命令
Linux系统下Shell重复执行上条命令的 4 种方法: 1.使用上方向键,并回车执行. 2.按 !! 并回车执行. 3.输入 !-1 并回车执行. 4.按 Ctrl+P 并回车执行.
- 基于Unity3D云人脸监測技术
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师.CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...
- sparkContext 读取hdfs文件流程及分片机制
- 公司测试服务器 vimrc 配置文件
" /etc/vimrc (configuration file for vim only) " author: Klaus Franken <kfr@suse.de> ...