两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.準(zhǔn)確延時

學(xué)會了上一講的軟件調(diào)試教學(xué),我們現(xiàn)在用軟件調(diào)試出延時很接近1毫秒的代碼:

for(j=115;j>0;j--);

如果要延時1秒,那是不是循環(huán)1000次這條語句呢?

for(i=0;i<1000;i++)
{
    for(j=115;j>0;j--);
}

可是這段代碼在軟件調(diào)試中發(fā)現(xiàn)循環(huán)1000次這個1毫秒的延時語句時卻跟1秒差距有點大(大于5ms對于單片機來說是一個很大的誤差),在《手把手教你學(xué)51單片機》文檔的4.4節(jié)也提到C 語言的延時時間是不能通過程序看出來的,所以我們只能在軟件中繼續(xù)調(diào)試新的延時1秒的代碼。

這里調(diào)試出很接近1秒的延時代碼如下

for(i=0;i<19601;i++)

{

    for(j=5;j>0;j--);

}  

這里需要變量i和j都必須是unsigned int類型才調(diào)試得出準(zhǔn)確延時1秒。


2.LED間隔1秒閃爍

用本教程的開發(fā)板實現(xiàn)LED亮一秒滅一秒閃爍循環(huán)的代碼:

#include <reg52.h> 
sbit LED2  = P0^0;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;

void main()
{  
    unsigned int i,j;//定義兩個16位的變量  
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 

    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************

    while (1)
    {
        LED2=0;//點亮最右端的燈
        for(i=0;i<19601;i++)//延時1s
        {
            for(j=5;j>0;j--);
        }
        LED2=1;//熄滅最右端的燈
        for(i=0;i<19601;i++)//延時1s
        {
            for(j=5;j>0;j--);
        }
    }
}

如果把j定義為unsigned char類型,那這一段延時代碼就不是1秒了,讀者可以測試一下。所以說真的不能用常識來分析代碼呀。

還有筆者發(fā)現(xiàn)這個代碼在實驗現(xiàn)象上有說不出的怪樣,如果大家拿手機的秒表計時與燈的閃爍對比,即使我們給單片機上電的瞬間立馬同步按下手機秒表計時按鍵,發(fā)現(xiàn)剛開始燈的閃爍與計時器還同步,后面過了幾秒發(fā)現(xiàn)燈的狀態(tài)跳變與秒表的數(shù)字跳變不同步了,軟件仿真發(fā)現(xiàn)的確循環(huán)一次之后時間會加多。

可如果我們像下面這樣三種寫法led17

僅在后面加多一條簡單的語句,上面所說的現(xiàn)象就消失了,也就是燈的跳變和計時的數(shù)字跳變是同步的,這個問題筆者還在查找原因,我們姑且先放一下這個糾結(jié),繼續(xù)往下學(xué)習(xí)先。

此時讀者需要自己加入語句后拿手機秒表計時觀察,看看是否燈的跳變與秒表數(shù)字的跳變同步,在此之前要保證手機的計時與單片機上電時間同步。

點贊(2)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)