请教高手 这段51 程序如何移值到PIC 16F877上面. 想了一天,总是感觉不通.

2020-02-08 12:20发布

这是网上下的一段12864 串口的程序 我现在想把他用在PIC16F877单片机上面,但是这段我想不出来怎么个改法.

还请熟悉的朋友指点一下.

sbit cs =P2^4;  //片选
sbit sid=P2^2;  //数据传送
sbit sck=P2^0;  //时钟

/*********************************************
函数名称:写字节函数
函数功能:
**********************************************/
void w_12864byte(uchar byte)
{
   uchar i;
   for(i=0;i<8;i++)
   {
      sck=0;       //
      byte<<=1;
      sid=CY;      //CY是51特有的,现在用在PIC单片机上要怎么改,有人说用&0X80 可是我还是没有思路.具体要怎么写呢,请指教.
      sck=1;   
   }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
sn516952
1楼-- · 2020-02-10 01:38
回复【12楼】my2009  
-----------------------------------------------------------------------

这样处理起来比较花时间吧,那个位的操作 sid=(byte<<i)&0x80);     这句还是没能理解,为什么把一个8位的赋给1位的,这个过程是怎么样的,为什么是取的8位的最高位呢.
my2009
2楼-- · 2020-02-10 04:42
回复【13楼】sn516952
回复【12楼】my2009   
-----------------------------------------------------------------------
这样处理起来比较花时间吧,那个位的操作 sid=(byte<<i)&0x80);     这句还是没能理解,为什么把一个8位的赋给1位的,这个过程是怎么样的,为什么是取的8位的最高位呢.
-----------------------------------------------------------------------

sid=(byte<<i)&0x80-----------你看看这一句的汇编是几条指令, 别看在C 里只有一条语句。
sid=(byte<<i)&0x80-----------这句编译程序应该将其解析为 "非零则置sid为1"
sn516952
3楼-- · 2020-02-10 09:40
回复【14楼】my2009  
回复【13楼】sn516952
回复【12楼】my2009   
-----------------------------------------------------------------------
这样处理起来比较花时间吧,那个位的操作 sid=(byte&lt;&lt;i)&amp;0x80);     这句还是没能理解,为什么把一个8位的赋给1位的,这个过程是怎么样的,为什么是取的8位的最高位呢.
-----------------------------------------------------------------------
sid=(byte&lt;&lt;i)&amp;0x80-----------你看看这一句的汇编是几条指令, 别看在c 里只有一条语句。
sid=(byte&lt;&lt;i)&amp;0x80-----------这句编译程序应该将......
-----------------------------------------------------------------------

这个语句的意思能理解,但是就是不懂这个过程. 汇编不会用啊.
wlxtx
4楼-- · 2020-02-10 13:31
回复【15楼】sn516952
回复【14楼】my2009   
回复【13楼】sn516952  
回复【12楼】my2009   
-----------------------------------------------------------------------  
这样处理起来比较花时间吧,那个位的操作 sid=(byte&lt;&lt;i)&amp;0x80);     这句还是没能理解,为什么把一个8位的赋给1位的,这个过程是怎么样的,为什么是取的8位的最高位呢.
-----------------------------------------------------------------------
sid=(byte&lt;&lt;i)&amp;0x80-----------你看看这一句的汇编是几条指令, 别看在c 里只有一条语句。
sid=(byte&lt;&lt;i)&amp;0......
-----------------------------------------------------------------------

不是取最高位,8位的赋给1位的结果非0即1
sn516952
5楼-- · 2020-02-10 18:35
 精彩回答 2  元偷偷看……

一周热门 更多>