微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机的315M接收头接收汇编程序(从机)

51单片机的315M接收头接收汇编程序(从机)

时间:11-28 来源:互联网 点击:

----------------------------

;以下为初始化程序

;----------------------------------------------------------------

CLEAR1:MOV P1MO,#P1MA ;P1端口状态

MOV P1M1,#P1MB

MOV SP,#50H ;设推栈初值

SETB FSDY ;关闭发射编码IC电源

SETB FSKZ

CLR FSDD ;发射电路不发射(D端为0)

CLR FSCC ;发射电路不发射(C端为0)

CLR FSBB ;发射电路不发射(B端为0)

CLR CGDY ;关传感器电源

CLR SPK1 ;关报警喇叭

RET

;----------------------------------------------------------------

;以下为进入防盗后AD转换后初始化程序

;----------------------------------------------------------------

CLEAR2:MOV P1MO,#P1MA ;P1端口状态

MOV P1M1,#P1MB

;MOV SP,#50H ;设推栈初值

SETB FSDY ;关闭发射编码IC电源

SETB FSKZ

CLR FSDD ;发射电路不发射(D端为0)

CLR FSCC ;发射电路不发射(C端为0)

CLR FSBB ;发射电路不发射(B端为0)

SETB CGDY ;开传感器电源

CLR SPK1 ;关报警喇叭

RET

;----------------------------------------------------------------

;以下为外中断(接收头收到信号)处理程序

;----------------------------------------------------------------

INT00:CLR EX0 ;关外中断

MOV A,P3 ;收到子机的反馈信号则判断是否正确

ANL A,#JSBM ;屏蔽P3.7、P3.6、P3.1、P3.0

MOV 34H,A

JNB JSVT,$ ;等待主机停止发射

;SETB EA ;开总中断允许

RETI

;----------------------------------------------------------------

;以下为处理程序

;----------------------------------------------------------------

;中断处理程序

INTT0:CLR EA ;关总中断

PUSH ACC ;进栈保护ACC数据

PUSH PSW ;进栈保护PSW数据

MOV TH0,#3CH ;设T1为100mS

MOV TL0,#0B0H

INC 30H ;ms时间计数器

MOV A,30H

CJNE A,#100,LOP2 ;计时计数器,10s进位1次

MOV 30H,#00H ;ms时间计数器清零,重新开始计时

MOV R0,#01H ;10s到标志

LOP2: POP PSW ;PSW出栈

POP ACC ;ACC出栈

SETB EA ;开总中断

RETI ;中断返回

;----------------------------------------------------------------

;以下为AD转换程序,监测电源电源

;----------------------------------------------------------------

;AD转换

ADAD:ACALL ADC_Power_On ;开ADC电源,第一次使用时要打开内部模拟电源

;开ADC电源,可适当加延时,1mS以内就足够了

ACALL Set_ADC_Channel_0 ;设置P1.0作为A/D转换通道

ACALL Get_AD_Result ;测量电压并且取A/D转换结果

MOV A, ADC_Chl0 ;A/D转换结果

RET

;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

ADC_Power_On:

PUSH ACC

ORL ADC_CONTR,#80H ;开A/D转换电源

MOV A, #20H

ACALL Delay ;开A/D转换电源后要加延时,ImS以内就足够了

POP ACC

RET

;┈┈┈┈┈┈┈┈┈┈┈

Set_ADC_Channel_0:

MOV ADC_CONTR,#ADC_Powerl0

;选择P1.0作为A/D转换通道

MOV A,#05H ;更换A/D转换通道后要适当延时,使输入电压稳定

;以后如果不更换A/D转换通道的话,不需要加延时

ACALL Delay ;切换A/D转换通道,加延时20uS~200uS就可以了,

;也输入电压源的内阻有关

;如果输入电压信号源的内阻在10K以下,可不加延时

RET

;┈┈┈┈┈┈┈┈┈┈┈

Get_AD_Result:

PUSH ACC ;入栈保护

MOV ADC_DATA,#0

ORL ADC_CONTR,#00001000B ;启动 AD 转换

Wait_AD_Finishe:

MOV A,#00010000B ;判断 AD 转换是否完成

ANL A,ADC_CONTR

JZ Wait_AD_Finishe ;AD 转换尚未完成,继续等待

ANL ADC_CONTR,#11100111B ;清0 ADC_FLAG,ADC_START位,停止A/D转换

MOV A,ADC_DATA

MOV ADC_Chl0,A ;保存 AD 转换结果

POP ACC

RET

;┈┈┈┈┈┈┈┈┈┈┈

Delay:

PUSH 02 ;将寄存器组0的R2入栈

PUSH 03 ;将寄存器组0的R3入栈

PUSH 04 ;将寄存器组0的R4入栈

MOV R4,A

Delay_Loop0:

MOV R3,#200 ;2 CL0CK┈┈┈┈┈┈┈┈+

Delay_Loop1: ;

MOV R2,#249 ;2 CL0CK┈+

Delay_Loop: ; │1002 CLOCK│200406 CLOCK

DJNZ R2, Delay_LooP ;4 CL0CK

DJNZ R3, Delay_LooP1 ;4 CL0CK ┈+

DJNZ R4, Delay_LooP0 ;4 CL0CK┈┈┈┈┈┈┈┈+

POP 04

POP 03

POP 02

RET

;----------------------------------------------------------------

;----------------------------------------------------------------

;以下为延时子程序

;----------------------------------------------------------------

;延时子程序

YS1: MOV R6,#100

Y11: MOV R7,#0FFH

Y12: NOP

NOP

NOP

DJNZ R7,Y12

DJNZ R6,Y11

RET

YS2: MOV R5,#08H ;中长时间延时

Y20: MOV R6,#0FFH

Y21: MOV R7,#0FFH

Y22: NOP

NOP

NOP

DJNZ R7,Y22

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top