打印

51单片机控制8255

[复制链接]
2365|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ruidi1|  楼主 | 2011-3-8 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
chunyang| | 2011-3-8 12:23 | 只看该作者
看器件手册,然后根据需要自行编制,用途不同程序就不同。

使用特权

评论回复
板凳
zkkov2000| | 2011-3-8 12:25 | 只看该作者
自己写,就当锻炼了。

使用特权

评论回复
地板
ruidi1|  楼主 | 2011-3-9 12:00 | 只看该作者
A,B,C均做输入口 A0——P2.0   A1--P2.1

使用特权

评论回复
5
ruidi1|  楼主 | 2011-3-9 12:36 | 只看该作者
请问控制值怎么写
#define PA XBYTE[0x3ffc] /*PA口地址*/
#define PB XBYTE[0x7ffd] /*PB口地址*/
#define PC XBYTE[0x7ffe] /*PC口地址*/
#define PCT XBYTE[0xffff] /*控制字地址*/

使用特权

评论回复
6
chunyang| | 2011-3-9 23:48 | 只看该作者
控制字和你需要的功能以及电路设计有关,先搞清楚功能需求,再设计相应的电路,看书或器件手册明白了8255怎么用就知道该写什么控制字了。

使用特权

评论回复
7
xiaoing| | 2011-3-10 08:28 | 只看该作者
以前做过用8255驱动电机,你看看,很早以前写的程序,希望有帮助。 8255源程序.rar (20.51 KB)

使用特权

评论回复
8
ruidi1|  楼主 | 2011-3-11 11:12 | 只看该作者
谢谢了!我已经搞明白了!再次感谢

使用特权

评论回复
9
ruidi1|  楼主 | 2011-3-30 09:13 | 只看该作者
现在又有问题了,请大家帮忙,我8255  PA口驱动液晶没有问题,PB口驱动DS12C887时,在读取时间时,先发送DS12C887寄存器地址,例如:0x82,即PB做输出;然后读取DS12C887对应寄存器的数据,即PB做输入,这是读到的还是先前发送的寄存器地址0x82;这是怎么回事,单片机直接控制ds12c887是正常的

使用特权

评论回复
10
ruidi1|  楼主 | 2011-3-30 11:58 | 只看该作者
//向某地址写数据
void DS12C887_Write(unsigned char address,unsigned char  Data)
{       
          DS12C887_CS=0;
          DS12C887_DS=1;
          DS12C887_WR=1;
          DS12C887_AS=1;       
        PCT = 0x80;   //  b  out
          PB = address;
          DS12C887_AS=0;
          DS12C887_WR=0;
        PB = Data;
          DS12C887_WR=1;
          DS12C887_AS=1;
          DS12C887_CS=1;
}
//读某地址的数据
int DS12C887_Read(unsigned char address)
{
          unsigned char tmpData;        
        DS12C887_CS=0;
          DS12C887_AS=1;
          DS12C887_DS=1;
          DS12C887_WR=1;       
        PCT = 0x8d;   //  b  out  
          PB = address;  //写寄存器
        DelayUs(20);
          DS12C887_AS=0;
          DS12C887_DS=0;
//        PB = 0xff;
        PCT = 0x82;   //  B 输入,
//        P0 = PB;   
        tmpData=PB;   //单片机读B口数据,这里读出来的是上面 address,而不是寄存器里面的数
          DS12C887_DS=1;
          DS12C887_AS=1;
          DS12C887_CS=1;
          return(tmpData);
}  //把DS12C887取掉,还是这样,说明是8255的问题

使用特权

评论回复
11
ruidi1|  楼主 | 2011-3-31 09:08 | 只看该作者
没人知道啊?

使用特权

评论回复
12
ruidi1|  楼主 | 2011-4-1 12:55 | 只看该作者
PCT = 0x8d;    和PCT = 0x82;  设置是不是有问题?请高手指教

使用特权

评论回复
13
ruidi1|  楼主 | 2011-4-12 16:36 | 只看该作者
现在PA 口好了,PB口也好了,都是方式0,但是 PC0~PC3 口做单独的输出时,均不行

使用特权

评论回复
14
ruidi1|  楼主 | 2011-4-12 16:39 | 只看该作者
PCT = 0X80;//全输出 PC = 0x0a; PC口没有反应
直接对PC口置位; PCT = 0x01;(PC0输出高电平,这时也没反应)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

85

帖子

0

粉丝