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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 合泰單片機接收紅外遙控器程序(NEC碼)

          合泰單片機接收紅外遙控器程序(NEC碼)

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          ;;內(nèi)容:按下PA3接的按鍵進中斷LED數(shù)碼管加1

          ;數(shù)碼管段碼接法A-PD0,B-PD1....G-PD6,H-PD7
          ;數(shù)碼管位碼接法OM0-PC0...COM4-PC3
          ;紅外頭接-PA.3
          ;完整源代碼下載:http://www.51hei.com/f/hthw.rar
          include HT66F50.inc
          ORG0000H
          JMPA1
          ORG04H;外部中斷0入口地址
          JMPZD01;
          ORG0014H ;多功能中斷入口地址
          JMPZD1
          ORG30H;
          Q1:
          DC03FH; 0
          DC006H; 1
          DC05BH; 2
          DC04FH; 3
          DC066H; 4
          DC06DH; 5
          DC07DH; 6
          DC007H; 7
          DC07FH; 8
          DC06FH; 9
          DC077H; A
          DC07CH; B
          DC039H; C
          DC05EH; D
          DC079H; E
          DC071H; F
          A1:

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

          MOVA,3FH;顯示內(nèi)容
          MOV[8AH],A;第一位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,3FH;顯示內(nèi)容
          MOV[8BH],A;第二位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,3FH;顯示內(nèi)容
          MOV[8CH],A;第三位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,3FH;顯示內(nèi)容
          MOV[8DH],A;第四位數(shù)碼管顯示內(nèi)容寄存器
          MOVA,08H;跟CP1C寄存器設(shè)置要求選擇數(shù)據(jù)
          MOVCP1C,A;設(shè)置PC口為I/0口而不是中斷口
          CLRPCC;設(shè)置pc 口為輸出口
          CLRPDC;設(shè)置PD 口為輸出口
          MOVA,1;設(shè)置初始顯示位碼顯示第一位
          MOV[80H],A;位碼寄存器
          MOVA,8AH;設(shè)置對應(yīng)第一位段碼寄存器
          MOVMP0,A;間接寄存器指針
          MOVA,00000000B;
          MOVPRM1,A;設(shè)置外部中斷0的管腳為PA.3
          MOVA,00000010B;
          MOVINTEG,A;設(shè)置外部中斷0為下降沿觸發(fā)
          CLRACERL;設(shè)置PA口不為AD輸入口
          SETPAPU.3;設(shè)置PA.3上拉
          SETPAC.3;設(shè)置PA.3為輸入口
          MOVA,08H;
          MOVCP0C,A;設(shè)置PA3不為比較器輸入口
          CLRPDC;設(shè)置PD口為輸出口
          MOVA,01H;設(shè)置PD口初始狀態(tài)
          MOVPD,A;PD口顯示初始狀態(tài)
          MOVA,00000000B;設(shè)置TM2 計數(shù)時鐘位為fSYS/4
          MOVTM2C0,A
          MOVA,11000001B ;設(shè)置TM2中斷為定時/計數(shù)模式選擇比較器A匹配
          MOVTM2C1,A
          MOVA,LOW 5000;設(shè)置中斷時間為5000個時鐘周期
          MOVTM2AL,A;低8位
          MOVA,HIGH 5000;設(shè)置中斷時間為5000個時鐘周期
          MOVTM2AH,A;高8位
          CLRMF0F;清多功能中斷0標(biāo)志
          CLRT2AF;清定時器2較器A中斷標(biāo)志
          SETMF0E;使能多功能0中斷
          SETT2AE;使能定時器2較器A中斷
          CLRINT0F;清中斷0標(biāo)志
          SETINT0E;使能外部0中斷
          SETEMI;使能總中斷
          SETT2ON;開始計數(shù)
          JMP$
          ;*************************************************
          ;外部中斷0服務(wù)子程序
          ;*************************************************

          ZD01:;進入中斷自動關(guān)閉總中斷
          SETEMI;打開總中斷允許嵌套
          CLRINT0E;關(guān)閉外部中斷0避免為完成操作2次中斷
          MOV[0F2H],A;壓棧ACC到0F2H
          MOVA,STATUS;
          MOV[0F3H],A;壓棧status標(biāo)志寄存器到0F3H
          MOVA,18;設(shè)置起始碼時間(0.5*18=9MS)
          MOV[0A0H],A
          A2:CALLM001;調(diào)用0.5MS延時
          SZPA.3;9MS時間內(nèi)判斷PA3是否為高電平
          JMPZD02;是高電平不是起始碼則跳出中斷
          SDZ[0A0H];判斷是否到9MS
          JMPA2;不到則返回繼續(xù)等待
          MOVA,9;設(shè)置結(jié)果碼時間4.5MS(0.5*9=4.5MS)
          MOV[0A0H],A;
          SNZPA.3;判斷是否為高電平(起始碼是否結(jié)束,
          JMP$-1;起始碼必須結(jié)束,結(jié)果碼才能開始)
          A3:CALLM001;調(diào)用0.5MS延時
          SNZPA.3;4.5MS時間內(nèi)判斷PA3是否為低電平
          JMPZD02;是低電平則不是結(jié)果碼跳出中斷
          SDZ[0A0H];判斷是否到4.5ms
          JMPA3;不到這繼續(xù)等待
          SZPA.3;到了則是結(jié)果碼則等待判斷結(jié)果碼是否結(jié)束
          JMP$-1;結(jié)果碼必須結(jié)束后才能繼續(xù)下一步判斷
          MOVA,8;設(shè)置接收的數(shù)為8bit
          MOV[0A1H],A;
          MOVA,4;設(shè)置接收個數(shù)
          MOV[0A2H],A;
          MOVA,3;設(shè)置分辨0或1的時間1.5MS以上為1
          MOV[0A0H],A;
          MOVA,0A4H;設(shè)置收到的數(shù)存到0A4H(地址碼)0A5H(地址反碼)
          MOVMP1,A;0A6H(數(shù)據(jù)碼)0A7H(數(shù)據(jù)反碼)
          A4:
          SNZPA.3;判斷0.565MS低電平是否結(jié)束
          JMPA4;必須在0.565MS低電平結(jié)束后才能判斷所收的數(shù)是1還是0
          A5:
          CALLM001;延時0.5MS
          SNZPA.3;1.5MS內(nèi)判斷PA3是否為0
          JMPA6;是0則說明時間小于1.5MS為0
          SDZ[0A0H];判斷是否到1.5MS
          JMPA5 ;1;否則繼續(xù)等待
          SETC;置位標(biāo)志C
          RLCIAR1;通過帶進位左移指令把當(dāng)前數(shù)保存起來
          JMPA7;
          A6:
          CLRC;清標(biāo)志C
          RLCIAR1;通過帶進位左移指令把當(dāng)前數(shù)保存起來
          A7:

          MOVA,3;到了1.5MS還是高電平說明為1
          MOV[0A0H],A;重新設(shè)置分辨0或1的時間1.5MS以上為1
          SZPA.3;判斷是否結(jié)束回到0.565MS低電平狀態(tài)
          JMP$-1;必須要回到0.565MS才能接收下一個數(shù)
          SDZ[0A1H];判斷是否收夠了8位數(shù)
          JMPA4;否則繼續(xù)
          MOVA,8;重新設(shè)置位數(shù)
          MOV[0A1H],A;
          INCMP1;間接寄存器加1
          SDZ[0A2H];判斷是否收夠4個NEC碼
          JMPA4;
          MOVA,[0A4H];地址碼
          MOV[8AH],A;第一位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,[0A5H];地址反碼
          MOV[8BH],A;第二位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,[0A6H];數(shù)據(jù)碼
          MOV[8CH],A;第三位數(shù)碼管段碼顯示內(nèi)容寄存器
          MOVA,[0A7H];數(shù)據(jù)反碼
          MOV[8DH],A;第四位數(shù)碼管顯示內(nèi)容寄存器
          ZD02:
          MOVA,[0F3H];彈棧后進先出先進后出
          MOVSTATUS,A;彈棧0F1H的數(shù)到標(biāo)志寄存器
          MOVA,[0F2H];彈棧0F0H的數(shù)到acc
          CLRINT0F;清中斷標(biāo)志
          SETINT0E;使能外部中斷
          RETI;中斷返回
          ;*******************************************************
          ;中斷服務(wù)子程序
          ;*******************************************************
          ZD1:
          MOV[0F0H],A;壓棧ACC到0F0H
          MOVA,STATUS;
          MOV[0F1H],A;壓棧status標(biāo)志寄存器到0F1H
          CLRPC;清PC(清屏幕)
          MOVA,Q1;數(shù)據(jù)表地址
          CLRTBHP;清數(shù)據(jù)表地址高位否則出錯
          ADDA,IAR0;利用間接寄存器找到要顯示段碼所在數(shù)據(jù)表的地址
          MOVTBLP,A;表格指針寄存器TBLP
          ;TABRDPD;查表并將數(shù)據(jù)存到PD口寄存器
          MOVA,IAR0;
          MOVPD,A;顯示收到的數(shù)到LED上
          MOVA,[80H];位碼寄存器
          MOVPC,A;將位碼寄存器的數(shù)存到PC口寄存器
          ;段碼和位碼的數(shù)都有了所以數(shù)碼管被點亮
          INCMP0;間接寄存器指針加1指向下一個段碼寄存器
          RL[80H];左移位碼寄存器控制下一個數(shù)碼管
          SNZ[80H].5;判斷是否控制完4個數(shù)碼管
          JMPZD2;退出中斷繼續(xù)
          MOVA,1;是則從新初始化寄存器數(shù)據(jù)
          MOV[80H],A;
          MOVA,8AH;千位數(shù)碼管對應(yīng)寄存器
          MOVMP0,A;存到間接寄存器0
          ZD2:
          MOVA,[0F1H];彈棧后進先出先進后出
          MOVSTATUS,A;彈棧0F1H的數(shù)到標(biāo)志寄存器
          MOVA,[0F0H];彈棧0F0H的數(shù)到acc
          CLRMF0F;清多功能標(biāo)志
          CLRT2AF;清定時器2比較器A標(biāo)志
          RETI;中斷返回
          ;**************************************
          ;延時子程序
          ;**************************************
          M001:
          MOVA,1
          MOV[85H],A
          M002:
          MOVA,3
          MOV[86H],A
          M003:
          MOVA,105
          MOV[87H],A
          M004:
          SDZ[87H]
          JMPM004
          SDZ[86H]
          JMPM003
          SDZ[85H]
          JMPM002
          RET
          END



          評論


          技術(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); })();