关于PIC+TCA6424程序

发布者:EternalSmile最新更新时间:2020-02-06 来源: eefocus关键字:PIC  TCA6424程序  IO扩展 手机看文章 扫描二维码
随时随地手机看文章

最近做了一套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  TCA6424程序  IO扩展 引用地址:关于PIC+TCA6424程序

上一篇:PIC18F4520定时器初值设置
下一篇:PIC单片机双机异步通信程序详解

推荐阅读最新更新时间:2024-11-12 06:11

PIC单片机的指针
PIC单片机的 RAM与ROM是分开的, 如果定义成这样 char *json_char = { vvvv : chen } ; 可能就会编译得过,但是运行有问题, 从文字上分析,是定义了一个 RAM空间的指针,指向了一个ROM 空间的字符串。 // char json_char = { vvvv : chen } ; // char json_key = vvvv ; 如果改为数组的方式,就不会有问题,因为 两个都在RAM 的空间进 strcpy(json_char_ram,json_char);
[单片机]
pic 16 操作esp8266
unsigned char AT = ATrn ; // 联机指令,返回 OK unsigned char wifi_mode = AT+CWMODE=2rn ; // 设置ESP8266的工作模式,返回 OK 或者 no change unsigned char wifi_cipmux = AT+CIPMUX=1rn ; unsigned char cipserver = AT+CIPSERVER=1,8080rn ; const char wifi_cwsap = AT+CWSAP= Westinghouse , 8888888
[单片机]
PIC18F458控制数码管显示1~8数字程序
本程序是基于PIC18F458控制LED数码管显示1~8数字的C语言程序,笔者也是刚刚学习PIC单片机,也是和大家一起学习交流吧!不多说了,先贴程序: #include p18f458.h static volatile int table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};//段码 volatile unsigned char data; /*初始化子程序*/ void initial() { TRISA=0x00; /*A口设置为输出*/ TRISC=0
[单片机]
PIC单片机之16C84单片机介绍
  PIC16C84是8位CMOS EEPROM单片机。它有高性能的类似于RISC 的指令,共有35条单字节的指令,所有的指令除程序分支指令需要两个指令周期外,都只需要一个指令周期。当主振频率为10MHZ时一个指令周期为400ns。程序指令的宽度为14位,在芯片内有1K×14的EEPROM程序存储器 。   数据的宽度为8位,在芯片内有36×8的静态RAM的通用寄存器,64×8的EEPROM的数据存储器。8级深度的硬堆栈。具有直接、间接、相对寻址方式。有4个中断源;外部RBO/INT引脚;TMRO计时器溢出,PORTB 7: 4 引脚上信号的改变;数据写入EEPROM完成。   数据存储器的擦/写可达1000000次,数据的保
[单片机]
PIC16F877A初学之定时器中断篇
程序功能:让RC口的八个灯亮65MS灭65MS采用定时器0中断来完成 程序如下: tmr0 equ 01h pcl equ 02h status equ 03h option_reg equ 81h i NTC on equ 0bh portc equ 07h trisc equ 87h tmr0_b equ 0 w equ 0 f equ 1 rp0 equ 5 t0if equ 2 w_temp equ 7fh portc_b equ 23h flag equ 24h
[单片机]
基于PIC32的医院新生婴儿防盗系统设计
1项目概述 研究内容 本项目主要是完成具有防错抱、防被偷及门禁功能的新生婴儿防盗系统研究与实现,具体工作包括以下部分: 系统基本功能: 建立主动式电子标签(纽扣电池供电); 实现对电子标签识别与应答的阅读器; 研究PIC32单片机的中心处理硬件的开发; 在相关的出口建立检测器; 建立异常情况处理机制,例如婴儿标记被破坏,标记检测不到,婴儿进去非法区域等,系统对于相应的情况进行相关的处理; 扩展功能: 实现与医院网络连接,并和医院的包围中心进行联动; 可以加入电子温度感应,对新生婴儿进行体温测量,防止婴儿发烧或者低烧,发现较晚引起不良的结果。 1.2开发背景 无线射频识别(RFID)
[单片机]
基于<font color='red'>PIC</font>32的医院新生婴儿防盗系统设计
PIC单片机开发板之独立键盘扫描C语言代码
/* 为自已写的独立键盘扫描 犯的错:unsigned密写成了unsigner一直提示找不到a,b PORTD0=1;不行,要写成PORTD=0x01;才可以,如果一定要写,应写为RD0=1; PORTD=0x03;不是第三个灯亮,而是0000 0011是两个灯亮 PORTD=0x8则是0000 1000是第4个灯亮。。。。。出错因原进制转化,刚开始写程序进制转化混掉了。 */ #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); const unsigned char table = {0x3f,0
[单片机]
<font color='red'>PIC</font>单片机开发板之独立键盘扫描C语言代码
基于PIC16C72单片机的空调控制系统的研制
  热泵式分体壁挂空调以其优越的性能,已越来越被广大家庭所选用,其功能更是日新月异,而对其功能的提高起核心作用的其控制系统。本文介绍一种基于PIC16C72控制的空调控制系统设计方法。   该系统具有制冷、制热、除湿、自动4种工作模式,包括定时、睡眠、风向、智能化霜、应急运转、试运转以及5种可调室内风速等控制功能;在定时开机时,可根据访间温度作智能判断,自动调整定时开机时间,避免开机时太冷或太热;另外,可对设定温度和房间温度两种温度的10个温度值进行同时指示,以及完整的抗干扰和系统保护功能。   本系统硬件简单可靠,软件具有更完善的控制功能和抗干扰能力。系统具有很高的性能价格比。   1 控制器原理   系统CPU根据遥控
[单片机]
基于<font color='red'>PIC</font>16C72单片机的空调控制系统的研制
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved