关于Keil C51混合编程和若干个源文件链接的问题

2019-03-24 19:49发布

1  混合编程 之  直接插入 汇编代码
首先是我的DS18B20的编程问题。
上次搞定了那个初始化问题后,接着写好了几个读写时间隙的子程序。
但是,在模拟串行通信上遇到了点问题。
一直以来,都觉得在C51移位是件很困难的事情,特别是带进位位的循环移位,所以很多时候,我能躲就躲。
不过这次,突然给惹毛了。

想起了一直想试试的混合编程。
上网查了查,总共有两种,一种是 直接嵌入 汇编代码,用一个#pragma asm/#pragma endasm搞定
可是,我选择了那两个SRC的选项,像网上说的,又把安装文件下的一个C51S.LIB加载在文件夹下,不仅是我的项目文件夹,也在编译器里加载了,就加在主程序下。
也在安装文件的头文件REG52.H里加了那句什么传说中的 #pragma 4,,具体忘了,反正是网上找着的。直接COPY。

可是编译时死活过不去,一直提示这条信息,还好几条:
ERROR A45:UNDEFINED SYMBOL(PASS - 2)
我点了点,这回出现了一个新鲜的SRC窗口,里面的东西有点像 汇编源程序。
我发现几个挺要命的问题:
源文件里我是这么写的:
/*写一个字节到DS18B20*/
/*发送顺序从LSB到MSB */
/*嵌入汇编模块*/
void Write_Byte(unsigned char value) using 2
{
  unsigned char j = 0;
  ACC = value;

  for(j = 0;j < 8;j++)
  {
     #pragma asm
     RRC A;
     DQ = CY;      
     #pragma endasm
     if(DQ)
       Write_1();
     else
       Write_0();
   }
}
可是到了SRC下,出现了一个很要命的问题:
我一进循环,就发现ACC给他请掉了!!我擦,以前其实我也有隐约察觉到这个问题,好像一进循环有好多东西就不见了。不过貌似都没引起什么问题。
这次,不晓得是否会出问题——不出才怪,把我的ACC请掉了,我还送什么数据?

好吧,即使这个问题不管它。
假如我可以避开使用ACC,比如我进到循环里,,,好吧,那都有点放屁脱裤子了。。。。
其实我上次玩5110(还没搞定)时,我见过一个纯C语法的串行模拟程序,有它我也搞定这个问题。
可是关于 嵌入汇编 这个问题,一直像颗石头憋在我心上,不爽,今天第一次折腾,折腾了老久,网上说的我都试了,不行,希望哪位大侠给指教指教。

另外,当我编译好后,还会弹出一个窗口,上面写着什么
我的SRC文件被外部的什么编辑器编译过了,问我是否确定。
我上网查了查,他说,这是因为我在外部用记事本等东西修改过源文件。。。这么说的话,我唯一动过的就是那个REG52.H头文件,这样的话,应该没啥问题吧?

--------------------
网上有个人说,这个无关程序编译,我想想也觉得问题不大,就不想管它,可是我惊奇地发现,百度上问这个问题的都是在搞 嵌入汇编的。



/*2 关于不同源文件链接*/
/*在IAR EWARM下,我发现这种链接很直接。我甚至可以include .C文件。然而今天我在KEIL里试了试,问题各种多。*/
/*首先说找不到我的文件,后来我把C的改成H文件,好像就解决了这个问题。*/
/*但是这时,他拼命说什么 我重复定义了,我一看是那个头文件里的函数声明。*/
/*额,,这个问题,这个问题,先放下,,我用/**/括起来先。。。。自己都没搞清楚就问人,太对不起观众,太没形象了。*/
/*PS:我之所以折腾这个,是想用在接下来的51DIY的整合上,因为涉及两部分甚至三部分要编写单片机程序,所以,,,,*/
/*其实好吧,到了这一步也是最初我持分任务分人单独完成所要实现的目的。*/ 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。