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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

输出毫秒_自学单片机第十三篇上:单点输出

發(fā)布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 输出毫秒_自学单片机第十三篇上:单点输出 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)注一下,更多精彩等著你!

打開之前的工程,當(dāng)然新建也可以,具體步驟看之前的文章就行。因為是學(xué)習(xí),所以也用不著總是新建工程,起名起一大堆,接下來,除非要用兩個執(zhí)行文件,只要是單獨的程序,我們就用這個工程就好了。

打開工程,上回是測試了軟件和硬件,都沒有問題。我們不用開發(fā)板,自學(xué)從簡單入手,不用考慮譯碼器和功率放大。對于已經(jīng)入門的,可能有點簡單,但我想對于初來乍到的伙伴,還是慢慢來,別急。技術(shù)這碗飯,不論是不是為了掙錢,都要穩(wěn)扎穩(wěn)打。越快越難學(xué)會。

之前的程序頭文件留著。如果想明白,為什么非要用頭文件,不寫行不行?我會再寫一篇文章,講一下原因。包括程序中的一些關(guān)鍵字。

這回咱來試一個控制單個IO口的操作。我們僅操作一個IO口,其它的不變。這里選擇P1.0這個口。

程序還是我們首次測試的程序,之前運行過一次,這回我們對它作些改動,讓它進(jìn)行自動變換。

這就要用到一個延時函數(shù)了。咱說的延時不是定時器,就是讓程序作一定時間的等待。

我們先說下芯片是如何運行的。晶振是芯片的心跳,由于芯片做出來后,工藝原因,程序運行的最小時間是12個心跳,就是一個機(jī)器周期。相當(dāng)于精確振12下,程序動一下,而一個程序語句,要想完成運算,就平均要4個機(jī)器周期,當(dāng)然也有一個周期的,咱不細(xì)看。研究基礎(chǔ)結(jié)構(gòu)留給以后學(xué)的上路了再說。

1/(12Mhz/12)=1/1M=10∧-6秒。

1秒=10∧3毫秒=10∧6微秒

由上推算看出,1個機(jī)器周期就是1微秒,所以完成一個運算是4微秒。我們假設(shè)要延時0.5秒,就要有:

0.5*10∧6/4=12500。

也就是大約1萬步,我們寫個1萬,讓它一直減到0,就是1萬步。減的過程就相當(dāng)于延時了,因為程序光在那兒算數(shù)了,啥也干不了,算完才能干其它的。這個算的過程就是延時的過程。

原理有了,接下來寫程序,首先我們測試時的程序不動,僅需要添加延時部分就可以了。

延時程序代碼如下,寫完后記得編譯一下,如果是語法錯誤,程序會幫你找到。我們要做到0錯誤,0警告。這樣程序輸出時才不會出現(xiàn)不必要的問題。減少自己調(diào)試的時間。

然后,由于是延時,我們可以通過keil的仿真分步運行,查看一下我們運行的時間是否合適。首先單擊第三行那個小錘子一樣的圖標(biāo),進(jìn)入設(shè)置,然后點開仿真選項,我們把晶振頻率修改就可以了,改為11.05692.

修改完成后,我們單擊右側(cè)的紅色的debug按鍵,進(jìn)入調(diào)試模式。

進(jìn)入后,在LED程序前,單擊左鍵,設(shè)置斷點。出現(xiàn)小紅點就是設(shè)置成功。

接著先單擊復(fù)位按鍵,然后再單擊運行按鍵,單擊一下就可以了,它會運行到第一個斷點停下等待。

出現(xiàn)的兩個小三角就是說明程序此時等待在這里,左側(cè)的列表顯示的是內(nèi)部數(shù)據(jù),我們看下倒數(shù)第二行sec,這是時間。程序從開始到第一個語句的輸出,用時0.00048秒。我們再次單擊運行按鍵,觀察時間變化。

此時運行到了第二個語句,我們查看時間從0.00048變成了0.087,說明一個延時用了0.087秒,這個跟我們假想的0.5秒有點遠(yuǎn)啊,我們簡單計算下頻率1/0.087=11赫茲,先不管,我們用軟件仿真一下試試。仿真發(fā)現(xiàn),閃爍一下就沒了,我們用示波器看下什么情況。

這個豎著一格是100毫秒,也就是0.1秒,我們從上圖中可以看出,每兩個黃色的豎線之間的間隔大致就是一格如果細(xì)看,0.8格也是差不多的。就相當(dāng)于0.08秒。跟我們的程序仿真基本一致,說明我們的延時函數(shù)延時時間不夠,為什么會出現(xiàn)這種情況?

因為程序在計算加減法的時間是速度比較快的,也就是說,他算加減根本不用四個機(jī)器周期。我們不管幾個周期了。現(xiàn)在是0.08秒,那么,需要0.5秒,就是說需要大致六倍,程序中需要60000。咱們更改后再次仿真試下。

需記得,更改程序需要退出仿真,還是單擊紅色的debug就可退出了,更改后,需要先編譯,再進(jìn)入debug,不然程序雖然更改了,但是可執(zhí)行文件還是原來的舊的,就運行不出更改后的效果。

這次就是0.5秒了吧。

通過軟件仿真也說明了情況

示波器上也是5格一個脈沖,基本可以了。但是此時我們發(fā)現(xiàn),燈并沒有預(yù)想中的亮起,依然一閃而逝。我們看下示波器,發(fā)現(xiàn),高電位也是一根根 的細(xì)線,幾乎沒有時間,什么情況呢?這就是很多同學(xué)學(xué)習(xí)初期經(jīng)常會發(fā)生的,在程序中,我們的賦值是在最前邊,單片機(jī)是順序運行的,當(dāng)他運行完第一個延時語句時,i已經(jīng)從60000減為0了,這時再運行下一個延時語句時,就會直接判斷等于0,跳出函數(shù)。所以就是一閃而逝。或者看不到發(fā)光。如何解決?

我們需要增加一個變量或者使用另一種循環(huán)體。簡單的先增加一個變量j,讓他也等于60000。再仿真一下。

仿真后,波形就變成了0.5秒為5V,0.5秒為0V,這是可以看到,LED0.5秒亮,0.5秒滅。跟我們預(yù)期的一致了。

至此,程序調(diào)整結(jié)束了如果想查看視頻的可以后臺回復(fù)電氣,關(guān)注后在單片機(jī)選項中點擊視頻觀看。

還有硬件仿真運行,大家自己可以動手試試。問題出現(xiàn)不要氣餒,因為我們不是什么都會,出現(xiàn)錯誤是肯定的,更改的過程才是學(xué)習(xí),如果一帆風(fēng)順,那最終只會是一知半解。

如果有不懂或者問題可以留言或私信。

更多多內(nèi)容,歡迎關(guān)注百家號:小亮談電氣。微信公眾號:電氣學(xué)苑。

總結(jié)

以上是生活随笔為你收集整理的输出毫秒_自学单片机第十三篇上:单点输出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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