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

📄 rx_demodulation.asm

📁 一个无线接收子程序,它接收一个2mS高2mS低电平起始位
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;判断低电平时间是多少 
;影响:
;****************************************************** 
low_pulse:   
    clr    pulse_ti
low_n0:     
    jbc    prot6,rx_dat 
    jmp    low_n0
low_n1:    
    call   del10us
    inc    pulse_ti      ;脉冲低电平时间 
    jbs    prot6,rx_dat
    jmp    low_n1 
    ret           
;******************************************************
;判断脉冲时间 
;判断脉冲时间是0.5mS还时1.5mS
;影响:
;******************************************************
det_pulse_ti:
    mov    a,@0x14     ;0x1e
    sub    a,pulse_ti
    jbs    status,c    ;不够减时C置1,够减时清0
    jmp    detpu_exit  ;小于300uS为无用信号 
    mov    a,@0x3c     ;0x46        
    sub    a,pulse_ti
    jbs    status,c    
    jmp    detpu_log1    ;小于700us为逻辑1
    mov    a,@0x6e     ;0x78
    sub    a,pulse_ti
    jbs    status,c
    jmp    detpu_exit  ;在700与1200uS之间为无用信号 
    mov    a,@0xaa     ;0xb4
    sub    a,pulse_ti
    jbc    status,c
    jmp    detpu_exit  ;大于1800uS为无用信号 
    bc     flag1,logic1
    bs     flag1,logic0 ;逻辑0有效 
    mov    a,pulse_ti
    mov    0x2d,a 
    bc     flag,error     
detpu_n0:   
    clr    pulse_ti 
    ret    
detpu_log1:    
    bs     flag1,logic1    ;置1逻辑信号 
    bc     flag1,logic0
    mov    a,pulse_ti
    mov    0x2e,a    
    bc     flag,error   
    jmp    detpu_n0
detpu_exit:
    bc     flag1,logic1
    bc     flag1,logic0
    bs     flag,error
    nop
    ret 
;******************************************************
;判断起始位脉冲时间 
;判断脉冲时间是不是2.5mS
;影响:
;******************************************************
det_spulse:
    mov    a,@0xb4     ;b4
    sub    a,pulse_ti
    jbs    status,c    ;不够减时C置1,够减时清0
    jmp    detsp_exit  ;小于2mS为无用信号 
    mov    a,@0xe6     ;dc   
    sub    a,pulse_ti
    jbc    status,c 
    jmp    detsp_exit  
    bs     flag1,start_fl ;置起始位有效标志 
    mov    a,pulse_ti
    mov    0x2f,a
    clr    pulse_ti 
    nop
    ret
detsp_exit:
    clr    pulse_ti
    bc     flag1,start_fl
    nop
    ret  
;******************************************************
;计算校验码 
;将地址与遥控信息码相加取最后8位 
;影响: 
;******************************************************
count_check:
    mov    a,add1
    add    a,add0
    add    a,rx_file
    sub    a,rx_check
    jbs    status,z    ;等于零时置1
    jmp    couc_exit
    bs     flag,ck_right
    nop
    ret
couc_exit:
    bc     flag,ck_right  
    nop  
    ret 
;******************************************************
;退出接收时清各相关寄存器 
;需要退出接收时执行 
;影响: 
;******************************************************
exit_rx:
    call  clr_rxreg
    mov   a,@0x08    ;0x0c
    mov   rfr_ti,a
    bc    prot5,en_rx ;关闭接收 
    jmp   main_sleep
;******************************************************
;清除接收数据寄存器 
;清除接收临时寄存器 
;影响:
;******************************************************
clr_rxreg:
    clr    flag1
    clr    rx_8bit
    clr    rx_data
    clr    add0          ;清除接收寄存器      
    clr    add1
    clr    rx_file
    clr    rx_check    
    ret                    
;******************************************************
;延时子程序 
;根据delh和dell中常数决定延时时间的长短 
;影响:wdt 
;延时时间=6+3*dell(uS) del_n0=5+3*delr(uS)
;******************************************************    	
delay: 
    mov    a,dell
    mov    delr,a
del_n0:   
    djz    delr
    jmp    del_n0 
    wdtc
	ret    
;******************************************************
;延时200mS
;作200mS延时 
;影响: 
;******************************************************    
del200ms:
    mov    a,@0xc8  ;200mS
    mov    temp,a
    mov    a,@0xa1
    mov    dell,a	
del2_n0:    
    call   delay  
    call   delay
    call   delay
    call   delay 
    djz    temp
    jmp    del2_n0
    ret	
;******************************************************
;提示音子程序 
;发2.0K40mS50%方波信号 
;影响: 
;******************************************************
buzzer:
    mov    a,@0xc8  ;40mS
    mov    temp,a
    mov    a,@0x94
    mov    dell,a
buz_n0:    
    bs     prot5,buz
    call   delay
    bc     prot5,buz
    call   delay    
    djz    temp
    jmp    buz_n0 
    ret  			    
;******************************************************
;中断服务子程序 
;LED模式40mS中断子程序 
;影响:rf a save tmr0
;******************************************************
int_ser:
    disi
    clr   rf
    mov   save,a
    mov   a,@0x63
    mov   tmr0,a 
    djz   rfr_ti
    jmp   int_exit
    jmp   exit_rx   
int_exit:    
    mov   a,save
    reti                
;******************************************************
;睡眠设置子程序 
;设置40mS WDT 
;影响:cont,wdtcg 
;******************************************************
int_sleep:
    mov    a,@0b00001001 ;睡眠40mS
    contw
    mov    a,@0b10000000 ;使能WDT
    iow    wdtcg     
    slep                 ;睡眠40mS
    nop
    jmp    main
;******************************************************
;定时中断设置子程序 
;LED模式定时中断设置子程序 
;影响:rf,tmr0,intcg,cont
;******************************************************    
int_timer:    
    clr    rf   
    mov    a,@0x63      ;20mS中断设置 
    mov    tmr0,a  
    mov    a,@0x01
    iow    intcg   
    mov    a,@0x07      ;分频比为256:1中断 
    contw
    eni  
    ret  
;******************************************************
;延时子程序 
;延时10us
;影响:delr
;******************************************************    	
del10us: 
    mov    a,@0x03
    mov    delr,a
del10u_n0:   
    djz    delr
    jmp    del10u_n0
    nop
	ret 	       
;***********************************
    org    0x3ff
    jmp    main
    end
;*******************************************************
;******************************************************
;特殊功能寄存器定义 
;******************************************************
	indf	equ	0x00  ;间址寻址寄存器 
	tmr0	equ    0x01  ;定时器基数寄存器 
	pc	  equ	0x02  ;程序计数器 
	status  equ    0x03  ;状态寄存器 
	fsr	 equ    0x04  ;间址寻址寄存器地址 
	prot5   equ    0x05  ;I/O口 P5
	prot6   equ    0x06  ;I/O口 P6
	rf      equ    0x0f  ;中断标志寄存器 
;******************************************************
;控制寄存器定义 IOCB~IOCF
;******************************************************;
    ioc5    equ    0x05  ;I/O口P5输入输出控制寄存器 
    ioc6    equ    0x06  ;I/O口P6输入输出控制寄存器 
    io6_pd  equ    0x0b  ;I/O口P6 P5下拉控制寄存器 
    io6_po  equ    0x0c  ;I/O口P6漏极开路控制寄存器 
    io6_ph  equ    0x0d  ;P6口上拉控制寄存器 
    wdtcg   equ    0x0e  ;Watch dog控制寄存器 
    intcg   equ    0x0f  ;中断屏蔽寄存器 
;******************************************************
;状态寄存器位定义 (STATUS) 
;******************************************************
	c       equ    0  ;进位位标志,加法进位时置一 
	dc      equ    1  ;辅助进位标志,低四位进位置一 
	z       equ    2  ;零标志位,运算结果为零时置一 
	p       equ    3  ;低功耗位,WDTC或上电时置一, 
	                  ;SLEEP时清零 
	t       equ    4  ;溢出位,SLEEP WDTC或上电置一 
	                  ;WDT溢出时清零 
    gp0     equ    5  ;通用读写位 
    gp1     equ    6  ;通用读写位	                  
	rst     equ    7  ;复位类型位,引脚变从休眠唤醒置一 
	                  ;其它清零   	
;******************************************************
;中断状态寄存器位定义 (RF) 
;******************************************************
    tcif    equ    0  ;TCC溢出置一,需要软件清零 
    icif    equ    1  ;P6口输入变化中断置一,软清零 
    exif    equ    2  ;INT引脚下降沿置一,软清零	        
;******************************************************
;控制寄存器位定义 (CONT) 
;******************************************************
    psr0    equ    0  ;PSR2  PSR1  PSR0
    psr1    equ    1  ;00(TCC 1:2 WDT 1:1)
    psr2    equ    2  ;07(TCC 1:256 WDT 1:256)
    pab     equ    3  ;零分配给TCC,1分配给WDT
    te      equ    4  ;零表示TCC^时加1,一表示v时加1
    ts      equ    5  ;TCC源选择,0为内部指令,1为外部 
                      ;输入 
    inten   equ    6  ;中断允许标志需由ENI置1,DISI清零            
;******************************************************
;I/O下拉控制寄存器位定义 (io6_pd) 
;******************************************************
    pd50    equ    0  ;P50内部下拉,0为下拉,1为禁止 
    pd51    equ    1  ;P51内部下拉,0为下拉,1为禁止 
    pd52    equ    2  ;P52部下拉,0为下拉,1为禁止 
    pd60    equ    4  ;P60内部下拉,0为下拉,1为禁止 
    pd61    equ    5  ;P61部下拉,0为下拉,1为禁止 
    pd62    equ    6  ;P62内部下拉,0为下拉,1为禁止          
;******************************************************
;I/O漏极开路控制寄存器位定义(io6_po)
;******************************************************
    od60    equ    0  ;P6口漏极开路功能,0使能1禁止 
    od61    equ    1
    od62    equ    2
    od64    equ    4
    od65    equ    5
    od66    equ    6
    od67    equ    7 
;******************************************************
;I/O上拉控制寄存器位定义(io6_ph)
;******************************************************
    ph60    equ    0  ;P6口上拉控制,0使能1禁止 
    ph61    equ    1
    ph62    equ    2
    ph64    equ    4
    ph65    equ    5
    ph66    equ    6
    ph67    equ    7 
;******************************************************
;WDT控制寄存器位定义(wdtcg)
;******************************************************
    wdte    equ    7  ;WDT使能控制,0为禁止1为使能 
    eis     equ    6  ;P60引脚功能定义,0为P60 1为INT
;******************************************************
;中断屏蔽控制寄存器位定义(intcg)
;******************************************************
    tcie    equ    0  ;TCC中断控制位,1使能0禁止 
    icie    equ    1  ;P6口电平变化中断,1使能0禁止 
    exie    equ    2  ;外部中断控制位,1使能0X
;*********

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -