|
|
|
| 首页 - 电子制作
- 怎样让c51写出代码少? |
 |
 |
| 怎样让c51写出代码少? |
-- 怎样让c51写出代码少?
我是个初学者,看过一些关于怎样让c51写出代码少的介绍,但大多也是泛泛而谈,如控制
模式,尽量用8位的字符型等,但是没有更多地介绍。
现在用c51写程序,基本的感觉是,想要的功能可以实现,而且确实编写速度很快,有种不
想回到汇编的感觉,考虑如何组织程序和实现时,思路也是往c上靠,汇编也有些读不动
了,但是,说实话,有种心里挺没底的感觉,小一点的程序,还可以看看汇编码,大了,
很难能读懂keil给出的汇编码,还害怕出现不可知的被优化掉,而且我觉得编译后的代码
太多,写了些调试片子用的程序,挺大的。
现在又遇见一些情况:我在写一个关于ds1302的程序,看了很多网友的程序。
其中,有段程序,也就是对1302读写一字节的程序,有两个,几乎是一样的
/**************************************************
* 名称: InputByte
* 功能: 往DS1302写入1Byte数据
* 返回值: 无
**************************************************/
void inputbyte(unsigned char x)
{
ACC=x;
T_DA=a0;T_CLK=1;T_CLK=0;
T_DA=a1;T_CLK=1;T_CLK=0;
T_DA=a2;T_CLK=1;T_CLK=0;
T_DA=a3;T_CLK=1;T_CLK=0;
T_DA=a4;T_CLK=1;T_CLK=0;
T_DA=a5;T_CLK=1;T_CLK=0;
T_DA=a6;T_CLK=1;T_CLK=0;
T_DA=a7;T_CLK=1;T_CLK=0;
}
/**************************************************
* 名称: OutputByte
* 功能: 从DS1302读取1Byte数据
*返回值: ACC
****************************************************/
unsigned char outputbyte(void)
{
T_DA=1;
a0=T_DA;
T_CLK=1;T_CLK=0;a1=T_DA;
T_CLK=1;T_CLK=0;a2=T_DA;
T_CLK=1;T_CLK=0;a3=T_DA;
T_CLK=1;T_CLK=0;a4=T_DA;
T_CLK=1;T_CLK=0;a5=T_DA;
T_CLK=1;T_CLK=0;a6=T_DA;
T_CLK=1;T_CLK=0;a7=T_DA;
return(ACC);
}
/**************************************************
* 名称: InputByte
* 功能: 往DS1302写入1Byte数据
* 返回值: 无
**************************************************/
void inputbyte(unsigned char x)
{
unsigned char i;
ACC=x;
for(i=0;i<8;i++)
{
T_DA=ACC0;
T_CLK=1;
T_CLK=0;
ACC>>=1;
}
}
/**************************************************
* 名称: OutputByte
* 功能: 从DS1302读取1Byte数据
*返回值: ACC
****************************************************/
unsigned char outputbyte(void)
{
unsigned char i;
T_DA=1;
for(i=0;i<8;i++)
{
ACC>>=1;
ACC7=T_DA;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
(程序拷贝时可能会出现错误,在这里只想问一下这类问题,有小错误见谅)
现在的情况是,两者看起来,思路是完全一样的,但是编译后的代码确实相差很多,我主
要是从编译后提供的代码数上看,相差很多。另外,看到ACC=ACC>>1,在看汇编码时,发
现编译后代码非常繁琐,不是直接的汇编移位命令。后来,想到C51的库函数intrins.h中
有移位的命令,而且代码是内嵌的,我想应该用了它应该会代码少些,所以我改成
ACC=_cror_(ACC,1);但是,代码却更长了,而且也不象想象的那样(如_nop_()),有的网
友说,这是因为用了寄存器,要进行保护的,我就又定义了别的变量,但是汇编码也比广
州老赵(后一个程序是广州老赵的)的长,我现在就不知道了,怎么才能写出代码少一点
的c51程序?
|
|
 |
|
|