日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)

發(fā)布時(shí)間:2023/12/20 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、中微單片機(jī)燒錄與使用
    • 編譯軟件
    • 燒錄軟件
    • 下載地址
    • 燒錄軟件
  • 二、模擬IIC
  • 三、邏輯分析儀下的時(shí)序


一、中微單片機(jī)燒錄與使用

編譯軟件

中微所使用編譯軟件為SCMCU_IDE,不過個(gè)人不推薦使用這個(gè)軟件寫代碼(十分不好用,不能跳轉(zhuǎn),只能全部搜索一個(gè)個(gè)查,而且不能替換),大家可以利用VScode打開代碼項(xiàng)目文件(直接拖入桌面VScode圖標(biāo)或者打開VScode再打開項(xiàng)目文件),VScode永遠(yuǎn)的神。

燒錄軟件

燒錄軟件是SCMCU WRITER,買個(gè)中微的燒錄器直接接好線燒錄即可(每次編譯完會提醒你代碼改變了)

下載地址

中微官網(wǎng)是:https://www.mcu.com.cn(順帶提一嘴,好牛皮的域名)
進(jìn)入他的支持界面,開發(fā)工具,規(guī)格書,DEMO什么的應(yīng)有盡有。

燒錄軟件

在官網(wǎng)下載好軟件之后安裝即可,進(jìn)入文件夾即可看到編譯軟件。

二、模擬IIC

雖然硬件IIC運(yùn)行速度很快,但是由于單片機(jī)性能受限,并不是所有單片機(jī)都有硬件IIC,軟件IIC模擬IIC協(xié)議通信,進(jìn)行讀寫操作,我以中微SC8F5771單片機(jī)為例,利用其RB0和RB1口分別作為SDA和SCL口。此處我僅給出大概模板。

void iic_init(void);//iic初始化,調(diào)GPIO,也就是選用的sda和scl口,由于最開始要輸出,所以設(shè)置為輸出模式,iic通信最開始都是高電平 void iic_deinit(void);//有初始化肯定有取消初始化,將sda和scl設(shè)置為輸入模式 void iic_write(unsigned char dev_addr, unsigned char reg_addr, unsigned char date)//iic寫入,最為關(guān)鍵的一步,把控協(xié)議主體思路 {iic_start();delay_us();write_iic_byte(dev_addr & 0xFE)//iic的地址位最后一位是讀寫方式,所以是與0xFE,如果忘了就去查一查iic_wait_ack();//等待應(yīng)答delay_us();write_iicbyte(date);//地址完了就輪到數(shù)據(jù)iic_wait_ack();//等待應(yīng)答delay_us();iic_stop();//一次數(shù)據(jù)寫入完成,停止通信 } void iic_start(void);//開始iic時(shí)需要scl和sda置高,然后sda拉低,表明開始,然后再scl拉低,好讓sda可以拉高或保持低作為檢測的數(shù)據(jù)。 void iic_stop(void);//停止時(shí)需要sda和scl都置高,滿足下一次通信的起始狀態(tài) void write_iic_byte(unsigned char iic_byte)//一個(gè)很經(jīng)典的寫法 {unsigned char i=8;unsigned char temp;unsigned char data;data = iic_byte;iic_sclk_clr();while(i--){temp=data>>7;data<<1;if(temp){iic_sdin_set();}else{iic_sdin_clr();}iic_sclk_set();delay_3us();iic_sclk_clr();delay_3us();} } void iic_wait_ack(void);//進(jìn)行應(yīng)答

三、邏輯分析儀下的時(shí)序

為了讓IIC通信更快(該芯片晶振是16MHz的),為了驗(yàn)證其置高低電平和nop、以及空函數(shù)調(diào)用時(shí)間,我利用邏輯分析儀,在while循環(huán)里面寫了如下代碼,觀測到的時(shí)序如圖所示。

sclk = 1;//delay_us是空的,里面什么都沒有,此處只是對比在此單片機(jī)中空函數(shù)和nop區(qū)別時(shí)間究竟相差多少delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();delay_us();sclk = 0;NOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25usNOP();//0.25us

我們可以很清楚的看到高電平之后延時(shí)20個(gè)空函數(shù),再低電平,執(zhí)行20個(gè)nop指令,最終顯示一個(gè)周期內(nèi),高電平持續(xù)33us,低電平持續(xù)6.25us,后續(xù)又將20個(gè)空函數(shù)和nop改為1個(gè)空函數(shù)和1個(gè)nop,以及不加n空函數(shù)和nop的測試,可以大致得出,置一次高低電平需要2us,一個(gè)nop指令花費(fèi)0.2us-0.25us,一個(gè)空函數(shù)調(diào)用大致在1.2us。
由于時(shí)間關(guān)系我并沒有去驗(yàn)證太多,測出結(jié)果可能也不太嚴(yán)謹(jǐn),學(xué)過匯編的同學(xué)知道,調(diào)用函數(shù)時(shí)先跳轉(zhuǎn)再返回,以51匯編為例,不同位置的函數(shù)使用對應(yīng)不同的跳轉(zhuǎn)指令,范圍越大的跳轉(zhuǎn)指令耗費(fèi)時(shí)間也更久,由于我是跨文件調(diào)用,應(yīng)該是對應(yīng)匯編中的LCALL長跳轉(zhuǎn),并且RET返回,所以花費(fèi)nop指令5-6倍的時(shí)間似乎也合理(nop本身就只占一個(gè)時(shí)鐘周期)。

以上為個(gè)人分析,無法確定其正確性,僅憑客觀數(shù)據(jù)以及主觀猜測,如有錯(cuò)誤,請您指正。
非常感謝各位的觀看!

總結(jié)

以上是生活随笔為你收集整理的中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。