历史上的今天
今天是:2025年02月06日(星期四)
2020年02月06日 | 关于PIC+TCA6424程序
2020-02-06 来源:eefocus
最近做了一套PIC+IO扩展芯片TCA6424程序,废话不说,上程序
void main(void) {
System_Init();
wr_IIC(0x8c,0xff,0xff,0xff);
while(1)
{
p0 = rd_IIC(0x80);
p1 = rd_IIC(0x81);
p2 = rd_IIC(0x82);
p0 = 0;
p1 = 0;
p2 = 0;
}
}
void IIC_Init(void)
{
SCL_DIR = 0;
SDA_DIR = 0;
SCL_PIN = 1;
SDA_PIN = 1;
}
void IICstart(void)
{
SCL_DIR = 0;
SDA_DIR = 0;
SDA_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SDA_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
void IICstop(void)
{
SCL_DIR = 0;
SDA_DIR = 0;
SDA_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SDA_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
void IICsend(unsigned char data)
{
unsigned char i=8,n;
SCL_DIR = 0;
SDA_DIR = 0;
for(n=0; n<8; n++)
{
SDA_PIN = 0;
if(data&0x80)
{
SDA_PIN = 1;
}
data = data << 1;
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
}
unsigned char IICreceive(void)
{
unsigned char i=8;
unsigned char data=0;
SCL_DIR = 0;
SDA_DIR = 1;
while(i)
{
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
data<<=1;
data|=SDA_PIN ;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
i--;
}
SCL_PIN = 0;
return(data);
}
void IICreadack(void)
{
SDA_PIN = 0;
SDA_DIR = 1;
if(SDA_PIN == 1)
{
for(;;) ;//NACK
}
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SDA_DIR = 0;
SDA_PIN = 0;
}
void IICsendack(void)
{
SCL_DIR = 0;
SDA_DIR = 0;
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SDA_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
void IICsendNack(void)
{
SCL_DIR = 0;
SDA_DIR = 0;
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SDA_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 1;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
SCL_PIN = 0;
asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
}
//************以下两个函数基于文件夹“TCA6424 SCAN5 51(pudn)”***********//
void wr_IIC(char a,char b,char c,char d)
{
unsigned char command;
IICstart();
command=0x44;
IICsend(command);
IICreadack();
IICsend(a);
IICreadack();
IICsend(b);
IICreadack();
IICsend(c);
IICreadack();
IICsend(d);
IICreadack();
IICstop();
}
unsigned char rd_IIC(char a)
{
unsigned char i,command,com_data;
IICstart();
command=0x44;
IICsend(command);
IICreadack();
IICsend(a);
IICreadack();
IICstart();
command=0x45;
IICsend(command);
IICreadack();
com_data = IICreceive();
IICsendNack();
IICstop();
return(com_data);
}
下一篇:PIC单片机双机异步通信程序详解
史海拾趣
|
1. 熟练掌握数字逻辑的电路知识,知道常用组合逻辑、时序逻辑电路实现的各类器件,了解冒险竞争原理,以及消除的方法。 2. 深刻理解所用FPGA与CPLD器件的硬件架构以及其实现组合与时序的电路的方法; 3. 深刻理解数字逻辑电路设计语言VHDL与Veril ...… 查看全部问答> |
|
我用WINCE5的PROFILE 里的TIME2定时器做了 切换rs485串口 收发 的定时器中断,就是在发送完成后,计算FIFO队列,然后得精确中断(在中断中,切换成收的状态) 目前运行还算是正常。 现在发现一个问题,就是在切换后,对于某些做的不是很好的设备 ...… 查看全部问答> |
|
有没有高手用过1555L芯片,我现在想用把这个芯片连接到at89c5131中,但是我看看多datasheet,它给的典型电路图,好像不是很详细,如果有用过的高手,可否发一下原理图,万谢~~~,在下是菜鸟。学习中。… 查看全部问答> |
|
各位大大,我们是小菜鸟, 最近我们要做一个SRTP的项目,我们决定做 一个捡乒乓球的小车 有前人做过捡网球的小车的 现在就想问问各位,如何实现小车对乒乓球的定位,摄像头?红外? 获取动态图像还是静态JPEG,定位后,驱动捡球 我们对这方面的 ...… 查看全部问答> |
|
平时玩电脑的时候,由于是笔记本,屏幕尺寸比较小,查看股票信息什么的要频繁切换页面很是麻烦,能不能用launchpad做一个单独实时显示股票信息的工具呢,就像再加一台小显示器一样,手边刚好有个5110屏,接口少好操作,立即开工。一、脚位定义:由 ...… 查看全部问答> |




