?? 學(xué)習(xí)型電話網(wǎng)絡(luò)遠程控制器源程序.asm.txt
字號:
;產(chǎn)品名稱:電話遠程學(xué)習(xí)遙控器
;主控芯片:P89C51
;晶振頻率:12M
;軟件作者:史燦
;軟件版本:1.0---2003.05.20
;修改記錄:
;*************************************************************
;CPU寄存器說明 *
;*************************************************************1
;*PSW說明 *
;*PSW: D7 D6 D5 D4 D3 D2 D1 D0 (E0H) *
;* CY AC F0 RS1 RS0 OV X P *
;*CY---高位進位標(biāo)志 AC---輔助進位標(biāo)志 FO---用戶標(biāo)志 *
;*RS1、RS0----寄存器區(qū)選擇 00 第0區(qū) 00~07H *
;*OV---逸出標(biāo)志位 P----奇偶校驗標(biāo)志位 *
;*************************************************************2
;*與定時器、中斷有關(guān)的SFR說明 *
;*TMOD: D7 D6 D5 D4 D3 D2 D1 D0 (89H) *
;* GATE C/T M1 MO GATE C/T M1 MO *
;* |----T1方式字-----| |----T0方式字-----| *
;*M0.M1---定時器方式選擇 0.1 16位 C/T---=0定時=1計數(shù)方式 *
;*GATE---=0定時器計數(shù)不受INT控制 =1受控制 INT=1充許計數(shù) *
;*************************************************************3
;*TCON: D7 D6 D5 D4 D3 D2 D1 D0 (88H) *
;* TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 *
;*TR---運行控制位 =1啟動 =0關(guān)閉 TF---定時器益出標(biāo)志位=1溢出 *
;*IT---中斷方式控制 =0電平 =1邊沿 IE---外部中斷標(biāo)致 =1中斷 *
;* 也是定時器中斷源,響應(yīng)中斷時硬件自動清0 *
;*************************************************************4
;*與串口有關(guān)的SFR說明 *
;*SCON: D7 D6 D5 D4 D3 D2 D1 D0 (98H) *
;* SM0 SM1 SM2 REN TB8 RB8 TI RI *
;*SM0.SM1---串口工作方式 SM2---多機通訊控制位 *
;*REN---=1允許串行接收 =0禁止串行接收 TB8---方式2.3發(fā)送第9位*
;*TB8---方式2.3接收第9位 TI---發(fā)送中斷標(biāo)志 *
;*RI---發(fā)送中斷標(biāo)志 *
;*************************************************************5
;*PCON: D7 D6 D5 D4 D3 D2 D1 D0 (97H) *
;* SMOD *
;*SMOD---波特率選擇位 =1加倍 *
;* *
;*************************************************************6
;*與中斷有關(guān)SFR說明 *
;*IE: D7 D6 D5 D4 D3 D2 D1 D0 (A8H) *
;* EA / ET2* ES ET1 EX1 ET0 EX0 *
;*EA---=1CPU開放中斷 =0屏蔽中斷 ES---=1充許串口中斷 =0禁止 *
;*ET---=1充許定時器中斷 =0禁止 EX---=1充許外部中斷 =0禁止 *
;*************************************************************7
;*IP: D7 D6 D5 D4 D3 D2 D1 D0 (B8H) *
;* / / PT2* PS PT1 PX1 PTO PX0 *
;*51有兩個中斷優(yōu)先級 以上位=1時為高優(yōu)先級 =0時為低優(yōu)先級 *
;*同優(yōu)先級順序如下:由高到低 外部中斷0----定時器T0中斷----- *
;*外部中斷1----定時器T1中斷-----串行口中斷----T2中斷 *
;*************************************************************8
;*與定時器2有關(guān)SFR說明 *
;*T2CON: D7 D6 D5 D4 D3 D2 D1 D0 (C8H) *
;* TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 *
;*TF2---定時器益出標(biāo)志位=1溢出 須軟件清0 EXF2---T2外部標(biāo)志 *
;*RCLK---接收時鐘標(biāo)志 TCLK---發(fā)送鐘標(biāo)志 EXEN2---T2產(chǎn)生捕獲*
;或重裝外部使能標(biāo)志 TR2---T2運行控制位 =1啟動 =0關(guān)閉 *
;C/T2---=0定時=1計數(shù)方式 CP/RL2--- 捕獲重裝標(biāo)志 *
;*************************************************************
;*************************************************************
;常量定義
;-------------------------------------------------------------
;DTMF轉(zhuǎn)換后BCD碼輸入
DTMF_1 EQU P2.0
DTMF_2 EQU P2.1
DTMF_3 EQU P2.2
DTMF_4 EQU P2.3
;DTMF轉(zhuǎn)換請求
DTMF_REQ EQU P2.4
;蜂鳴器
BZ_AUD EQU P2.5
;LED指示
LED1 EQU P2.6
;音頻發(fā)送
BZ_AUD1 EQU P2.7
;電話振鈴檢測
PH_RING EQU P3.5
;振鈴次數(shù)選擇
JP1 EQU P3.6
;
JP2 EQU P3.7
;紅外發(fā)射
RED_EMI EQU P1.0
;摘掛機控制
PIK_HANG EQU P1.2
;按鍵
KEY_SEC EQU P1.1
KEY_ON EQU P1.3
KEY_OFF EQU P1.4
;2402_SCL
SCL EQU P1.5
;2402_DATA
SDA EQU P1.6
;紅外接收
RED_REC EQU P1.7
;-------------------------------------------------------------
;與2402有關(guān)常量
;DEVIDE ADDR
EEPROM EQU 0A0H
;*************************************************************
;全局變量定義
;00H--0FH R
;10H--1FH BLANK 16
;20H--23H BIT GV
;30H--8FH RCV GV
;90H--FFH BLANK
;-------------------------------------------------------------
;密碼----3位
PW1 EQU 10H
PW2 EQU 11H
PW3 EQU 12H
;-------------------------------------------------------------
;DTMF解碼數(shù)據(jù)----5位
D_DATA1 EQU 15H
D_DATA2 EQU 16H
D_DATA3 EQU 17H
D_DATA4 EQU 18H
D_DATA5 EQU 19H
;-------------------------------------------------------------
;DTMF解碼計數(shù)
DTMF_CON EQU 1AH
;-------------------------------------------------------------
;DTMF操作計數(shù)
OPER_CON EQU 1BH
;-------------------------------------------------------------
;振鈴次數(shù)計數(shù)
RING_CON EQU 1CH
;-------------------------------------------------------------
;遙控碼數(shù)據(jù)指針------為3時轉(zhuǎn)向?qū)W習(xí)碼
RDATA_PO EQU 1DH
;-------------------------------------------------------------
;與2402有關(guān)變量
BITCNT EQU 50H
BYTECNT EQU 51H
SLAADR EQU 52H ;從器件地址
SUBADR EQU 53H ;2402內(nèi)部地址
RCVDAT EQU 54H ;發(fā)送數(shù)據(jù)單元首地址(如果地址不定,可定義為變量間接尋址)
XMTDAT EQU 55H ;接收數(shù)據(jù)單元首地址
;-------------------------------------------------------------
;測量遙控碼有關(guān)變量定義
;測量遙控碼引導(dǎo)脈沖低電平寬度
RLEAD_LWH EQU 30H
RLEAD_LWL EQU 31H
;測量遙控碼引導(dǎo)脈沖高電平寬度
RLEAD_HWH EQU 32H
RLEAD_HWL EQU 33H
;測量遙控碼數(shù)據(jù)脈沖低電平寬度
RDATA_LWH EQU 34H
RDATA_LWL EQU 35H
;測量遙控碼數(shù)據(jù)脈沖高電平寬度1
RDATA_HWH1 EQU 36H
RDATA_HWL1 EQU 37H
;測量遙控碼數(shù)據(jù)脈沖高電平寬度2
RDATA_HWH2 EQU 38H
RDATA_HWL2 EQU 39H
;測量遙控碼數(shù)據(jù)脈沖高電平寬度3
RDATA_HWH3 EQU 3AH
RDATA_HWL3 EQU 3BH
;測量遙控碼數(shù)據(jù)脈沖高電平計數(shù)<10ms
RDATA_LCON EQU 3CH
;測量遙控碼經(jīng)分析處理后的數(shù)據(jù),低位在前,最多128位
RDATA1 EQU 40H
RDATA2 EQU 41H
RDATA3 EQU 42H
RDATA4 EQU 43H
RDATA5 EQU 44H
RDATA6 EQU 45H
RDATA7 EQU 46H
RDATA8 EQU 47H
RDATA9 EQU 48H
RDATA10 EQU 49H
RDATA11 EQU 4AH
RDATA12 EQU 4BH
RDATA13 EQU 4CH
RDATA14 EQU 4DH
RDATA15 EQU 4EH
RDATA16 EQU 4FH
;測量好的遙控碼數(shù)據(jù)按以上順序放在50H-6FH,70H-8FH的內(nèi)存單元,32個一組,共能存2組
;----------------------------------------------------------------
;定時器有關(guān)變量定義
;1秒計時變量
SECCON EQU 24H
;1分計時變量
MINCON EQU 25H
;10分計時變量
TMINCON EQU 26H
;xM秒定時控制變量
GV_XMS EQU 27H
;XM秒定時標(biāo)致,位變量
GV_XMSFLAG BIT 00H
;x秒定時控制變量
GV_XS EQU 28H
;X秒定時標(biāo)致,位變量
GV_XSFLAG BIT 01H
;x分定時控制變量
GV_XM EQU 29H
;X分定時標(biāo)致,位變量
GV_XMFLAG BIT 02H
;x個10分定時控制變量,24小時值為0-144
GV_XTM EQU 2AH
;X個10分定時標(biāo)致,位變量
GV_XTMFLAG BIT 03H
;---------------------------------------------------------------------
;學(xué)習(xí)成功標(biāo)志---位變量
STUDY_OK BIT 04H
;開信號存在標(biāo)志---位變量(最多4位)
DATA_ON1 BIT 05H
DATA_ON2 BIT 06H
DATA_ON3 BIT 07H
DATA_ON4 BIT 08H
;關(guān)信號存在標(biāo)志---位變量(最多4位)
DATA_OFF1 BIT 09H
DATA_OFF2 BIT 0AH
DATA_OFF3 BIT 0BH
DATA_OFF4 BIT 0CH
;特殊結(jié)束位標(biāo)志---位變量
ES_END BIT 0DH
;T1益出標(biāo)志---位變量
TOF1 BIT 0EH
;密碼標(biāo)志---位變量
PW_FLAG BIT 0FH
;密碼正確標(biāo)志---位變量
PW_OK BIT 10H
;區(qū)別開關(guān)標(biāo)志---位變量
ON_OFF BIT 11H
;搜索停止標(biāo)志---位變量
SE_STOP BIT 12H
;2402應(yīng)答位
ACK BIT 13H
;**********************************************************************
ORG 0000H
JMP START0
ORG 0003H
RETI
ORG 000BH
JMP INT_T0
ORG 0013H
RETI
ORG 001BH
JMP INT_T1
ORG 0023H
RETI
;************************************************************************
;初始化
START0: MOV SP,#70H
MOV 0A2H,#00001000B ;允許SLEEP模式
MOV IE,#0FFH ;打開所有中斷
CLR IT0 ;外部中斷電平觸發(fā)
CLR IT1
CLR EX1
CLR ES
MOV TMOD,#01H ;T0---16位定時器模式
MOV TL0,#0B0H ;設(shè)置定時器周期
MOV TH0,#03CH ;(FFFFH-6B79H)*26.3=1S
SETB TR0 ;打開定時器
CLR GV_XSFLAG ;變量初始化
CLR GV_XMFLAG
CLR GV_XTMFLAG
CLR MINCON
CLR TMINCON
MOV GV_XS,#00H
MOV GV_XM,#00H
MOV GV_XTM,#00H
MOV RDATA_PO,#03H
MOV PW1,#00H
MOV PW2,#00H
MOV PW3,#00H
CLR PW_FLAG
CLR LED1
CLR PIK_HANG
MOV R0,#30H ;清內(nèi)存
MOV R1,#60H
START1: MOV @R0,#00H
INC R0
DJNZ R1,START1
LCALL BZ_MU
SETB LED1
MAIN_LOOP: LCALL KEY_IN
JB PH_RING,MAIN_LOOP1
LCALL PH_CON
MAIN_LOOP1: MOV 0A2H,#00001000B ;允許SLEEP模式
SETB EX0
ORL PCON,#02H ;進入SLEEP模式
AJMP MAIN_LOOP
;*****************************************************************
;定時器T0中斷服務(wù)子程序
int_T0: CLR TR0
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
SETB EA
INC SECCON ;秒計數(shù)+1
MOV A,SECCON
CJNE A,#20,timer_xms ;秒計數(shù) =20,分計數(shù)+1
INC MINCON
MOV SECCON,#0h
MOV A,MINCON
CJNE A,#60,timer_xs ;分計數(shù)=60,10分計數(shù)+1
INC TMINCON
MOV MINCON,#0h
MOV A,TMINCON
CJNE A,#10,timer_xm ;10分計數(shù)=10
MOV TMINCON,#0h
timer_xtm: JNB GV_XTMFLAG,timer_out ;10分級定時
MOV A,TMINCON
JNZ timer_out
DEC GV_XTM
MOV A,GV_XTM
JNZ timer_out
CLR GV_XTMFLAG
JMP timer_out
timer_xms: JNB GV_XMSFLAG,timer_xs ;分級定時
DEC GV_XMS
MOV A,GV_XMS
JNZ timer_xs
CLR GV_XMSFLAG
timer_xs: JNB GV_XSFLAG,timer_xm ;秒級定時
MOV A,SECCON
JNZ timer_xm
DEC GV_XS
MOV A,GV_XS
JNZ timer_xm
CLR GV_XSFLAG
timer_xm: JNB GV_XMFLAG,timer_out ;毫秒級定時
MOV A,MINCON
JNZ timer_out
DEC GV_XM
MOV A,GV_XM
JNZ timer_out
CLR GV_XMFLAG
timer_out: NOP
RETI
;**************************************************************************
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -