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

正文內(nèi)容

[工學]第5章中斷與定時-資料下載頁

2025-01-19 12:02本頁面
  

【正文】 輸出的 5 kHz方波 。 由 輸出 5 kHz的方波 , 即每隔 100 μs( 周期為 200 μs )使 的電平發(fā)生一次變化 。 則 TH0中的初始值 X=M-N=256- 100/2=206。 ( 機器周期為 2 μs ) 下面是有關的程序。 MOV TL0, # 0FFH MOV TH0, # 206 MOV TL1, # BAUD 。 BAUD MOV TH1, # BAUD MOV TMOD, # 27H 。 置 T0工作方式 3 。 TL0 MOV TCON, # 55H 。 啟動定時器 T0、 T1, 置外部中斷 0 和 1 。 MOV IE, # 9FH 。 TL0 溢出中斷服務程序(由 000BH單元轉(zhuǎn)來) : TL0INT: MOV TL0, # 0FFH … 。 外部引腳 T0 引起中斷處理程序 RETI TH0 溢出中斷服務程序(由 001BH轉(zhuǎn)來) : TH0INT: MOV TH0, # 206 CPL RETI 此處串行口中斷服務程序、 外中斷 0和外中斷 1的中斷服務程序沒有列出。 定時 /計數(shù)器用于外部中斷擴展 擴展方法是,將定時 /計數(shù)器設置為計數(shù)器方式,計數(shù)初值設定為滿程,將待擴展的外部中斷源接到定時 /計數(shù)器的外部計數(shù)引腳。從該引腳輸入一個下降沿信號,計數(shù)器加 1后便產(chǎn)生定時 /計數(shù)器溢出中斷。 例如,利用 T0擴展一個外部中斷源。將 T0設置為計數(shù)器方式,按方式 2工作, TH0、 TL0的初值均為 0FFH, T0允許中斷, CPU開放中斷。 其初始化程序如下: MOV TMOD, 06H ;置 T0為計數(shù)器方式 2 MOV TL0, 0FFH ;置計數(shù)初值 MOV TH0, 0FFH SETB TR0 ;啟動 T0工作 SETB EA ; CPU開中斷 SETB ET0 ;允許 T0中斷 中斷及定時系統(tǒng)綜合應用舉例 例 510 用圖 312的顯示電路 , 使用 C51編程語言編寫程序?qū)? 現(xiàn)對按鍵的計數(shù) , 并將計數(shù)的結(jié)果實時顯示在數(shù)碼管上 。 要 求只顯示有效的位 , 無效位不顯示 。 分析: 在本例中 , 要求所顯示的內(nèi)容不再是固定的 ,而是動態(tài)變化的 。 由于按鍵脈沖的寬度是隨機的 , 為了確保準確捕獲按鍵的次數(shù) , 需要將外部中斷設置成下降沿觸發(fā)的方式 。 編寫程序時 , 需要定一個數(shù)組作為顯示緩沖區(qū) 。 題目要求 “ 只顯示有效的位 , 無效位不顯示 ” , 因此還沒有有效數(shù)據(jù)的高位應該不予顯示 。 但是在顯示緩沖區(qū)中會存在高位無效位和低位有效位都為 “ 0” 的情況 (如:10, 100, 1000等 ), 因此在顯示程序讀取顯示緩沖區(qū)時 ,應先從高位向低位讀取 , 高位的 0都對應取熄滅代碼 , 一旦讀到非 0的數(shù)字即意味著后面的所有 0都應該取 0對應的顯示代碼而顯示 “ 0” 。 中斷及定時系統(tǒng)綜合應用 根據(jù)分析 , 可以畫出程序的流程圖如下: 開 始開 啟 外 部 中 斷 0下 降 沿 觸 發(fā)初 始 化 T 2方 式 0 , 開 T 2 中 斷等 待 中 斷外 部 中 斷 0中 斷 函 數(shù) 入 口計 數(shù) 加 1中 斷 返 回T 2 中 斷 函數(shù) 入 口關 定 時 器調(diào) 用 顯 示 程 序中 斷 返 回掃 描 完 一 周 ?清 滅 零標 志置 熄 滅字 碼取 值 譯 碼 位 碼 加 1返 回主 程 序I N T 0 中 斷T 2 中 斷 函 數(shù)顯 示 子 程 序YN轉(zhuǎn) 換 位 數(shù) 達 到 6 ?取 樣 計 數(shù)用 1 0 取 余 送 顯示 緩 沖 區(qū)計 數(shù) 除 1 0計 數(shù) 已 為 0 ?滅 零 標志 有 效 ?本 位 為 0 ?復 位 位 選 、 計 數(shù) 變 量置 位 滅 零 標 志YNNNYNYYC51程序代碼如下: /***************************************************/ /*功能說明: */ /*對外部中斷 0進行計數(shù),并將計數(shù)結(jié)果實時顯示在 LED數(shù) 碼管上 */ /***************************************************/ include define uchar unsigned char define INITVALUE_RCAP2H ((655362022)/256) define INITVALUE_RCAP2L ((655362022)%256) long countnum=0。 uchar dis_buf[6]={0}。 uchar loop=0,ziwei=0。 bit zflag=1。 //數(shù)碼管 0~ A~F及熄滅的段碼 uchar code zixing[17]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}。 /********主函數(shù) *********/ void main() { /*初始化外部中斷 0*/ IT0=1。 //外部中斷為下降沿觸發(fā) EA=1。 //開總中斷 EX0=1。 //開外部中斷 0 /*初始化 T2*/ T2MOD=0x00。 //時鐘信號不輸出 , 加計數(shù) 。 不需設置 T2CON=0x00。 //定時方式 , 自動重裝 RCAP2H= INITVALUE_RCAP2H。 //定時器自動重裝數(shù)值初始化 RCAP2L= INITVALUE_RCAP2L。 TR2=1。 //啟動定時器 2 ET2=1。 //開 T2中斷 EA=1。 //開總中斷 while(1)。 //等待中斷 , 實際中這里可加入其它處理子程序 } /****外部中斷 0處理函數(shù) ********/ void in0() interrupt 0 { long numtemp。 int loopi。 countnum++。 //數(shù)值加一 numtemp =countnum。 //以下為十進制轉(zhuǎn)換程序 for(loopi=5。loopi=0。 loopi) { if(numtemp ==0) break。 //結(jié)果已經(jīng)為零不需繼續(xù)轉(zhuǎn)換 dis_buf[loopi]= numtemp %10。 numtemp /=10。 } } /************T2中斷處理函數(shù) ************/ void T2interrupt() interrupt 5 { TR2=0。 //關閉定時器 display()。 //調(diào)用顯示函數(shù) TR2=1。 //開定時器 } /******顯示子函數(shù) ****/ //每次掃描一個 LED數(shù)碼管 //從高位向地位掃描 void display() { uchar zixingtemp,ziweitemp。 if(loop==6)//掃描一周后恢復初始 { loop=0。 ziwei=0。 zflag=1。 } /*高位為 0熄滅判斷 */ zixingtemp=dis_buf[loop]。 //讀取顯示緩沖區(qū)顯示值實現(xiàn)無效位不顯示 if(zflag) //高位全零標志為 1則判斷本位 { if(zixingtemp==0) //本位為 0 { zixingtemp =16。//熄滅 } else { zflag=0。 //不為零清除高位為零標志 } } zixingtemp =zixing[zixingtemp]。 //轉(zhuǎn)換數(shù)值為 7段碼 ziweitemp =P1。 //讀取 p1口值 //屏蔽高三位 ziweitemp = ziweitemp amp。0x1f。 ziweitemp +=ziwei。 //高三位加片選碼 P0= zixingtemp。 //字型送 p0口 P1= ziweitemp。 //片選送 p1口 ziwei+=0x20。 //片選移位 loop++。 } EN
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1