用89C52制作太阳电池数显充放电控制器070101.docx
- 文档编号:10300780
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:18
- 大小:41.45KB
用89C52制作太阳电池数显充放电控制器070101.docx
《用89C52制作太阳电池数显充放电控制器070101.docx》由会员分享,可在线阅读,更多相关《用89C52制作太阳电池数显充放电控制器070101.docx(18页珍藏版)》请在冰豆网上搜索。
用89C52制作太阳电池数显充放电控制器070101
;*********************************************
;用89C52制作太阳电池数显充放电控制器原程序
;
;**********************************************
;
;70H内存单元存放采样值,78H-7AH存放显示的BCD码数据,
;自然就依次为个位、十位和百位,模数转换器是ADC0809
;*************************************
;**
;*主程序和中断程序入口*
;**
;*************************************
ORG0000H;程序执行开始地址
LJMPSTART;跳至START执行
NOP;软件陷阱
NOP;
LJMPERR;
ORG0003H;外中断0中断入口地址
RETI;中断返回(不开中断)
NOP;
NOP;
LJMPERR;
ORG000BH;定时器T0中断入口地址
LJMPERR;
NOP;
NOP;
LJMPERR;
ORG0013H;外中断1中断入口地址
RETI;中断返回(不开中断)
NOP;
NOP;
LJMPERR;
ORG001BH;定时器T1中断入口地址
RETI;中断返回(不开中断)
NOP;
NOP;
LJMPERR;
ORG0023H;串行口中断入口地址
RETI;中断返回(不开中断)
NOP;
NOP;
LJMPERR;
ORG002BH;定时器T2中断入口地址
RETI;中断返回(不开中断)
NOP;
NOP;
LJMPERR;
;
;*************************************
;**
;*初始化程序中的各变量*
;**
;*************************************
CLEARMEMIO:
CLRA;累加器A清零
MOVP2,A;P2口置0
MOV70H,A;70H单元内存清0
MOVA,#0FFH;累加器A置1
MOVP0,A;P0、P1、P3端口置1
MOVP1,A;
MOVP3,A;
RET;子程序返回
NOP;
NOP;
LJMPERR;
;
;*************************************
;**
;*主程序*
;**
;*************************************
START:
MOVSP,#60H;
MOVPSW,#00H;
MOVSCON,#00H;
MOVTMOD,#01H;
SETBET0;
SETBPT0;
MOVTL0,#0FBH;
MOVTH0,#0FFH;
SETBTR0;
SETBET0;
LCALLCLEARMEMIO;初始化
MAIN:
LCALLDISPLAY;显示数据一次
LCALLTEST;测量一次
LCALLATT;
LCALLAQQ;
NOP;
NOP;
LCALLWATCH_DOG;
AJMPMAIN;返回MAIN循环
NOP;PC值出错处理
NOP;空操作
NOP;空操作
LJMPSTART;重新复位起动
NOP;
NOP;
LJMPERR;
WATCH_DOG:
MOVTL0,#0FBH;
MOVTH0,#0FFH;
SETBTR0;
RET;
NOP;
NOP;
LJMPERR;
;
;**********************************************
;将显示数据转换成十进制BCD码,并调显示子程序*
;**********************************************
DISPLAY:
MOVR0,#70H;显示数据初址(70H-77H)
MOVA,@R0;显示数据转为三位十进制BCD码存入
MOVB,#100;7AH、79H、78H显示单元内
DIVAB;显示数据除100
MOV7AH,A;商入7AH
MOVA,#10;A放入数10
XCHA,B;余数与数10交换
DIVAB;余数除10
MOV79H,A;商入79H
MOV78H,B;余数入78H
MOVR2,#0FFH;
DISLOOP2:
LCALLDISP;调四位LED显示程序
DJNZR2,DISLOOP2;
RET;
NOP;
NOP;
LJMPERR;
;*************************************************************************
;LED共阳显示子程序,显示内容在78H-7BH,数据在P1输出,列扫描在P3.0-P3.3口*
;*************************************************************************
DISP:
MOVR1,#78H;赋显示数据单元首址
MOVR5,#0FEH;扫描字
PLAY:
MOVP1,#0FFH;关显示
MOVA,R5;取扫描字
ANLP3,A;开显示
MOVA,@R1;取显示数据
MOVDPTR,#TAB;取段码表首址
MOVCA,@A+DPTR;查显示数据对应段码
MOVP1,A;段码放入P1口
CLRP1.7;开小数点
LCALLDL1MS;显示1MS
INCR1;指向下一地址
MOVA,P3;取P3口扫描字
JNBACC.2,ENDOUT;三位显示完转ENDOUT结束
RLA;扫描字循环左移
MOVR5,A;扫描字放入R5暂存,
MOVP3,#0FFH;显示暂停
SETBP3.0;
SETBP3.1;
SETBP3.2;
SETBP3.7;
AJMPPLAY;转PLAY循环,
MOVP3,#0FFH;显示结束,端口置1
ENDOUT:
SETBP3.0;
SETBP3.1;
SETBP3.2;
SETBP3.7;
MOVP1,#0FFH;
RET;子程序返回
NOP;
NOP;
LJMPERR;
;
;***********************************************************
;LED数码显示管用共阳段码表,分别对应0-9,最后一个是"熄灭符"*
;***********************************************************
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;***************************
;1MS延时子程序,LED显示用*
;***************************
DL1MS:
MOVR6,#14H;
DL1:
MOVR7,#19H;
DL2:
DJNZR7,DL2;
DJNZR6,DL1;
RET;
NOP;
NOP;
LJMPERR;
;
;*********************
;*模数转换测量子程序*
;*********************
TEST:
CLRA;累加器A清零
MOVP2,A;清P2口
MOVR0,#70H;转换值存放首址
LCALLTESTART;启动测试
WAIT:
JBP3.7,MOVD;P3.7=1则转MOVD处执行,等A/D转换结束信号后转MOVD
AJMPWAIT;P3.7为0等待
NOP;
NOP;
LJMPERR;
;
;****************
;测试启动子程序*
;****************
TESTART:
SETBP2.3;锁存测试通道地址
NOP;延时2微秒
NOP;
CLRP2.3;测试通道地址锁存完毕
SETBP2.4;启动测试,发开始脉冲
NOP;延时2微秒
NOP;
CLRP2.4;发启动脉冲完毕
NOP;延时4微秒
NOP;
NOP;
NOP;
RET;子程序调用结束
NOP;
NOP;
LJMPERR;
;
;*********************************
;取A/D转换数据至70H内存单元*
;*********************************
MOVD:
SETBP2.5;8090输出允许
MOVA,P0;将A/D转换值移入A
MOV@R0,A;放入70H内存单元
CLRP2.5;关闭8090输出
CLRA;A/D转换结束,恢复端口,累加器A清零
NOP;
MOVA,#0FFH;累加器A置1
MOVP0,A;P0口置1
MOVP1,A;P1口置1
RET;取A/D转换数据结束
NOP;
NOP;
LJMPERR;
;
;**********************************
;*比较采样值子程序*
;**********************************
AQQ:
MOVA,70H;
CLRC;
SUBBA,#73H;
JCQ1;
MOVA,70H;
SUBBA,#7DH;
JNCQ2;
CLRP2.7;在11.5V和12.5V之间开启放电开关
RET;
NOP;
NOP;
LJMPERR;
Q2:
CLRP2.7;大于12.5V时开启放电开关
RET;
NOP;
NOP;
LJMPERR;
Q1:
SETBP2.7;小于11.5V时关闭放电开关
MAIN0:
LCALLDISPLAY;显示数据一次
LCALLTEST;测量一次
LCALLATT0;
LCALLAQQ0;
NOP;
NOP;
AJMPMAIN0;返回MAIN循环
NOP;PC值出错处理
NOP;空操作
NOP;空操作
LJMPSTART;重新复位起动
NOP;
NOP;
LJMPERR;
;
;******************************************************
AQQ0:
MOVA,70H;
CLRC;
SUBBA,#73H;
JCQ10;
MOVA,70H;
SUBBA,#7DH;
JNCQ20;
SETBP2.7;在11.5V和12.5V之间关闭放电开关
RET;
NOP;
NOP;
LJMPERR;
Q10:
SETBP2.7;小于11.5V时关闭放电开关
RET;
NOP;
NOP;
LJMPERR;
Q20:
CLRP2.7;大于12.5V时开启放电开关
LJMPMAIN;
NOP;
NOP;
LJMPERR;
;
;***********************************************
ATT0:
MOVA,70H;
CLRC;
SUBBA,#87H;
JCTK10;
MOVA,70H;
SUBBA,#91H;
JNCTK20;
CLRP2.6;在13.5V和14.5V之间开启充电开关
RET;
NOP;
NOP;
LJMPERR;
TK10:
CLRP2.6;小于13.5V时开启充电开关
RET;
NOP;
NOP;
LJMPERR;
TK20:
SETBP2.6;大于14.5V时关闭充电开关
RET;
NOP;
NOP;
LJMPERR;
;
;***********************************************
ATT:
MOVA,70H;
CLRC;
SUBBA,#87H;
JCTK1;
MOVA,70H;
SUBBA,#91H;
JNCTK2;
CLRP2.6;在13.5V和14.5V之间开启充电开关
RET;
NOP;
NOP;
LJMPERR;
TK1:
CLRP2.6;小于13.5V时开启充电开关
RET;
NOP;
NOP;
LJMPERR;
TK2:
SETBP2.6;大于14.5V时关闭充电开关
MAIN1:
LCALLDISPLAY;显示数据一次
LCALLTEST;测量一次
LCALLATT1;
LCALLAQQ1;
NOP;
NOP;
AJMPMAIN1;返回MAIN循环
NOP;PC值出错处理
NOP;空操作
NOP;空操作
LJMPSTART;重新复位起动
NOP;
NOP;
LJMPERR;
;
;************************************************************
AQQ1:
MOVA,70H;
CLRC;
SUBBA,#73H;
JCQ11;
MOVA,70H;
SUBBA,#7DH;
JNCQ22;
CLRP2.7;在11.5V和12.5V之间开启放电开关
RET;
NOP;
NOP;
LJMPERR;
Q11:
SETBP2.7;小于11.5V时关闭放电开关
RET;
NOP;
NOP;
LJMPERR;
Q22:
CLRP2.7;大于12.5V时开启放电开关
RET;
NOP;
NOP;
LJMPERR;
;
;***********************************************
ATT1:
MOVA,70H;
CLRC;
SUBBA,#87H;
JCTK11;
MOVA,70H;
SUBBA,#91H;
JNCTK22;
SETBP2.6;在13.5V和14.5V之间关闭充电开关
RET;
NOP;
NOP;
LJMPERR;
TK11:
CLRP2.6;小于13.5V时开启充电开关
LJMPMAIN;
TK22:
SETBP2.6;大于14.5V时关闭充电开关
RET;
NOP;
NOP;
LJMPERR;
ERR:
CLRET0;
POPACC;
POPACC;
CLRA;
PUSHACC;
PUSHACC;
RETI;
NOP;
NOP;
LJMPERR;
ORG07FAH;
NOP;
NOP;
LJMPERR;
LJMPERR;
ORG00FFAH;
NOP;
NOP;
LJMPERR;
END;
*********
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 89 C52 制作 太阳电池 数显充 放电 控制器 070101
![提示](https://static.bdocx.com/images/bang_tan.gif)