新手请教: PIC 如何定义使用bit型的数据

2020-02-08 12:20发布

#include<pic.h>
__CONFIG(0x3B31);
#define uchar unsigned char
#define uint unsigned int
uint i_data;
bit sid;

void main()
{
       
        TRISD=0;
        i_data=0;
        while(1)
        {
                sid=1;
                i_data=0x8f;
          //sid=(i_data&0x80);
                PORTD=sid;
      //PORTD=i_data;
        }
}




附 WATCH  (原文件名:未命名.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
surf_131
1楼-- · 2020-02-08 17:43
我一般把这样的变量改成unsigned char,除去资源多耗费一些,其它没有什么问题。
sn516952
2楼-- · 2020-02-08 18:08
有问题啊.  我这个程序里面这个SID是串口12864的数据线的引脚,只有 0和1的变化,如果是char型的  8位的怎么放的进去.
yklstudent
3楼-- · 2020-02-08 18:24
#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();
    }
}
surf_131
4楼-- · 2020-02-08 23:59
回复【2楼】sn516952  
有问题啊.  我这个程序里面这个sid是串口12864的数据线的引脚,只有 0和1的变化,如果是char型的  8位的怎么放的进去.
-----------------------------------------------------------------------

PIC一般的CHAR型变量都对应内存一个字节,你可以将这个字节LSB的比特当作逻辑变量对待。
另外,从你程序里,没有那个sid与缺省的I/O脚关联的定义,不会有相应动作。可以这样预定义:

#define sid RD1

这样就用只有两个状态(其实还有高阻关闭)的特定引脚表征了那个“比特变量”。你只要确实连接了这个引脚。要注意一下输出与输入必须分别写
TRISD1=0;

TRISD1=1;
sn516952
5楼-- · 2020-02-09 02:55
 精彩回答 2  元偷偷看……
surf_131
6楼-- · 2020-02-09 08:35
i_data&0x80

的意思就是char型(或int型)变量i_data和一个b10000000的常数进行“与”运算,当然只有两个结果。

再说,你的程序来自mchp吗?如果不是,谁写的你问谁去。

一周热门 更多>