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假设项目 ...
随机推荐
- (剑指Offer)面试题39:判断平衡二叉树
题目: 输入一课二叉树的根结点,判断该树是不是平衡二叉树.如果二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 思路: 1.重复遍历结点 参考上一题求二叉树的深度,先求出根结点 ...
- centos下docker网络桥接
停止服务 停止docker0网卡 Ip link set dev docker0 down 删除docker0 Brctl delbr docker0 进入到网卡的配置文件创建桥接网络br0 Brct ...
- 【Android实战】----基于Retrofit实现多图片/文件、图文上传
本文代码详见:https://github.com/honghailiang/RetrofitUpLoadImage 一.再次膜拜下Retrofit Retrofit不管从性能还是使用方便性上都非常屌 ...
- 【十二】注入框架RoboGuice使用:(Your First Injected ContentProvider)
上一篇我们简单的介绍了一下RoboGuice的使用([十一]注入框架RoboGuice使用:(Your First Injection into a Custom View class)),今天我们来 ...
- NSURLConnection经常使用的代理方法
NSURLConnection的代理Protocol定义有三类:NSURLConnectionDelegate.NSURLConnectionDataDelegate和NSURLConnectionD ...
- vue mixin使用
1.概述 将一些公用方法引入到不同的组件中. 2.引入方式 (1)全局引入 // 注册全局Mixin Vue.mixin({ methods: { $touch: function() { // 用以 ...
- Java之开发工具(1) - Eclipse 如何设置注释的模板
最常用的注释就是对类的说明和方法的说明,关于这类代码的注释方式,在Eclipse中可以这样进行设置: windows---preferences...---java--code style--code ...
- android TextView异常换行层次不齐的问题
关于TextView异常换行,参差不齐问题分析:每行的开头的第一个字符如果是字母,数字,标点符号以及特殊字符 可能是由于都是半角字符,所以需要转化成全角字符 解决方法是: public String ...
- 基于olami开放语义平台的微信小程序遥知之源码实现
概述 实现一个智能生活信息查询的小秘书功能,支持查天气.新闻.日历.汇率.笑话.故事.百科.诗词.邮编.区号.菜谱.股票.节目预告,还支持闲聊.算24点.数学计算.单位换算.购物.搜索等功能. 使用方 ...
- eclipse中查看某个方法(函数)被谁调用
用了好久一直不知道eclipse中怎样实现vs中查找全部引用的功能,今天最终发现了哈哈 选中要查找的方法名,右键->References->Workspace 能够定位到详细的调用位置,快 ...