基于晓程PL3107载波芯片的采集器系统软件源代码.docx
- 文档编号:6717096
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:81
- 大小:38.61KB
基于晓程PL3107载波芯片的采集器系统软件源代码.docx
《基于晓程PL3107载波芯片的采集器系统软件源代码.docx》由会员分享,可在线阅读,更多相关《基于晓程PL3107载波芯片的采集器系统软件源代码.docx(81页珍藏版)》请在冰豆网上搜索。
基于晓程PL3107载波芯片的采集器系统软件源代码
$NOMOD51
;------------------------------------------------------------------------------
;ThisfileispartoftheC51Compilerpackage
;Copyright(c)1988-2005KeilElektronikGmbHandKeilSoftware,Inc.
;Version8.01
;
;***<<
;------------------------------------------------------------------------------
;STARTUP.A51:
Thiscodeisexecutedafterprocessorreset.
;
;TotranslatethisfileuseA51withthefollowinginvocation:
;
;A51STARTUP.A51
;
;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing
;Lx51invocation:
;
;Lx51yourobjectfilelist,STARTUP.OBJcontrols
;
;------------------------------------------------------------------------------
;
;User-defined
;
;WiththefollowingEQUstatementstheinitializationofmemory
;atprocessorresetcanbedefined:
;
;
IDATAmemorysize<0x0-0x100>
;Note:
Theabsolutestart-addressofIDATAmemoryisalways0
;TheIDATAspaceoverlapsphysicallytheDATAandBITareas.
IDATALENEQU80H
;
;
XDATAmemorystartaddress<0x0-0xFFFF>
;TheabsolutestartaddressofXDATAmemory
XDATASTARTEQU0
;
;
XDATAmemorysize<0x0-0xFFFF>
;ThelengthofXDATAmemoryinbytes.
XDATALENEQU0
;
;
PDATAmemorystartaddress<0x0-0xFFFF>
;TheabsolutestartaddressofPDATAmemory
PDATASTARTEQU0H
;
;
PDATAmemorysize<0x0-0xFF>
;ThelengthofPDATAmemoryinbytes.
PDATALENEQU0H
;
;
;------------------------------------------------------------------------------
;
;
;
;ThefollowingEQUstatementsdefinethestackpointerforreentrant
;functionsandinitializedit:
;
;
;IBPSTACK:
EnableSMALLmodelreentrantstack
;StackspaceforreentrantfunctionsintheSMALLmodel.
IBPSTACKEQU0;setto1ifsmallreentrantisused.
;
EndaddressofSMALLmodelstack<0x0-0xFF>
;Setthetopofthestacktothehighestlocation.
IBPSTACKTOPEQU0xFF+1;default0FFH+1
;
;
;
;XBPSTACK:
EnableLARGEmodelreentrantstack
;StackspaceforreentrantfunctionsintheLARGEmodel.
XBPSTACKEQU0;setto1iflargereentrantisused.
;
EndaddressofLARGEmodelstack<0x0-0xFFFF>
;Setthetopofthestacktothehighestlocation.
XBPSTACKTOPEQU0xFFFF+1;default0FFFFH+1
;
;
;
;PBPSTACK:
EnableCOMPACTmodelreentrantstack
;StackspaceforreentrantfunctionsintheCOMPACTmodel.
PBPSTACKEQU0;setto1ifcompactreentrantisused.
;
;
EndaddressofCOMPACTmodelstack<0x0-0xFFFF>
;Setthetopofthestacktothehighestlocation.
PBPSTACKTOPEQU0xFF+1;default0FFH+1
;
;
;------------------------------------------------------------------------------
;
;MemoryPageforUsingtheCompactModelwith64KBytexdataRAM
;
;
;DefinetheXDATApageusedforPDATAvariables.
;PPAGEmustconformwiththePPAGEsetinthelinkerinvocation.
;
;Enablepdatamemorypageinitalization
PPAGEENABLEEQU0;setto1ifpdataobjectareused.
;
;
;uppermost256-byteaddressofthepageusedforPDATAvariables.
PPAGEEQU0
;
;
;most8051variantsuseP2asuppermostaddressbyte
PPAGE_SFRDATA0A0H
;
;
;------------------------------------------------------------------------------
;StandardSFRSymbols
ACCDATA0E0H
BDATA0F0H
SPDATA81H
DPLDATA82H
DPHDATA83H
NAME?
C_STARTUP
?
C_C51STARTUPSEGMENTCODE
?
STACKSEGMENTIDATA
RSEG?
STACK
DS1
EXTRNCODE(?
C_START)
PUBLIC?
C_STARTUP
CSEGAT0
?
C_STARTUP:
LJMPSTARTUP1
RSEG?
C_C51STARTUP
STARTUP1:
IFIDATALEN<>0
MOVR0,#IDATALEN-1
CLRA
IDATALOOP:
MOV@R0,A
DJNZR0,IDATALOOP
ENDIF
IFXDATALEN<>0
MOVDPTR,#XDATASTART
MOVR7,#LOW(XDATALEN)
IF(LOW(XDATALEN))<>0
MOVR6,#(HIGH(XDATALEN))+1
ELSE
MOVR6,#HIGH(XDATALEN)
ENDIF
CLRA
XDATALOOP:
MOVX@DPTR,A
INCDPTR
DJNZR7,XDATALOOP
DJNZR6,XDATALOOP
ENDIF
IFPPAGEENABLE<>0
MOVPPAGE_SFR,#PPAGE
ENDIF
IFPDATALEN<>0
MOVR0,#LOW(PDATASTART)
MOVR7,#LOW(PDATALEN)
CLRA
PDATALOOP:
MOVX@R0,A
INCR0
DJNZR7,PDATALOOP
ENDIF
IFIBPSTACK<>0
EXTRNDATA(?
C_IBP)
MOV?
C_IBP,#LOWIBPSTACKTOP
ENDIF
IFXBPSTACK<>0
EXTRNDATA(?
C_XBP)
MOV?
C_XBP,#HIGHXBPSTACKTOP
MOV?
C_XBP+1,#LOWXBPSTACKTOP
ENDIF
IFPBPSTACK<>0
EXTRNDATA(?
C_PBP)
MOV?
C_PBP,#LOWPBPSTACKTOP
ENDIF
MOVSP,#?
STACK-1
;ThiscodeisrequiredifyouuseL51_BANK.A51withBankingMode4
;
;SelectBank0forL51_BANK.A51Mode4
#if0
;Initializebankmechanismtocodebank0whenusingL51_BANK.A51withBankingMode4.
EXTRNCODE(?
B_SWITCH0)
CALL?
B_SWITCH0;initbankmechanismtocodebank0
#endif
;
LJMP?
C_START
END
#ifndef__BSP_H__
#define__BSP_H__
#include"pl3105.h"
#include"cpu.h"
#defineoff0ul
#defineon1ul
#definefalse0ul
#definetrue1ul
#definefree0ul
#definebusy1ul
#definedef_1200bps0ul
#definedef_2400bps1ul
#definedef_4800bps2ul
#definedef_9600bps3ul
#defineCOM_BUF_LEN40ul//串口接收缓冲区长度
#defineGBL_TICKS_PER_SEC100ul//每秒时钟滴答数
structdef_com{
int16sactv;//串口工作模式定义(0表示接收,非零表示发送剩余时间)
int16sdcnt;//串口缓冲区中有效数据个数
int8uwptr;//指向缓冲区中下一个数据写入的地址
int8urptr;//指向缓冲区中下一个数据读取的地址
int8udbuf[COM_BUF_LEN];//串口数据缓冲区
};
#ifdefGLOBAL
volatileint32sdatasys_ticks=2880000l;//系统运行滴答数(10ms*8*60*60*GBL_TICKS_PER_SEC),每8小时主动复位一次
volatilestructdef_comxdataplccom,infcom,plcrdm,infrdm,secrdm,*rdmcom=&secrdm;
#else
externvolatileint32sdatasys_ticks;
externvolatilestructdef_comxdataplccom,infcom,plcrdm,infrdm,secrdm,*rdmcom;
#endif
#defineset_time(ticks)((sys_ticks)-(int32s)(ticks))//设置一个时间
#definechk_time(ticks)((sys_ticks)<(int32s)(ticks))?
(true):
(false)//用于超时检测
#definefosc(9600000ul/2)//外部晶振为9.6M,cpu核执行速度为外部晶振一半(见手册)
/*
*********************************************************************************************************
*底程函数声明
*********************************************************************************************************
*/
sbitp1_5=P1^5;
sbitp1_6=P1^6;
#definegbl_isr_clse(void)(EA=0)//关闭中断
#definegbl_isr_open(void)(EA=1)//打开中断
#definefeed_dog(void)(WDT_RST=0xA1)//看门狗喂狗
#definefeed_plc(void)(PLM_RST=0xA2)//载波喂狗
//指示灯操作宏定义
#definerunled(void)(p1_5=!
p1_5)//运行指示灯
#definers485rcv(state)((on)==(state))?
((p1_6)=(0)):
((p1_6)=
(1))//RS485收发控制
externvoidsoftreset(void);
externvoidinfrared_init(void);
externvoidrs485_init(int8ubps);//打开下行485端口
externvoidsendbyte(structdef_com*com,int8uchr);
externvoidhdware_init(void);
#endif
#include"bsp.h"
#include"plc.h"
#include"lib.h"
#include"global.h"
voidsoftreset(void)
{
gbl_isr_clse();//关闭中断并进行死循环,等待看门狗溢出复位重启(872ms后复位)
while(true);
}
voidrs485_init(int8ubps)
{
SCON1=0xd0;//串口1工作方式3
TMOD1=(TMOD1&0xf0)|0x22;//T2设置为8位自动重装模式,T1时钟不分频
switch(bps){//波特率计算公式:
reg=256-(2^SMOD0*fosc)/(32*bps)
casedef_1200bps:
PCON=(STATUS&0xc0)&(~0x40);//串口波特率不加倍
TH2=0x83;
break;
casedef_2400bps:
PCON=(STATUS&0xc0)|0x40;//串口波特率加倍
TH2=0x83;
break;
casedef_4800bps:
PCON=(STATUS&0xc0)&(~0x40);//串口波特率不加倍
TH2=0xe1;
break;
casedef_9600bps:
PCON=(STATUS&0xc0)|0x40;//串口波特率加倍
TH2=0xe1;
break;
default:
PCON=(STATUS&0xc0)|0x40;//串口波特率加倍
TH2=0x83;
break;
}
ES1=1;TR2=1;//开串口1中断,并启动串口波特率发生定时器
}
staticvoidisr_rs485(void)interrupt6
{
if(1==ETI){
ETI=0;
if(0>=rdmcom->dcnt){
rs485rcv(on);
rdmcom->actv=0,rdmcom->dcnt=0;
rdmcom->rptr=0,rdmcom->wptr=0;
return;
}
rdmcom->dcnt=rdmcom->dcnt-1;
ACC=rdmcom->dbuf[rdmcom->rptr];
ETB8=P;//偶校验位
SBUF1=rdmcom->dbuf[rdmcom->rptr++];
if(COM_BUF_LEN==rdmcom->rptr){
rdmcom->rptr=0;
}
}
if(1==ERI){
ERI=0;
if(rdmcom->actv){
return;
}
rdmcom->dcnt=rdmcom->dcnt+1;
rdmcom->dbuf[rdmcom->wptr++]=SBUF1;
if(COM_BUF_LEN==rdmcom->wptr){
rdmcom->wptr=0;
}
}
}
staticvoidinfrared_init(void)
{
SCON=0xd0;//串口0工作方式3
TMOD=(TMOD&0x0f)|0x20;//T1设置为8位自动重装模式
TMOD1=TMOD1|0x10;//T1时钟不分频
PCON=(STATUS&0xc0)&(~0x80);//串口波特率不加倍
TH1=0x83;
ES=1;TR1=1;//开串口0中断,并启动波特率发生定时器
}
staticvoidisr_infrared(void)interrupt4
{
if(1==TI){
TI=0;
if(0>=infcom.dcnt){
IR38K=0,IR_CNT1=0x00;//关闭38k红外调制信号
infcom.actv=0,infcom.dcnt=0;
infcom.rptr=0,infcom.wptr=0;
return;
}
infcom.dcnt=infcom.dcnt-1;
ACC=infcom.dbuf[infcom.rptr];
TB8=P;//偶校验位
SBUF=infcom.dbuf[infcom.rptr++];
if(COM_BUF_LEN==infcom.rptr){
infcom.rptr=0;
}
}
if(1==RI){
RI=0;
if(infcom.actv){
return;
}
infcom.dcnt=infcom.dcnt+1;
infcom.dbuf[infcom.wptr++]=SBUF;
if(COM_BUF_LEN==infcom.wptr){
infcom.wptr=0;
}
}
}
voidsendbyte(structdef_com*com,int8uchr)
{
com->dcnt=com->dcnt-1;
com->rptr=com->rptr+1;
if(&infcom==com){
TI=0,ACC=chr;
TB8=P,SBUF=chr;
IR_CNT1=0x1f,IR38K=1;//打开38k红外调制信号
return;
}
if(rdmcom==com){
rs485rcv(off);
ETI=0,ACC=chr;
ETB8=P,SBUF1=chr;
re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 PL3107 载波 芯片 采集 系统软件 源代码