?? 學習型電話網絡遠程控制器源程序.asm.txt
字號:
;產品名稱:電話遠程學習遙控器
;主控芯片: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---高位進位標志 AC---輔助進位標志 FO---用戶標志 *
;*RS1、RS0----寄存器區選擇 00 第0區 00~07H *
;*OV---逸出標志位 P----奇偶校驗標志位 *
;*************************************************************2
;*與定時器、中斷有關的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計數方式 *
;*GATE---=0定時器計數不受INT控制 =1受控制 INT=1充許計數 *
;*************************************************************3
;*TCON: D7 D6 D5 D4 D3 D2 D1 D0 (88H) *
;* TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 *
;*TR---運行控制位 =1啟動 =0關閉 TF---定時器益出標志位=1溢出 *
;*IT---中斷方式控制 =0電平 =1邊沿 IE---外部中斷標致 =1中斷 *
;* 也是定時器中斷源,響應中斷時硬件自動清0 *
;*************************************************************4
;*與串口有關的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發送第9位*
;*TB8---方式2.3接收第9位 TI---發送中斷標志 *
;*RI---發送中斷標志 *
;*************************************************************5
;*PCON: D7 D6 D5 D4 D3 D2 D1 D0 (97H) *
;* SMOD *
;*SMOD---波特率選擇位 =1加倍 *
;* *
;*************************************************************6
;*與中斷有關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有兩個中斷優先級 以上位=1時為高優先級 =0時為低優先級 *
;*同優先級順序如下:由高到低 外部中斷0----定時器T0中斷----- *
;*外部中斷1----定時器T1中斷-----串行口中斷----T2中斷 *
;*************************************************************8
;*與定時器2有關SFR說明 *
;*T2CON: D7 D6 D5 D4 D3 D2 D1 D0 (C8H) *
;* TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 *
;*TF2---定時器益出標志位=1溢出 須軟件清0 EXF2---T2外部標志 *
;*RCLK---接收時鐘標志 TCLK---發送鐘標志 EXEN2---T2產生捕獲*
;或重裝外部使能標志 TR2---T2運行控制位 =1啟動 =0關閉 *
;C/T2---=0定時=1計數方式 CP/RL2--- 捕獲重裝標志 *
;*************************************************************
;*************************************************************
;常量定義
;-------------------------------------------------------------
;DTMF轉換后BCD碼輸入
DTMF_1 EQU P2.0
DTMF_2 EQU P2.1
DTMF_3 EQU P2.2
DTMF_4 EQU P2.3
;DTMF轉換請求
DTMF_REQ EQU P2.4
;蜂鳴器
BZ_AUD EQU P2.5
;LED指示
LED1 EQU P2.6
;音頻發送
BZ_AUD1 EQU P2.7
;電話振鈴檢測
PH_RING EQU P3.5
;振鈴次數選擇
JP1 EQU P3.6
;
JP2 EQU P3.7
;紅外發射
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有關常量
;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解碼數據----5位
D_DATA1 EQU 15H
D_DATA2 EQU 16H
D_DATA3 EQU 17H
D_DATA4 EQU 18H
D_DATA5 EQU 19H
;-------------------------------------------------------------
;DTMF解碼計數
DTMF_CON EQU 1AH
;-------------------------------------------------------------
;DTMF操作計數
OPER_CON EQU 1BH
;-------------------------------------------------------------
;振鈴次數計數
RING_CON EQU 1CH
;-------------------------------------------------------------
;遙控碼數據指針------為3時轉向學習碼
RDATA_PO EQU 1DH
;-------------------------------------------------------------
;與2402有關變量
BITCNT EQU 50H
BYTECNT EQU 51H
SLAADR EQU 52H ;從器件地址
SUBADR EQU 53H ;2402內部地址
RCVDAT EQU 54H ;發送數據單元首地址(如果地址不定,可定義為變量間接尋址)
XMTDAT EQU 55H ;接收數據單元首地址
;-------------------------------------------------------------
;測量遙控碼有關變量定義
;測量遙控碼引導脈沖低電平寬度
RLEAD_LWH EQU 30H
RLEAD_LWL EQU 31H
;測量遙控碼引導脈沖高電平寬度
RLEAD_HWH EQU 32H
RLEAD_HWL EQU 33H
;測量遙控碼數據脈沖低電平寬度
RDATA_LWH EQU 34H
RDATA_LWL EQU 35H
;測量遙控碼數據脈沖高電平寬度1
RDATA_HWH1 EQU 36H
RDATA_HWL1 EQU 37H
;測量遙控碼數據脈沖高電平寬度2
RDATA_HWH2 EQU 38H
RDATA_HWL2 EQU 39H
;測量遙控碼數據脈沖高電平寬度3
RDATA_HWH3 EQU 3AH
RDATA_HWL3 EQU 3BH
;測量遙控碼數據脈沖高電平計數<10ms
RDATA_LCON EQU 3CH
;測量遙控碼經分析處理后的數據,低位在前,最多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
;測量好的遙控碼數據按以上順序放在50H-6FH,70H-8FH的內存單元,32個一組,共能存2組
;----------------------------------------------------------------
;定時器有關變量定義
;1秒計時變量
SECCON EQU 24H
;1分計時變量
MINCON EQU 25H
;10分計時變量
TMINCON EQU 26H
;xM秒定時控制變量
GV_XMS EQU 27H
;XM秒定時標致,位變量
GV_XMSFLAG BIT 00H
;x秒定時控制變量
GV_XS EQU 28H
;X秒定時標致,位變量
GV_XSFLAG BIT 01H
;x分定時控制變量
GV_XM EQU 29H
;X分定時標致,位變量
GV_XMFLAG BIT 02H
;x個10分定時控制變量,24小時值為0-144
GV_XTM EQU 2AH
;X個10分定時標致,位變量
GV_XTMFLAG BIT 03H
;---------------------------------------------------------------------
;學習成功標志---位變量
STUDY_OK BIT 04H
;開信號存在標志---位變量(最多4位)
DATA_ON1 BIT 05H
DATA_ON2 BIT 06H
DATA_ON3 BIT 07H
DATA_ON4 BIT 08H
;關信號存在標志---位變量(最多4位)
DATA_OFF1 BIT 09H
DATA_OFF2 BIT 0AH
DATA_OFF3 BIT 0BH
DATA_OFF4 BIT 0CH
;特殊結束位標志---位變量
ES_END BIT 0DH
;T1益出標志---位變量
TOF1 BIT 0EH
;密碼標志---位變量
PW_FLAG BIT 0FH
;密碼正確標志---位變量
PW_OK BIT 10H
;區別開關標志---位變量
ON_OFF BIT 11H
;搜索停止標志---位變量
SE_STOP BIT 12H
;2402應答位
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 ;外部中斷電平觸發
CLR IT1
CLR EX1
CLR ES
MOV TMOD,#01H ;T0---16位定時器模式
MOV TL0,#0B0H ;設置定時器周期
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 ;清內存
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中斷服務子程序
int_T0: CLR TR0
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
SETB EA
INC SECCON ;秒計數+1
MOV A,SECCON
CJNE A,#20,timer_xms ;秒計數 =20,分計數+1
INC MINCON
MOV SECCON,#0h
MOV A,MINCON
CJNE A,#60,timer_xs ;分計數=60,10分計數+1
INC TMINCON
MOV MINCON,#0h
MOV A,TMINCON
CJNE A,#10,timer_xm ;10分計數=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
;**************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -