网站地图 | 加入收藏 | English

网站首页 产品列表 软件下载 技术资料 付款方式 发货查询 关于我们 淘宝商城 论坛
搜索 高级/组合搜索
网站新闻
所有新闻
HiFi音响文章
站内新闻
单片机工具资料
汇编程序实例
C语言程序实例
单片机提高资料
单片机初学资料
单片机软件下载
单片机技术资料
  您的位置: 首页 >> 文章列表 >> 采用AT89C2051的数字可调稳压电源单片机源程序

采用AT89C2051的数字可调稳压电源单片机源程序


作者:单片机爱好者   转载自:单片机工具之家  发布日期:2011-4-17

采用AT89C2051的数字可调稳压电源单片机源程序

ORG 0000H ;定位
LJMP MAIN ;跳转到MAIN主程序
;
ORG 0003H ;定位
LJMP IT_0 ;转入INT0的中断服务程序
;
ORG 000BH ;定位
LJMP IT_1 ;转入INT0的中断服务程序
;
ORG 0100H ;定位
MAIN: MOV R6,#32H ;将50送R6
ANL P3,#4FH ;将P3.4、P3.5、P3.7置为0,使输出电压为0.0V
MOV P1,#0FFH ;将0FFH送P1
SETB P3.0 ;将P3.0置1
CLR P3.1 ;将P3.1置0
MOV R2,#0CH ;将0CH送R2
LCALL DELAY ;调用DELAY延时子程序
SETB P3.1 ;将P3.1置1
CLR P3.0 ;将P3.0置0
MOV R2,#0CH ;将0CH送R2
LCALL DELAY ;调用DELAY延时子程序
DJNZ R6,MAIN ;若R6-1不等于0,跳转到MAIN
MOV P1,#00H ;将00H送P1
MOV R2,#25H ;延时1S
LCALL DELAY ;调用DELAY延时子程序
SETB EX0 ;开INT0中断
SETB EX1 ;INT1中断
SETB EA ;开CPU中断
SETB IT0 ;将INT0设为负边沿触发
SETB IT1 ;将INT0设为负边沿触发
MOV R7,#00H ;将00H送R7
LOOP: MOV A,R7 ;将R7值送A
MOV DPTR,#TABLE0 ;将TABLE0地址送DPTR
MOVC A,@A+DPTR ;查表,将查到的值送A
ANL P3,A ;将A值与P3值相与,结果送P3
MOV DPTR,#TABLE1 ;将TABLE1地址送DPTR
MOVC A,@A+DPTR ;查表,将查到的值送A
ORL P3,A ;将A值与P3值相或,结果送P3
MOV DPTR,#TABLE2 ;将TABLE2地址送DPTR
MOVC A,@A+DPTR ;查表,将查到的值送A
MOV P1,A ;将A值送P1
SETB P3.0 ;将P3.0置1
CLR P3.1 ;将P3.1置0
MOV R2,#0CH ;将0CH送R2
LCALL DELAY ;调用DELAY延时子程序
MOV DPTR,#TABLE3 ;将TABLE3地址送DPTR
MOVC A,@A+DPTR ;查表,将查到的值送A
MOV P1,A ;将A值送P1
SETB P3.1 ;将P3.1置1
CLR P3.0 ;将P3.0置0
MOV R2,#0CH ;将0CH送R2
LCALL DELAY ;调用DELAY延时子程序
SJMP LOOP ;跳转到LOOP循环
;
ORG 0200H ;定位
IT_0: MOV R2,#14H ;将14H置送R2
LCALL DELAY ;调用DELAY延时子程序(延时约为57ms)
JB P3.2,EXIT0 ;若INT0(P3.2)为1,说明为干扰信号,退出
INC R7 ;若INT0(P3.2)为0,将R7加1
CJNE R7,#07H,EXIT0 ;当R7值不为7时,跳转到EXIT0
MOV R7,#00H ;当R7值为7时,令R7等于0
EXIT0: RETI ;INT0中断返回
;
IT_1: MOV R2,#14H ;将14H置送R2
LCALL DELAY ;调用DELAY延时子程序(延时约为57ms)
JB P3.3,EXIT1 ;若INT1(P3.3)为1,说明为干扰信号,退出
DEC R7 ;若INT0(P3.3)为0,将R7减1
CJNE R7,#0FFH,EXIT1 ;当R7值不为0FFH时,跳转到EXIT1
MOV R7,#06H ;当R7值为0FFH时,令R7等于6
EXIT1: RETI ;INT1中断返回
;
TABLE0:DB 4FH,4FH,4FH,4FH,4FH,4FH,4FH,4FH ;控制信号
TABLE1:DB 00H,10H,20H,30H,80H,90H,0A0H,0B0H ;控制信号
TABLE2:DB 0CFH,0E6H,0EDH,0FDH,0EFH,03H ;第一数码管位显示信号
TABLE3:DB 3FH,6DH,3FH,3FH,3FH,5BH ;第二数码管位显示信号

;以下为通用延时子程序
;当R2=0CH时,延时约为10ms;当R2=14H时,延时约为57ms
DELAY:PUSH 02H ;将R2中的值推入堆笺
LP1: PUSH 02H ;将R2中的值推入堆笺
LP2: PUSH 02H ;将R2中的值推入堆笺
LP3: DJNZ R2,LP3 ;若R2-1不为0,跳转到LP3
POP 02H ;将堆笺中值弹出到R2中
DJNZ R2,LP2 ;若R2-1不为0,跳转到LP2
POP 02H ;将堆笺中值弹出到R2中
DJNZ R2,LP1 ;若R2-1不为0,跳转到LP1
POP 02H ;将堆笺中值弹出到R2中
DJNZ R2,DELAY ;若R2-1不为0,跳转到DELAY
RET ;子程序返回
END ;结束
    主程序MAIN中,从MOV P1,#0FFH到SETB EX0的前一行,其作用是刚开机时,让数码管显示全笔段,然后熄灭,以便于检查数码管的好坏,并做好准备。在初始化程序中,令IT0和IT1为1,是让INT0和INT1变为负边沿触发,以达到每按一次S1或S2(无论时间长短,当然时间必须超过57ms),输出电压和数码管改变一次。在LOOP循环中,先对P3相与后相或的目的是要将P3.4,P3.5,P3.7先清零后置位,相当于这一段代码就是一个简单的与或逻辑电路,具体操作情况读者可参照电路图自行分析。另外,主程序中的R7用于存放预设电压的序号,其值在0~6之间变化,每一个值对应一个电压值,依次为0—0.0V,1—3.0V,2—4.5V,3—5.0V,4—6.0V,5—9.0V,6—12V的电压。由于经常用的都是这些电压,所以上面几个电压对电子制作者来说已经足够了。TABLE0中存放控制信号,TABLE1中存放第一个数码管的字显示信号,TABLE2中存放第二个数码管的字显示信号。当按S1时,输出电压就按照上述电压依次增加;当按S2时,输出电压就依次减少。若此时电压为0.0V,再按S2就会使输出电压变为12V;反之,若此时电压为12V,再按S1就会使输出电压变为0.0V。

 


【版权声明】
  1.任何网站转载本站内容必需注明“来源:单片机工具之家”。
  2.本网转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
  3.未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
  4.违反上述声明者,本网将追究其相关法律责任。谢谢!

分享到:
更多


关于我们
网站介绍
联系我们
付款方式
银行汇款
货到付款
发货方式
快递运输
上门自提
售后服务
退换货政策
质保承诺
购买方式
购物流程
在线订购

公司名称:深圳市乾龙盛电子科技有限公司   永久域名:http://www.pic16.net  网站名称:单片机工具之家
公司地址:广东省深圳市宝安区龙华镇民治路牛栏前大厦15楼A1502室  电话:0755-28187975  13715306011  联系人:唐先生
展销柜台:广东省深圳市福田区新亚洲电子二期三楼N3D033室(华强电子世界附件)【查看地图】  联系电话:0755-82543360
:淘宝商店   :qls@cxqmcu.com   :qls@cxqmcu.com
销售点击Q我:243355504 (唐永红)先生   技术支持点击Q我:443935535 (钟先生)
网站版权:单片机工具之家  粤ICP备09028690号