⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学习型电话网络远程控制器源程序.asm.txt

📁 带红外学习功能的电话远程遥控
💻 TXT
📖 第 1 页 / 共 4 页
字号:
;产品名称:电话远程学习遥控器
;主控芯片: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 + -