请教高手 这段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条回答
langton
1楼-- · 2020-02-09 06:51
 精彩回答 2  元偷偷看……
yklstudent
2楼-- · 2020-02-09 11:53
#include<pic.h>

volatile bit DIN @ (unsigned)&PORTC*8+0;
volatile bit CS  @ (unsigned)&PORTC*8+1;
volatile bit CLK @ (unsigned)&PORTC*8+2;

void WriteByte(uchar dat)
{
   uchar i;
   for(i=0;i<8;i++)
   {
      CLK = 0;
      NOP();
      DIN = ((dat<<i)&0x80)?1:0;
      CLK = 1;
      NOP();
    }
}
gwdong
3楼-- · 2020-02-09 12:14
可以把8-BIT值传给1-BIT变量,传的是BIT0
sn516952
4楼-- · 2020-02-09 17:54
回复【8楼】yklstudent  无敌电子枪
#include&lt;pic.h&gt;
volatile bit din @ (unsigned)&amp;portc*8+0;
volatile bit cs  @ (unsigned)&amp;portc*8+1;
volatile bit clk @ (unsigned)&amp;portc*8+2;
void writebyte(uchar dat)
{
   uchar i;
   for(i=0;i&lt;8;i++)
   {
      clk = 0;
      nop();
      din = ((dat&lt;&lt;i)&amp;0x80)?1:0;
      clk = 1;
      nop();
    }
}

-----------------------------------------------------------------------

volatile       bit        RC0                @ ((unsigned)&PORTC*8)+0;
volatile       bit        RC1                @ ((unsigned)&PORTC*8)+1;
volatile       bit        RC2                @ ((unsigned)&PORTC*8)+2;

    这个在PIC16F877.H里面已经定义过了,是不是不用再写  volatile bit din @ (unsigned)&amp;portc*8+0;  来定义了.
直接  SID=RC0;  也一样能用吧?
yklstudent
5楼-- · 2020-02-09 19:22
个人习惯吧
我习惯这样重新定义我想要的名字
直观啊
还有 你也可以直接宏定义也可以的
#define SID RC0
这个也行
my2009
6楼-- · 2020-02-09 22:45
 精彩回答 2  元偷偷看……

一周热门 更多>