完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#define SDA_1 P1OUT |= BIT7 #define SDA_0 P1OUT &=~ BIT7 #define SCL_1 P1OUT |= BIT6 #define SCL_0 P1OUT &=~ BIT6 #define SDA_out P1OUT |= BIT7 #define SDA_in P1OUT &=~ BIT7 unsigned char Readword[12]; void init_clk(void) { unsigned char j; do { IFG1 &=~ OFIFG; for( j=10 ; j>0 ; j--) { _NOP(); } } while((IFG1&OFIFG)!=0); P1DIR |= BIT6+BIT7; P3DIR |= BIT5; P3OUT &=~ BIT5; } void Delay(void) //Delay { unsigned char t; for(t=0;t<15;t++) _NOP(); } void Long_Delay(void) //Delay { unsigned char t; for(t=0;t<200;t++) _NOP(); } void Start(void) //Start { SDA_out; SCL_1; _NOP(); SDA_1; Delay(); SDA_0; Delay(); SCL_0; Delay(); } void Stop(void) //Stop { SDA_0; Delay(); SCL_1; Delay(); SDA_1; Delay(); } void ACK(void) //ACK { SDA_0; SCL_0; Delay(); SCL_1; Delay(); SCL_0; Delay(); SDA_1; Delay(); } void NACK(void) // NOT ACK { SDA_1; Delay(); SCL_1; Delay(); SCL_0; Delay(); SDA_0; Delay(); } void Write1(void) //Write a bit : 1 { SDA_1; Delay(); SCL_1; Delay(); SCL_0; Delay(); } void Write0(void) //Write a bit : 0 { SDA_0; Delay(); SCL_1; Delay(); SCL_0; Delay(); } void Writebyte(unsigned char Wchar) //写一个字Wchar { unsigned char i; for(i=0;i<8;i++) { if(Wchar&0x80) Write1(); else Write0(); Wchar<<=1; } SDA_1; Delay(); } unsigned char CheckACK(void) //receive ACK { unsigned char flag; //SDA_1; Delay(); SCL_1; Delay(); SDA_in; _NOP();_NOP(); flag = P1IN&BIT7 ; //read SDA SCL_0; Delay(); SDA_out; if(flag) return 0; else return 1; } unsigned char Readbyte(void) { unsigned char rchar=0 ,i,flag; SCL_0; Delay(); for(i=0;i<8;i++) { SDA_in; Delay(); SCL_1; Delay(); flag=P1IN&BIT7; rchar<<=1; if(flag) rchar |= 0x01; _NOP(); // SDA_out; // Delay(); SCL_0; Delay(); } SCL_0; Delay(); return rchar; } void WriteNbyte(unsigned char address,unsigned char dataaddr,unsigned char *buff,unsigned char n) { unsigned char i; Start(); Writebyte(address); //find eeprom if(!CheckACK()) {Stop();return ;} Writebyte(dataaddr); //find unit address if(!CheckACK()) {Stop();return ;} for(i=0;i Writebyte(buff); if(!CheckACK()) {Stop();return ;} } Stop(); Delay(); } void ReadNbyte(unsigned char address,unsigned char dataaddr,unsigned int n) { unsigned char i; Start(); Writebyte(address); //find eeprom if(!CheckACK()) {Stop();return ;} Writebyte(dataaddr); //find unit address if(!CheckACK()) {Stop();return ;} Start(); Writebyte(0xaf); //read if(!CheckACK()) {Stop();return ;} for(i=0;i Readword=Readbyte(); ACK(); } Stop(); Delay(); } void main(void) { unsigned char write[9],i; for(i=0; i<8; i++){ write =49+i; } WDTCTL = WDTPW + WDTHOLD; init_clk(); // P1SEL = 0xc0; P1.6,7= SCL&SDA while(1) { //write WriteNbyte(0xae,0x00,write,2); Long_Delay(); //read ReadNbyte(0xae,0x00,2); Long_Delay(); Long_Delay(); } } |
|
相关推荐
13个回答
|
|
单片机用的MSP430g2553,求帮忙·
|
|
|
|
无应答的话与程序的关系不太大吧·可是硬件的问题我都想了一遍了,实在想不出了
|
|
|
|
|
|
|
|
谢谢你啊,我试试,我只是在开始的时候配置了DIR--P1DIR |= BIT6+BIT7;不明白这一点,我去调试看看波形。
|
|
|
|
设置IO口方向是
#define SDA_out  1DIR |= BIT7 #define SDA_in  1DIR &=~ BIT7,延时用比较精准的延时, 例如下面这个,好用,而且准确, #define CPU_F ((double) 8000000.0)//当前CPU主频 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)), 然后看时序图。 |
|
|
|
谢谢啦,这个延时蛮好用啊
|
|
|
|
还是不行啊各位大神,第九个时钟脉冲就是不应答啊,大的问题是在找不到了
|
|
|
|
艾科·还是不行啊,第九个时钟脉冲就是不应答啊,软硬件·大的问题实在找不到了咋办呢
|
|
|
|
艾科·还是不行啊,第九个时钟脉冲就是不应答啊,软硬件·大的问题实在找不到了咋办呢
|
|
|
|
|
|
|
|
我是找了一下原子的程序没找到···才求救的··谢谢你啦··
|
|
|
|
|
|
|
|
啊·谢谢你啦·我是这里的新人·不熟悉环境·谢谢关照
|
|
|
|
只有小组成员才能发言,加入小组>>
3056个成员聚集在这个小组
加入小组2987 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3715 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2367 浏览 1 评论
4835 浏览 1 评论
2595 浏览 1 评论
1633浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3715浏览 2评论
2988浏览 1评论
1828浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 10:45 , Processed in 1.666222 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号