91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 38KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-15
  • 語言: 其他
  • 標簽: AT24C64??12c5a60s2??

資源簡介

使用STC的12C5A60S2單片機 因為要測試IIC通信協議,研究了好久終于改出來了,本程序適用于AT24c64 E2PROM芯片

資源截圖

代碼片段和文件信息

/*
本程序基于郭天祥《51單片機C語言教程》第188頁改寫,使用STC的12C5A60S2單片機
因為要測試IIC通信協議,研究了好久終于改出來了,本程序適用于AT24c64?E2PROM芯片
需要注意的是:
??????????????24C64與24C02的地址指針長度不同,是16位的指針,而24C02是8位指針
??????????其次就是12c5a60s2的速度很快,需要修改延時函數(經示波器測試)
??????????使用的是11.0592MHZ的晶振,SDA為P3.4???SCL為P3.5引腳
??????????地址是000??即A0?A1?A2都接地???串口波特率為9600可自行修改
功能:隨便往串口發送一個數據(內容無所謂,只要產生串口中斷就行)會返回你寫入EEPROM中的數據

于山西農業大學信息學院雙體系Cat‘s?lab.
?????15.7.9
?如果可以的話本程序使用GPL授權:)
*/
#include?<12c5a60s2.h>
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit?sda=P3^4;
sbit?scl=P3^5;
uchar?Rx_flag=0;?//串口接收標志
uint??RecData;???//串口接收到的數據
uint??SendData;?//串口需要發送的數據
void?delay()?//12c5a60s2單片機?11.0592MHZ時延時4-5us
{
????uchar?ab;
????for(b=1;b>0;b--)
????????for(a=9;a>0;a--);
}
void?start()//IIC起始信號
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void?stop()//IIC停止信號
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void?respons()?//IIC應答信號
{
uchar?i?;
scl=1;
delay();
while?((sda==1)&&(i<250))i++;
scl=0;
delay();

}
void?init() ?//IIC初始化
{
sda=1;
delay();
scl=1;
delay();

}
void?write_byte(uchar?date) //在任意地址?寫一個字節的數據
{
uchar?itemp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();

}
scl=0;
delay();
sda=1;
delay();

}
uchar?read_byte() ? //在任意地址?讀一個字節的數據
{
uchar?ik;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();

}
return?k;
}
void?write_add(uchar?addresshuchar?addressluchar?date)//寫地址,參數為地址高八位和地址低八位還有數據內容
{
start();
write_byte(0xa0);
respons();
write_byte(addressh);
respons();
write_byte(addressl);
respons();
write_byte(date);
respons();
stop();

}
uchar?read_add(uchar?addresshuchar?addressl)//讀地址,參數為地址高八位和地址低八位
{
uchar?date;
start();
write_byte(0xa0);
respons();
write_byte(addressh);
respons();
write_byte(addressl);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return?date;

}
void?Uart_init(void)
{
???TMOD?=?0x20;???????//T1?方式2
???PCON?=?0x00;???????//SMOD?=?0
???SCON?=?0x50; ??????//方式1?8個數據位???
???TH1=0xfd;??????????//波特率為9600?11.0592Mhz
???TL1=0xfd;
???TR1?=?1; ??????????//啟動定時器1
???ES=1;??????????????//開串口中斷
???EA=1;??????????????//開總中斷???????
}
void?main()
{
delay();
init();
Uart_init();?//串口初始化
delay();
write_add(020xAA);?//向EEPROM的0x0002地址寫數據,內容為0xAA可自行修改<----會向上位機串口助手返回的數據
delay();
while(1)
{
/*sda=1; ??//示波器測試延時時間用
delay();
sda=0;
delay();*/

SendData=read_add(02);//Senddata是要發送給上位機的數據
if(Rx_flag)
????{
?SBUF=SendData;???//將數據放入緩沖區
?while(!TI);??????//等待發送完畢
?TI=0;???????????//清中斷
?Rx_flag=0;??????//清除接收標志
}?
}?
}
void?Uart_rec(void)?interrupt?4?using?1 ?//串口中斷服務程序
{
?if(RI)???????????????//接收中斷標志被置位說明串口已經接收到數據
??{
???RI=0;??????????????//清除中斷標志
???RecData=

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件??????17731??2014-05-20?13:09??12c5a60s2.h

?????文件???????9062??2015-07-09?10:06??at24c64

?????文件???????3607??2015-07-09?10:09??at24c64.c

?????文件???????1533??2015-07-09?10:06??at24c64.hex

?????文件?????????47??2015-07-09?10:06??at24c64.lnp

?????文件???????8100??2015-07-09?10:06??at24c64.LST

?????文件??????14224??2015-07-09?10:06??at24c64.M51

?????文件???????9761??2015-07-09?10:06??at24c64.OBJ

?????文件????????401??2015-07-09?10:06??at24c64.plg

????.......?????55634??2015-07-09?10:10??at24c64.uvopt

????.......?????13399??2015-07-09?10:10??at24c64.uvproj

????.......??????5624??2015-07-09?10:06??at24c64_uvopt.bak

????.......?????13429??2015-07-09?10:06??at24c64_uvproj.bak

?????文件???????6376??2009-05-07?14:37??STARTUP.A51

?????文件??????14048??2015-07-09?10:06??STARTUP.LST

?????文件????????749??2015-07-09?10:06??STARTUP.OBJ

????.......?????71272??2015-07-09?10:06??at24c64.uvgui.Administrator

-----------?---------??----------?-----??----

???????????????244997????????????????????17


評論

共有 條評論