欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4878|回復: 1
收起左側

單片機+HC-SR04超聲波測距串口顯示程序 帶詳細注釋

[復制鏈接]
ID:696077 發表于 2020-4-24 19:44 | 顯示全部樓層 |閱讀模式

使用超聲波型號SR04/SR05


主要代碼如下:(非完整!!!)

#include <AT89X51.H>
#include <intrins.h>
#include <stdio.h>

void InitIRQ(void);
void Conut(void);
void delayms(unsigned int ms);
void StartModule();        

#define uchar unsigned  char
#define uint  unsigned   int  
#define RX  P1_1
#define TX  P1_2

unsigned int  time=0;
float         Distance=0;//距離
bit           flag =0;   //中斷溢出標志
        
/********************************************************/
void main()
{
        InitIRQ();
        while(1)
  {
         StartModule();
         while(!RX);                //當超聲波模塊接收口輸出低電平則等待
         TR0=1;                //開啟計數
         while(RX);                        //當RX為1計數并等待
         TR0=0;                                  //關閉計數
   Conut();                          //讀取定時器的值,計算
         delayms(60);        
        }
}

/*********** 中斷寄存器設置初始化 ***********/
void InitIRQ(void)
{
        TMOD=0x21;  //T/C工作方式寄存器 0010 0001
                    //T0 :GATE=0; 定時模式; 工作方式1,16位T/C; 計數器溢出中斷,用于判定超出測距范圍
                    //T1 :GATE=0; 定時模式; 工作方式2,8位可自動重載T/C; 用于串口通信 波特率發生器
        SCON=0x50;  //串行口控制寄存器  0101 0000
                    //SM0 SM1:工作方式1;10位異步收發;波特率由定時器T1控制
                    //SM2: 多機通信控制位,方式0和方式1為非多機通信,設置0
                    //REN: 串行口接收允許位,允許串行口接收數據
                    //TB8:方式0和方式1中該位不用
                    //RB8: 方式0和方式1中該位不用
                    //TI: 發送中斷標志位。串行發送停止位時,由內部硬件置1,向CPU發中斷申請,必須由軟件清0
                     //RI: 接收中斷標志位。串行接收停止位時,由內部硬件置1,向CPU發中斷申請,必須由軟件清0
        TH0=0;      //T0初始化,,用于判斷測距溢出,最大65.536 ms
        TL0=0;         
        TH1=0xFD;   //T1初始化  設定波特率9600 (波特率計算參考文檔)
        TL1=0xFD;   
        
        ET0=1;      //T0中斷允許
        TR0=1;      //開啟定時器0
        TR1=1;      //開啟定時器1
        //ES=1;     //串口允許中斷
                    /*
                                                          可刪除,我的理解是:在系統正常運行情況下,串口發送完成則置位TI=1,
                                                          向CPU請求中斷,在我們軟件人為的直接設置TI=1的情況下可以直接向CPU
                                                          請求中斷了,已經跳過了“允許”那一步
                                                                并且最好刪除!
                                                                因為TI為中斷標志位如果程序使用了串口中斷,那么每次調用printf都
                                                                會進入中斷,因此在使用printf前要禁用中斷
                                                        */
        TI=1;       /*
                     發送中斷標志 ☆直接使用printf必須加此語句才能發送
               在KEILC中,printf在傳輸數據前需要確保前一個數據傳輸
                                                         結束,也就是TI=1,否則將處于等待狀態
                                                         因為printf函數會調用putchar函數,而putchar函數會判斷TI,
                                                         不為1則等待(相當于死機),為1則清0,發送完成后又自動置1
                                                         因此第一次運行printf時檢查TI=1則進行發送,發送完成后
                                                         發送中斷標志位TI又自動置1
                                                         */
  EA=1;       //開啟總中斷
}

HC-SR04超聲波測距串口顯示.rar

32.19 KB, 下載次數: 93, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:310814 發表于 2021-4-11 16:54 | 顯示全部樓層
這個程序有大量重復啊,不建議下載.論壇里面很多重復的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表