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假设项目 ...
随机推荐
- SQL Server快速部署作业到多台服务器
问题: 需要在很多的SQL Server服务器上创建相同的作业.我们可以一台一台的运行相同的脚本创建作业,但是有没有什么简便的做法呢? 解决方法: 可能很多人都没有注意到可以用多服务器环境管理SQL ...
- C# 解决无法识别的属性 configProtectionProvider
在使用.Net自身提供的加密本配置文件后再用System.Configuration.ConfigurationManager.AppSettings["key"]获取值时会出现“ ...
- facebook开源的adb 工具,解决adb连不上手机的问题
一. fb-adb.fb-adb(https://github.com/facebook/fb-adb)
- UNIX网络编程读书笔记:基本SCTP套接口编程
概述 SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的).它最初是为满足不断增长的IP电话市场设计的:具体地说,就是穿越因特网传输电话信令. SCTP是一个 ...
- Linux dig
安装dig: yum install bind-utils dig 常用命令: # dig 最基本的用法dig @server sina.com.cn. # 用 dig 查看 zone 数据传输 di ...
- profiler跟踪事件存为表之后性能分析工具
使用profiler建立跟踪,将跟踪结果存到表中,使用下面存储过程执行 exec temp_profiler 'tra_tablename'对表数据进行处理归类,然后进行性能分析 1.先建存储过程 2 ...
- 【转发】jQuery1.9.1至最高版本针对checkbox的调整
在jquery 1.8.x中的版本,我们对于checkbox的选中与不选中操作如下: 判断是否选中 $('#checkbox').prop('checked') 设置选中与不选中状态: $('#che ...
- AjaxAnyWhere 实现页面局部刷新,局部分页
这个比較jquery.单纯ajax异步简单多了.不多说了直接上代码. 须要引入:ajaxanywhere-1.2.1.jar (最新)和 /ajaxAnyWhereDemo/WebRoot/js/aa ...
- 纯CSS实现蜂窝六边形的个性相册
概述 纯CSS实现蜂窝六边形的个性相册 详细 代码下载:http://www.demodashi.com/demo/12804.html 此案例主要用到CSS3的 transform 和 transi ...
- powerdesigner 画PDM
一.PDM概述 PDM(物理数据模型-Physical Data Modal),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库. PDM中涉及到的基本概念包括: 表: 列 ...