📄 学习型电话网络远程控制器源程序.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 + -