亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? i2c.v

?? FPGA EP2C5Q288C8 I2C 原碼,測試OK 打開即用.
?? V
?? 第 1 頁 / 共 2 頁
字號:
/*
I2C總線是一種非常常用的串行總線,它操作簡便,占用接口少。本程序介紹操作一個I2C總線接口的EEPROM AT24C08
的方法,使用戶了解I2C總線協議和讀寫方法。

實驗過程是:按一下實驗板上的KEY1鍵,計數器加1計算,并把計算結果寫入EEPROM,并同時顯示在數碼管最低位,
按KEY2把EEPROM的數據讀取出來,并顯示在數碼管上。

說明:由于按鍵存在抖動,內部計數器的值偶爾可能與寫入到EEPROM的值不相同,
      程序剛啟動時請先長按reset按鍵大約1秒左右,以進行初始化。

為了更好的理解程序,用戶應該仔細閱I2C總線時序規范以及AT24C08數據手冊
*/

module i2c(clk,rst,data_in,scl,sda,wr_input,rd_input,en,seg_data);

input clk,rst;
output scl;  //I2C時鐘線
inout  sda;  //I2C數據線
input[3:0] data_in; //撥碼開關輸入想寫入EEPROM的數據
input wr_input; //要求寫的輸入
input rd_input; //要求讀的輸入
output[1:0] en; //數碼管使能
output[7:0] seg_data; //數碼管段數據

wire wr_input;
wire rd_input;

reg[7:0] seg_data;

reg scl;
reg[1:0] en;

reg[7:0] seg_data_buf;
reg[11:0] cnt_scan;
reg sda_buf;//sda輸入輸出數據緩存
reg link;   //sda輸出標志
reg phase0,phase1,phase2,phase3;//一個scl時鐘周期的四個相位階段,將一個scl周期分為4段
//phase0對應scl的上升沿時刻,phase2對應scl的下降沿時刻,phase1對應從scl高電平的中間時刻,phase2對應從scl低電平的中間時刻,
reg[7:0] clk_div;//分頻計數器
reg[1:0] main_state;
reg[2:0] i2c_state;  //對i2c操作的狀態
reg[3:0] inner_state;//i2c每一操作階段內部狀態
reg[19:0] cnt_delay; //按鍵延時計數器
reg start_delaycnt;  //按鍵延時開始
reg[7:0] writeData_reg,readData_reg;//要寫的數據的寄存器和讀回數據的寄存器
reg[7:0] addr;       //被操作的EEPROM字節的地址

parameter div_parameter=125;// 分頻系數,AT24C02最大支持400K時鐘速率

parameter start=4'b0000,  //開始
		  first=4'b0001,  //第1位
		  second=4'b0010, //第2位
		  third=4'b0011,  //第3位
		  fourth=4'b0100, //第4位
		  fifth=4'b0101,  //第5位
		  sixth=4'b0110,  //第6位
		  seventh=4'b0111, //第7位
		  eighth=4'b1000,  //第8位
		  ack=4'b1001,     //確認位
		  stop=4'b1010;    //結束位
		
parameter ini=3'b000, //初始化EEPROM狀態
		  sendaddr=3'b001, //發送地址狀態
		  write_data=3'b010, //寫數據狀態
		  read_data=3'b011, //讀數據狀態
		  read_ini=6'b100; //發送讀信息狀態


assign sda=(link)? sda_buf:1'bz;


always@(posedge clk)
begin
	if(!rst)
		cnt_delay<=0;
	else begin
		if(start_delaycnt) begin
			if(cnt_delay!=20'd800000)
				cnt_delay<=cnt_delay+1;
			else
				cnt_delay<=0;
		 end
	 end
end

always@(posedge clk)
begin
	if(!rst) begin
		clk_div<=0;
		phase0<=0;
		phase1<=0;
		phase2<=0;
		phase3<=0;
	 end
	else begin
		if(clk_div!=div_parameter-1)
			clk_div<=clk_div+1;
		else
			clk_div<=0;
			
		if(phase0)
			phase0<=0;	
		else if(clk_div==99) 
			phase0<=1;
		if(phase1)
			phase1<=0;
		else if(clk_div==24)
			phase1<=1;
		if(phase2)
			phase2<=0;
		else if(clk_div==49)
			phase2<=1;
		if(phase3)
			phase3<=0;
		else if(clk_div==74)
			phase3<=1;
	 end
end


///////////////////////////EEPROM操作部分/////////////
always@(posedge clk)
begin
	if(!rst) begin
		start_delaycnt<=0;
		main_state<=2'b00;
		i2c_state<=ini;
		inner_state<=start;
		scl<=1;
		sda_buf<=1;
		link<=0;
		writeData_reg<=5;
		readData_reg<=0;
		addr<=10;
	 end
	else begin
		case(main_state)
			2'b00: begin  //等待讀寫要求
				writeData_reg<=data_in;
				scl<=1;
				sda_buf<=1;
				link<=0;
				inner_state<=start;
				i2c_state<=ini;
				if((cnt_delay==0)&&(!wr_input||!rd_input))
						start_delaycnt<=1;
				else if(cnt_delay==20'd800000) begin
						start_delaycnt<=0;
						if(!wr_input)
							main_state<=2'b01;
						else if(!rd_input)
							main_state<=2'b10;
				 end
			 end
			2'b01: begin  //向EEPROM寫入數據
				if(phase0)
					scl<=1;
				else if(phase2)
					scl<=0;
			
				case(i2c_state)
					ini: begin   //初始化EEPROM
						case(inner_state)
							start: begin
								if(phase1) begin
									link<=1;
									sda_buf<=0;
								 end
								if(phase3&&link) begin
									inner_state<=first;
									sda_buf<=1;
									link<=1;
								 end
							 end
							first: 
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=second;
								 end
							second:
								if(phase3) begin
									sda_buf<=1;
									link<=1;
									inner_state<=third;
								 end
							third:
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=fourth;
								 end
							fourth:
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=fifth;
								 end
							fifth:
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=sixth;
								 end
							sixth:
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=seventh;
								 end
							seventh:
								if(phase3) begin
									sda_buf<=0;
									link<=1;
									inner_state<=eighth;
								 end
							eighth:
								if(phase3) begin
									link<=0;
									inner_state<=ack;
								 end
							ack: begin
								if(phase0) 
									sda_buf<=sda;
								if(phase1) begin
									if(sda_buf==1) 
										main_state<=3'b000;
								 end
								if(phase3) begin
									link<=1;
									sda_buf<=addr[7];
									inner_state<=first;
									i2c_state<=sendaddr;
								 end
							 end
						 endcase
					 end
					sendaddr: begin  //送相應字節的地址
						case(inner_state)
							first: 
								if(phase3) begin
									link<=1;
									sda_buf<=addr[6];
									inner_state<=second;
								 end
							second:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[5];
									inner_state<=third;
								 end
							third:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[4];
									inner_state<=fourth;
								 end
							fourth:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[3];
									inner_state<=fifth;
								 end
							fifth:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[2];
									inner_state<=sixth;
								 end
							sixth:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[1];
									inner_state<=seventh;
								 end
							seventh:
								if(phase3) begin
									link<=1;
									sda_buf<=addr[0];
									inner_state<=eighth;
								 end
							eighth:
								if(phase3) begin
									link<=0;
									inner_state<=ack;
								 end
							ack: begin
								if(phase0) 
									sda_buf<=sda;
								if(phase1) begin
									if(sda_buf==1) 
										main_state<=3'b000;
								 end
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[7];
									inner_state<=first;
									i2c_state<=write_data;
								 end
							 end
						 endcase
					 end
					write_data: begin //寫入數據
						case(inner_state)
							first: 
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[6];
									inner_state<=second;
								 end
							second:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[5];
									inner_state<=third;
								 end
							third:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[4];
									inner_state<=fourth;
								 end
							fourth:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[3];
									inner_state<=fifth;
								 end
							fifth:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[2];
									inner_state<=sixth;
								 end
							sixth:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[1];
									inner_state<=seventh;
								 end
							seventh:
								if(phase3) begin
									link<=1;
									sda_buf<=writeData_reg[0];
									inner_state<=eighth;
								 end
							eighth:
								if(phase3) begin
									link<=0;
									inner_state<=ack;
								 end
							ack: begin
								if(phase0) 
									sda_buf<=sda;
								if(phase1) begin
									if(sda_buf==1) 
										main_state<=2'b00;
								 end
								else if(phase3) begin
									link<=1;
									sda_buf<=0;
									inner_state<=stop;
								 end
							 end
							stop: begin
								if(phase1)
									sda_buf<=1;
								if(phase3) 
									main_state<=2'b00;
							 end
						 endcase
					 end
					default:
						main_state<=2'b00;
				 endcase
			 end
			2'b10: begin  //讀EEPROM
				if(phase0)
					scl<=1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频每日更新| 欧美精品一区在线观看| 日韩区在线观看| 日本午夜精品一区二区三区电影 | 欧美v日韩v国产v| 国产在线精品免费| 国产欧美1区2区3区| 日本久久电影网| 天堂av在线一区| 日韩精品一区二区三区在线观看| 成人午夜av电影| 尤物视频一区二区| 欧美一级电影网站| 91精品国产乱码久久蜜臀| 国产乱码精品一品二品| 午夜激情综合网| 国产欧美精品在线观看| 欧美激情一区二区三区不卡| 欧美系列日韩一区| 国产一区三区三区| 丁香啪啪综合成人亚洲小说| 一本色道久久综合狠狠躁的推荐| 美国十次综合导航| 一区二区三区四区视频精品免费| 26uuuu精品一区二区| 欧美日韩在线直播| 91免费观看视频| 久久99蜜桃精品| 日日嗨av一区二区三区四区| 麻豆成人91精品二区三区| 成人免费精品视频| 欧美日韩免费观看一区二区三区| 蜜桃av一区二区| 成人性生交大片免费| 欧美精品久久一区二区三区| 欧美中文一区二区三区| 91免费版pro下载短视频| 欧美日韩在线免费视频| 国产午夜亚洲精品羞羞网站| www久久久久| 伊人一区二区三区| 国v精品久久久网| 国产精品一品二品| 欧美日高清视频| 亚洲私人黄色宅男| 国产又粗又猛又爽又黄91精品| 91蝌蚪porny成人天涯| 日韩欧美国产麻豆| 亚瑟在线精品视频| 18涩涩午夜精品.www| 日韩精品中文字幕一区二区三区 | 日韩一区二区三区四区| 国产精品久久午夜夜伦鲁鲁| 久久亚洲影视婷婷| 日韩精品国产欧美| 色婷婷av一区二区三区大白胸| 日韩欧美卡一卡二| 亚洲成人精品影院| 色呦呦一区二区三区| 欧美国产日韩a欧美在线观看| 日本人妖一区二区| 91精品国产91综合久久蜜臀| 亚洲免费在线视频| 亚洲综合色婷婷| 热久久一区二区| 国产自产v一区二区三区c| 成人性视频免费网站| 精品久久人人做人人爱| 麻豆国产欧美一区二区三区| 777精品伊人久久久久大香线蕉| 日韩一本二本av| 午夜精品久久久| 精品视频免费在线| 亚洲一区二区三区爽爽爽爽爽| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲午夜免费视频| 老汉av免费一区二区三区| 欧美精品九九99久久| 亚洲成人av资源| 欧美一三区三区四区免费在线看| 无吗不卡中文字幕| 日韩午夜中文字幕| 国产一区二区三区不卡在线观看| 日韩精品一区二区三区视频| 久久精品国产免费| 国产人成一区二区三区影院| 成人黄色在线网站| 欧美日韩精品欧美日韩精品 | 国产精品一区二区三区乱码| 精品国产免费一区二区三区香蕉| 日韩电影在线看| 久久午夜电影网| 99国产精品久久久| 久久久久久久久99精品| 亚洲chinese男男1069| 欧美一三区三区四区免费在线看| 久久精品国产亚洲高清剧情介绍| 久久九九久精品国产免费直播| 成人一区二区三区中文字幕| 一区二区三区加勒比av| 日韩亚洲电影在线| 成人av在线播放网址| 亚洲国产综合91精品麻豆| 日韩欧美一级在线播放| 99久久婷婷国产综合精品 | 日韩午夜激情视频| 国产suv精品一区二区三区| 亚洲欧美激情小说另类| 精品久久久久av影院| av激情成人网| 美女爽到高潮91| 一区二区在线观看视频| 精品国产乱码久久久久久久| 91亚洲精品久久久蜜桃| 九九精品视频在线看| 91精品国产综合久久久久久久| 国产麻豆9l精品三级站| 天天免费综合色| 1024国产精品| 久久久久久久久久久久久久久99| 色屁屁一区二区| 国产做a爰片久久毛片| 亚洲.国产.中文慕字在线| 国产精品久久久久9999吃药| 日韩欧美国产麻豆| 欧美精品第1页| 97aⅴ精品视频一二三区| 精品亚洲porn| 美国精品在线观看| 亚洲成人1区2区| 怡红院av一区二区三区| 国产精品麻豆99久久久久久| 99久久国产综合精品色伊| 久久99精品国产91久久来源| 亚洲高清免费视频| 亚洲三级免费观看| 18涩涩午夜精品.www| 国产精品久久三区| 国产婷婷精品av在线| 久久综合色8888| 91精品一区二区三区在线观看| 日韩av电影一区| 大胆亚洲人体视频| 亚洲成av人片在线| 亚洲欧美偷拍卡通变态| 国产精品久久久久一区二区三区| 亚洲精品一区二区三区在线观看| 91精品国产丝袜白色高跟鞋| 91福利在线免费观看| 欧美在线色视频| 欧美一区二区三区性视频| 欧美日韩亚洲高清一区二区| 欧美在线你懂得| 91精品国产色综合久久不卡蜜臀| 欧美二区在线观看| 337p亚洲精品色噜噜噜| 欧美一级午夜免费电影| 精品国产乱子伦一区| 精品国产一区二区三区久久影院 | 亚洲视频免费在线| 亚洲一区免费在线观看| 伊人色综合久久天天| 五月婷婷综合在线| 蜜臀av亚洲一区中文字幕| 精品在线播放免费| 成人精品国产福利| 色偷偷88欧美精品久久久| 在线观看av一区| 日韩精品一区二区三区四区| 久久无码av三级| 亚洲人成人一区二区在线观看| 亚洲一区二区三区在线看| 男人的天堂亚洲一区| 从欧美一区二区三区| 在线看国产日韩| 欧美成人性福生活免费看| 国产精品久久久久久亚洲伦| 亚洲已满18点击进入久久| 久久国产精品区| 91麻豆精东视频| 欧美成人a视频| 中文字幕在线一区| 亚洲v中文字幕| 国产乱国产乱300精品| 在线免费观看一区| 国产大陆精品国产| 国产乱码精品一品二品| 免费成人小视频| 99天天综合性| 日韩一二三区视频| 亚洲国产精品嫩草影院| 老司机免费视频一区二区三区| 成人短视频下载 | 五月激情综合色| 不卡在线观看av| 91精品国产一区二区三区| 中文字幕一区日韩精品欧美| 美国av一区二区| 欧美精品成人一区二区三区四区| 亚洲国产精华液网站w|