打印
[牛人杂谈]

程序的严格性

[复制链接]
1052|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Roderman_z|  楼主 | 2016-4-27 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序的严格性似乎总是被很多人遗忘,在编写程序时,一定要把隐患消灭掉,否则后患无穷。这里以1602液晶屏为例,希望可以作为一个切入点,但是要通过问题表象,看到问题本质,而不仅仅局限于1602液晶屏,思想更加重要。大家都知道1602液晶屏的数据口是8位数据口,但是实际上还有一种模式,就是4位数据口,实质上很简单,就是利用4位数据口传送数据,传送两次而已,其他无差别,但这不是这里讨论的关键。下面看一下网友的代码(只放关键部分):
#define  DataPort  P0  
  void LCD_Write_Data(unsigned char Data)   
{   
//while(LCD_Check_Busy()); //忙则等待  
DelayMs(5);  
RS_SET;   
RW_CLR;   
EN_SET;   
DataPort= Data;   
_nop_();  
EN_CLR;  
  EN_SET;   
DataPort= Data<<4;   
_nop_();  
EN_CLR;  
}  
其中,我们之关心两句话,就是DataPort= Data; 和DataPort= Data<<4; 这两句话什么意思呢 ? 就是通过P0端口的高4个Bit,把数据传送两次,使用的是P04,P05,P06,P07。这里的实验网友成功了,他认为这个代码没有问题,但是这里的隐患确实非常明显的,如果不该掉,可能导致这样的情况发生:在1602的液晶屏4位数据口模式的独立实验中成功了,但是在一个复杂的系统设计中,却出现了很多意料之外的情况。实际上,问题较为突出,比如第一句DataPort= Data ; 从上面我们看出,对于1602而言,他只关心和他的4位数据口连接的 P04,P05,P06,P07的状态,但是上面的复制,却影响到了P00,P01,P02,P03,这里明显不行的,比如P00,P01,P02,P03连接了LED或者其他设备,这时候会影响到他们的运行。所以我的建议是,修改为:

第一次传送:  
DataPort &= 0x0f ;         /*P0高4位清零,准备传送数据*/  
DataPort |= (temp & 0xf0) ;/*P0传送数据temp的高4位,P0的低4位不受影响*/  

第二次传送:  
DataPort &= 0x0f ;                 /*P0高4位清零,准备传送数据*/  
DataPort |= ((temp & 0x0f)<<4) ;/*P0传送数据temp的低4位,P0的低4位不受影响*/  
这里,希望新手可以通过这表象,看到问题的本质,将隐患扼杀在摇篮,否则简单的1602的4位数据口模式,会成为你调试复杂系统调试的噩梦。
沙发
wahahaheihei| | 2016-4-27 21:52 | 只看该作者
主要要高度抽象出来,让函数内部跟接口无关,这样方便移植,也不容易出错。

使用特权

评论回复
板凳
heisexingqisi| | 2016-4-28 22:40 | 只看该作者
在时序的世界里,是不能有一点错误的,错了,就会后面也不对。

使用特权

评论回复
地板
zhuomuniao110| | 2016-4-28 23:41 | 只看该作者
不能懒省劲,一定要从基础做起严格要求。

使用特权

评论回复
5
gejigeji521| | 2016-4-29 21:46 | 只看该作者
C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。

使用特权

评论回复
6
huangcunxiake| | 2016-4-29 22:24 | 只看该作者
DataPort &= 0x0f ;                 /*P0高4位清零,准备传送数据*/  
DataPort |= ((temp & 0x0f)<<4) ;/*P0传送数据temp的低4位,P0的低4位不受影响*/  
这里,希望新手可以通过这表象,看到问题的本质,将隐患扼杀在摇篮,否则简单的1602的4位数据口模式,会成为你调试复杂系统调试的噩梦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

354

帖子

2

粉丝