freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的超聲波液位測量系統(tǒng)-資料下載頁

2025-06-27 19:52本頁面
  

【正文】 A = 0 。 // … 跟隨一條2 字接操作碼的指令 // 在匯編語言程序中: CLR EA 。 清除EA 位 CLR EA 。 … 跟隨一條2 字接操作碼的指令 如果在“CLR EA”操作碼(或任何清除EA 位的指令)的執(zhí)行期間產(chǎn)生了一個(gè)中斷,并且該指令的后面是一條單周期指令,則中斷可能被響應(yīng)。但是在中斷服務(wù)程序中讀EA 位時(shí)將返回‘0’值。當(dāng)“CLR EA”操作碼后面是一條多周期指令時(shí),則中斷不會(huì)被響應(yīng)。 某些中斷標(biāo)志在CPU 進(jìn)入ISR 時(shí)被自動(dòng)清除。但大多數(shù)中斷標(biāo)志不是由硬件清除的,必須在 ISR 返回前用軟件清除。如果一個(gè)中斷標(biāo)志在CPU 執(zhí)行完中斷返回(RETI)指令后仍然保持置位狀態(tài),則會(huì)立即產(chǎn)生一個(gè)新的中斷請求,CPU 將在執(zhí)行完下一條指令后重新進(jìn)入該ISR。 (1) MCU 中斷源和中斷向量 MCU 支持20 個(gè)中斷源。軟件可以通過將任何一個(gè)中斷標(biāo)志設(shè)置為邏輯‘1’來模擬一個(gè)中斷。如果中斷標(biāo)志被允許,系統(tǒng)將產(chǎn)生一個(gè)中斷請求,CPU 將轉(zhuǎn)向與該中斷標(biāo)志對應(yīng)的ISR 地址。 中斷源、對應(yīng)的向量地址、優(yōu)先級(jí)和控制位一覽表。(2) 外部中斷 兩個(gè)外部中斷源(/INT0和/INT1)可被配置為低電平觸發(fā)或下降沿觸發(fā)輸入,由 IT0( IT1()的設(shè)置決定。IE0()和 IE1()分別為外部中斷/INT0 和/INT1的中斷標(biāo)志。如果/INT0 或/INT1 外部中斷被配置為邊沿觸發(fā),CPU 在轉(zhuǎn)向 ISR 時(shí)將自動(dòng)清除相應(yīng)的中斷標(biāo)志。當(dāng)被配置為電平觸發(fā)時(shí),中斷標(biāo)志將跟隨外部中斷輸入引腳的狀態(tài),外部中斷源必須一直保持輸入有效直到中斷請求被響應(yīng)。在 ISR返回前必須使該中斷請求無效,否則將產(chǎn)生另一個(gè)中斷請求。中斷優(yōu)先級(jí) 每個(gè)中斷源都可以被獨(dú)立地編程為兩個(gè)優(yōu)先級(jí)中的一個(gè):低優(yōu)先級(jí)或高優(yōu)先級(jí)。一個(gè)低優(yōu)先級(jí)的中斷服務(wù)程序可以被高優(yōu)先級(jí)的中斷所中斷,但高優(yōu)先級(jí)的中斷不能被中斷。每個(gè)中斷在 SFR(IPEIP2)中都有一個(gè)配置其優(yōu)先級(jí)的中斷優(yōu)先級(jí)設(shè)置位,缺省值為低優(yōu)先級(jí)。如果兩個(gè)中斷同時(shí)發(fā)生,具有高優(yōu)先級(jí)的中斷先得到服務(wù)。如果這兩個(gè)中斷的優(yōu)先級(jí)相同,則由固定的優(yōu)先級(jí)順序決定哪一個(gè)先得到服務(wù) 。 中斷響應(yīng)時(shí)間 中斷響應(yīng)時(shí)間取決于中斷發(fā)生時(shí) CPU的狀態(tài)。 中斷系統(tǒng)在每個(gè)系統(tǒng)時(shí)鐘周期對中斷標(biāo)志采樣并對優(yōu)先級(jí)譯碼。最快的響應(yīng)時(shí)間為 5個(gè)系統(tǒng)時(shí)鐘周期:一個(gè)周期用于檢測中斷,4個(gè)周期完成對 ISR的長調(diào)用(LCALL) 。如果中斷標(biāo)志有效時(shí) CPU 正在執(zhí)行 RETI 指令,則需要再執(zhí)行一條指令才能進(jìn)入中斷服務(wù)程序。因此,最長的中斷響應(yīng)時(shí)間(沒有其它中斷正被服務(wù)或新中斷具有較高優(yōu)先級(jí))發(fā)生在 CPU 正在執(zhí)行 RETI指令,而下一條指令是 DIV 的情況。在這種情況下,響應(yīng)時(shí)間為 18 個(gè)系統(tǒng)時(shí)鐘周期:一個(gè)時(shí)鐘周期用于檢測中斷,5 個(gè)周期執(zhí)行RETI,8個(gè)周期執(zhí)行DIV 指令,4個(gè)周期完成對 ISR的長調(diào)用(LCALL) 。如果CPU正在執(zhí)行一個(gè)具有相同或更高優(yōu)先級(jí)的中斷的 ISR,則新中斷要等到當(dāng)前ISR 執(zhí)行完(包括 RETI和下一條指令)才能得到服務(wù)。 系統(tǒng)軟件設(shè)計(jì)框圖根據(jù)以上所述系統(tǒng)硬件設(shè)計(jì)和所完成功能,系統(tǒng)軟件需要實(shí)現(xiàn)以下功能:在系統(tǒng)硬件中,己經(jīng)完成了超聲波發(fā)射驅(qū)動(dòng)電路、回波檢測電路的設(shè)計(jì)。在系統(tǒng)軟件中,要完成發(fā)射脈沖信號(hào)、采集回波信號(hào)。為了得到發(fā)射信號(hào)與接收回波間的時(shí)間差,要讀出此刻計(jì)數(shù)器的計(jì)數(shù)值,然后存儲(chǔ)在RAM中,而且每次發(fā)射周期的開始,需要對計(jì)數(shù)器清零。RAM中存儲(chǔ)的計(jì)數(shù)值并不能作為距離值直接顯示輸出,因?yàn)橛?jì)數(shù)值為十六進(jìn)制數(shù),先要將十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),然后根據(jù)計(jì)數(shù)值與實(shí)際距離的轉(zhuǎn)換公式計(jì)算出距離值。軟件分為兩部分,主程序和中斷服務(wù)程序。, 所示。主程序完成初始化工作。 開始程序初始化定時(shí)中斷子程序收到回波結(jié)束是否外部中斷子程序 主程序流程圖定時(shí)中斷服務(wù)子程序完成超聲波的發(fā)射和接收,外部中斷服務(wù)子程序主要完成時(shí)間值的讀取、距離計(jì)算、結(jié)果的輸出等工作。, 外部中斷入口關(guān)外部中斷讀取時(shí)間值計(jì)算距離輸出結(jié)果開外部中斷結(jié)束發(fā)射完否否是發(fā)射超聲波定時(shí)器初始化停止發(fā)射定時(shí)中斷入口結(jié)束 圖 定時(shí)服務(wù)子程序 外部中斷服務(wù)子程序 單片機(jī)的C程序設(shè)計(jì)1 編譯環(huán)境使用C 語言肯定要使用到C 編譯器,以便把寫好的C 程序編譯為機(jī)器碼,這樣單片機(jī)才能執(zhí)行編寫好的程序。KEIL uVISION3 是眾多單片機(jī)應(yīng)用開發(fā)軟件中優(yōu)秀的軟件之一,它支持眾多不同公司的MCS51 架構(gòu)的芯片,它集編輯,編譯,仿真等于一體,同時(shí)還支持,PLM,匯編和C 語言的程序設(shè)計(jì),它的界面和常用的微軟VC++的界面相似,界面友好,易學(xué)易用,在調(diào)試程序,軟件仿真方面也有很強(qiáng)大的功能。因此很多開發(fā)51 應(yīng)用的工程師或普通的單片機(jī)愛好者,都對它十分喜歡。2 C程序//超聲波液位計(jì)程序清單://晶振=12MHz//MCU=AT89C51////Trig = P1^0//Echo = P3^2include //包括一個(gè)51標(biāo)準(zhǔn)內(nèi)核的頭文件define uchar unsigned char //定義一下方便使用define uint unsigned intdefine ulong unsigned long//***********************************************sfr CLK_DIV = 0x97。 //為AT單片機(jī)定義,系統(tǒng)時(shí)鐘分頻 //為AT單片機(jī)的IO口設(shè)置地址定義sfr P0M1 = 0X93。sfr P0M0 = 0X94。sfr P1M1 = 0X91。sfr P1M0 = 0X92。sfr P2M1 = 0X95。sfr P2M0 = 0X96。//***********************************************sbit Trig = P1^0。 //產(chǎn)生脈沖引腳sbit Echo = P3^2。 //回波引腳sbit test = P1^1。 //測試用引腳uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}。//數(shù)碼管09uint distance[4]。 //測距接收緩沖區(qū)uchar ge,shi,bai,temp,flag,outeH,outeL,i。 //自定義寄存器bit succeed_flag。 //測量成功標(biāo)志//********函數(shù)聲明void conversion(uint temp_data)。void delay_20us()。//void pai_xu()。void main(void) // 主程序{ uint distance_data,a,b。 uchar CONT_1。 CLK_DIV=0X03。 //系統(tǒng)時(shí)鐘為12MHz晶振 P0M1 = 0。 //將io口設(shè)置為推挽輸出 P1M1 = 0。 P2M1 = 0。 P0M0 = 0XFF。 P1M0 = 0XFF。 P2M0 = 0XFF。 i=0。 flag=0。 test =0。 Trig=0。 //首先拉低脈沖輸入引腳 TMOD=0x11。 //定時(shí)器0,定時(shí)器1,16位工作方式 TR0=1。 //啟動(dòng)定時(shí)器0 IT0=0。 //由高電平變低電平,觸發(fā)外部中斷 ET0=1。 //打開定時(shí)器0中斷 //ET1=1。 //打開定時(shí)器1中斷 EX0=0。 //關(guān)閉外部中斷 EA=1。 //打開總中斷0 while(1) //程序循環(huán) {EA=0。Trig=1。delay_20us()。Trig=0。 //產(chǎn)生一個(gè)20us的脈沖,在Trig引腳 while(Echo==0)。 //等待Echo回波引腳變高電平succeed_flag=0。 //清測量成功標(biāo)志EX0=1。 //打開外部中斷TH1=0。 //定時(shí)器1清零TL1=0。 //定時(shí)器1清零TF1=0。 //TR1=1。 //啟動(dòng)定時(shí)器1EA=1。while(TH1 30)。//等待測量的結(jié)果,(可用中斷實(shí)現(xiàn)) TR1=0。 //關(guān)閉定時(shí)器1EX0=0。 //關(guān)閉外部中斷if(succeed_flag==1){ distance_data=outeH。 //測量結(jié)果的高8位distance_data=8。 //放入16位的高8位distance_data=distance_data|outeL。//與低8位合并成為16位結(jié)果數(shù)據(jù)distance_data*=12。 //因?yàn)槎〞r(shí)器默認(rèn)為12分頻distance_data/=58。 //微秒的單位除以58等于厘米} //為什么除以58等于厘米, Y米=(X秒*344)/2 // X秒=( 2*Y米)/344 ==》X秒=*Y米 ==》厘米=微秒/58 if(succeed_flag==0){distance_data=0。 //沒有回波則清零test = !test。 //測試燈變化} /// distance[i]=distance_data。 //將測量結(jié)果的數(shù)據(jù)放入緩沖區(qū) /// i++。 /// if(i==3) /// { /// distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4。 /// pai_xu()。 /// distance_data=distance[1]。 a=distance_data。 if(b==a) CONT_1=0。 if(b!=a) CONT_1++。 if(CONT_1=3) { CONT_1=0。 b=a。 conversion(b)。 } /// i=0。 /// } }}//***************************************************************//外部中斷0,用做判斷回波電平INTO_() interrupt 0 // 外部中斷是0號(hào) { outeH =TH1。 //取出定時(shí)器的值 outeL =TL1。 //取出定時(shí)器的值 succeed_flag=1。 //至成功測量的標(biāo)志 EX0=0。 //關(guān)閉外部中斷 }//****************************************************************//定時(shí)器0中斷,用做顯示timer0() interrupt 1 // 定時(shí)器0中斷是1號(hào) { TH0=0xfd。 //寫入定時(shí)器0初始值 TL0=0x77。 switch(flag) {case 0x00:P0=ge。 P2=0xfd。flag++。break。 case 0x01:P0=shi。P2=0xfe。flag++。break。 case 0x02:P0=bai。P2=0xfb。flag=0。break。 } }//*****************************************************************/*//定時(shí)器1中斷,用做超聲波測距計(jì)時(shí)timer1() interrupt 3 // 定時(shí)器0中斷是1號(hào) {TH1=0。TL1=0。 }*///******************************************************************//顯示數(shù)據(jù)轉(zhuǎn)換程序void conversion(uint temp_data) { uchar ge_data,shi_data,bai_d
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1