<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)實驗開發(fā)板測試程序詳解

          單片機(jī)實驗開發(fā)板測試程序詳解

          作者: 時間:2012-05-23 來源:網(wǎng)絡(luò) 收藏
          這個的功能是:接通電源后P0口的八個發(fā)光二極管依次從下往上點(diǎn)亮,然后蜂鳴器鳴叫一聲,兩個繼電器輪流動作一次,數(shù)碼管的個位顯示8,再換成十位顯示8,然后不斷循環(huán),如果這時按下紅外遙控器的按鍵時,蜂鳴器立即發(fā)出“滴滴滴”的提示音,同時將這個按鍵的鍵值通過串口在電腦屏幕上顯示出來(需要運(yùn)行串口調(diào)試軟件)通過這個可以判斷板的各個部分的硬件和軟件都是完好的,具體的源如下:

          本文引用地址:http://www.ex-cimer.com/article/149000.htm

            ORG 0000H

            AJMP MAIN;轉(zhuǎn)入主程序

            ORG 0003H;外部中斷P3.2腳INT0入口地址

            AJMP INT;轉(zhuǎn)入外部中斷服務(wù)子程序(紅外遙控解碼程序)

            ;以下為主程序進(jìn)行CPU中斷方式設(shè)置

            MAIN:LCALL YS3;等待硬件上電穩(wěn)定

            SETB EA;打開CPU總中斷請求

            SETB IT0;設(shè)定INT0的觸發(fā)方式為脈沖負(fù)邊沿觸發(fā)

            SETB EX0;打開INT0中斷請求

            MOV SCON,#50H;設(shè)置成串口1方式

            MOV TMOD,#20H;波特率發(fā)生器T1工作在模式2上

            MOV PCON,#80H;波特率翻倍為2400x2=4800BPS

            MOV TH1,#0F3H;預(yù)置初值(按照波特率2400BPS預(yù)置初值)

            MOV TL1,#0F3H;預(yù)置初值(按照波特率2400BPS預(yù)置初值)

            SETB TR1;啟動定時器T1

            ;以上完成串口通訊初始化設(shè)置

            START:MOV P1,#01111111B

            LCALL DELAY

            MOV P1,#10111111B

            LCALL DELAY

            MOV P1,#11011111B

            LCALL DELAY

            MOV P1,#11101111B

            LCALL DELAY

            MOV P1,#11110111B

            LCALL DELAY

            MOV P1,#11111011B

            LCALL DELAY

            MOV P1,#11111101B

            LCALL DELAY

            MOV P1,#11111110B;P1口的LED循環(huán)由下往上點(diǎn)亮一次,延時約250毫秒

            LCALL DELAY

            MOV P2,#11011111B;蜂鳴器鳴響一聲

            LCALL DELAY

            MOV P2,#11101111B;繼電器J1吸合一次

            LCALL DELAY

            MOV P2,#11110111B;繼電器J2吸合一次

            LCALL DELAY

            MOV P0,#0FFH

            MOV P2,#01111111B;數(shù)碼管個位顯示8

            LCALL DELAY

            MOV P0,#0FFH

            MOV P2,#10111111B;數(shù)碼管十位顯示8

            LCALL DELAY

            AJMP START;反復(fù)循環(huán)

            ;以下為進(jìn)入P3.2腳外部中斷子程序,也就是解碼程序

            INT: CLR EA;暫時關(guān)閉CPU的所有中斷請求
          MOV R6,#10

            SB: ACALL YS1;調(diào)用882微秒延時子程序

            JB P3.2,EXIT;延時882微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序

            DJNZ R6, SB;重復(fù)10次,目的是檢測在8820微秒內(nèi)如果出現(xiàn)高電平就退出解碼程序

            ;以上完成對遙控信號的9000微秒的初始低電平信號的識別。

            JNB P3.2, $;等待高電平避開9毫秒低電平引導(dǎo)脈沖

            ACALL YS2;延時4.74毫秒避開4.5毫秒的結(jié)果碼

            MOV R7,#26;忽略前26位系統(tǒng)識別碼

            JJJJA:JNB P3.2,$;等待地址碼第一位的高電平信號

            LCALL YS1;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態(tài)

            MOV C,P3.2;將P3.2引腳此時的電平狀態(tài)0或1存入C中

            JNC UUUA;如果為0就跳轉(zhuǎn)到UUUA

            LCALL YS3;檢測到高電平1的話延時1毫秒等待脈沖高電平結(jié)束

            UUUA: DJNZ R7,JJJJA

            MOV R1,#1AH ;設(shè)定1AH為起始RAM區(qū)

            MOV R2,#2;接收從1AH到1BH的2個內(nèi)存,用于存放操作碼和操作反碼

            PP: MOV R3,#8;每組數(shù)據(jù)為8位

            JJJJ: JNB P3.2,$;等待地址碼第一位的高電平信號

            LCALL YS1;高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態(tài)

            MOV C,P3.2;將P3.2引腳此時的電平狀態(tài)0或1存入C中

            JNC UUU;如果為0就跳轉(zhuǎn)到UUU

            LCALL YS3;檢測到高電平1的話延時1毫秒等待脈沖高電平結(jié)束

            UUU: MOV A,@R1;將R1中地址的給A

            RRC A;將C中的值0或1移入A中的最低位

            MOV @R1,A;將A中的數(shù)暫時存放在R1數(shù)值的內(nèi)存中

            DJNZ R3,JJJJ;接收滿8位換一個內(nèi)存

            INC R1;對R1中的值加1,換下一個RAM

            DJNZ R2,PP ;接收完8位數(shù)據(jù)碼和8位數(shù)據(jù)反碼,存放在1AH/1BH中

            MOV A,1AH

            CPL A;對1AH取反后和1BH比較

            CJNE A,1BH,EXIT;如果不等表示接收數(shù)據(jù)發(fā)生錯誤,放棄

            MOV P1,1AH;將按鍵的鍵值通過P1口的8個LED顯示出來!

            MOV A,1AH;將紅外遙控器具體按鍵的鍵值發(fā)送到串口去

            MOV SBUF,A;通過串口在電腦屏幕上顯示出來

            CLR P2.5;蜂鳴器鳴響嘀嘀嘀的聲音,表示解碼成功

            LCALL YS2

            LCALL YS2

            LCALL YS2

            SETB P2.5;蜂鳴器停止

            EXIT: SETB EA ;允許中斷

            RETI ;退出解碼子程序

            YS1: MOV R4,#20 ;(占用R4/R5)延時子程序1,精確延時882微秒

            D1: MOV R5,#20

            DJNZ R5,$

            DJNZ R4,D1

            RET

            YS2: MOV R4,#10 ;(占用R4/R5)延時子程序2,精確延時4740微秒

            D2: MOV R5,#235

            DJNZ R5,$

            DJNZ R4,D2

            RET

            YS3: MOV R4,#2;(占用R4/R5)延時程序3,精確延時1000微秒

            D3:MOV R5,#248

            DJNZ R5,$

            DJNZ R4,D3

            RET

            DELAY:MOV R1,#08H;(占用R1/R2/R3)延時子程序,12M晶振延時約250毫秒

            L3: MOV R2 ,#0FAH

            L1: MOV R3 ,#0FAH

            L2: DJNZ R3 ,L2

            DJNZ R2 ,L1

            DJNZ R1 ,L3

            RET

            END

          51單片機(jī)相關(guān)文章:51單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)教程


          單片機(jī)相關(guān)文章:單片機(jī)視頻教程


          單片機(jī)相關(guān)文章:單片機(jī)工作原理


          電容傳感器相關(guān)文章:電容傳感器原理
          晶振相關(guān)文章:晶振原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();