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

合集下载

单片机AT89C2051风扇定时阵风控制器源程序

单片机AT89C2051风扇定时阵风控制器源程序

; AT89C2051风扇定时阵风控制器源程序(三位数)显示OK!!; p3.2=阵风设置开关; 硬件:P3.0=-1键、P3.1=功能键、P3.5=个位显示、; P3.4=十位显示、P3.3=百位显示、P3.7=输出端org 0000hajmp mainnoporg 01bhajmp dszdljmp 0000hnopnopajmp 0000horg 30hmain: mov 40h,#00hmov 41h,#00hmov 42h,#00h ;个位显示数据mov 43h,#00h ;十位显示数据mov 44h,#06h ;佰位显示数据mov 45h,#00hmov 46h,#00hmov 4ah,#09hmov 4bh,#09hmov 4ch,#09hmov r5,#00hnca equ 48hsetb p3.0setb p3.1setb p3.2mov sp,#50hmov tmod,#10hmov ie,#88hmov tl1,#37hmov th1,#70hsetb tr1clr p3.7clr ncanopnopdisp:;动态显示mov dptr,#tabclr p3.4clr p3.3mov a,42hanl p1,#01horl p1,ajb nca,xsz1setb p3.5lcall ms10acall keyclr p3.5clr p3.3mov a,43hmovc a,@a+dptranl p1,#01horl p1,ajb nca,xsz2setb p3.4lcall ms10acall keyclr p3.5clr p3.4mov a,44hmovc a,@a+dptranl p1,#01horl p1,ajb nca,xsz3setb p3.3lcall ms10ajmp dispnopnopajmp dispxsz1: cjne r5,#01h,xsz2 xsa: clr p3.4clr p3.3mov a,42hmovc a,@a+dptranl p1,#01horl p1,asetb p3.5acall ms10acall keyxsz2: cjne r5,#02h,xsz3 xsb: clr p3.5clr p3.3mov a,43hanl p1,#01horl p1,asetb p3.4acall ms10acall keyxsz3: cjne r5,#03h,disp xsc: clr p3.5clr p3.4mov a,44hmovc a,@a+dptranl p1,#01horl p1,asetb p3.3acall ms10acall keyajmp dispnopnopajmp disp dszd:;定时计数中断子程序clr tr1setb rs0push pswpush accmov tl1,#37hmov th1,#70hsetb tr1inc 40hmov r0,40hcjne r0,#8,timmov 40h,#00hcpl p1.0jb p3.2,zf0inc 46hmov r6,46hcjne r6,#30h,t11cpl p3.7mov 46h,#00hajmp t11zf0: clr p3.7t11: inc 41hmov r0,41hcjne r0,#60,timmov 41h,#00hmov r0,42hcjne r0,#00,tiaajmp tibtia: dec 42hajmp timtib: mov r1,43hcjne r1,#00,ticajmp tidtic: dec 43hmov 42h,#09hajmp timtid: mov r2,44hcjne r2,#00,tiemov p1,#0ffhsetb p3.7clr p1.0clr tr1mov 46h,#00hmov 42h,#0ahmov 43h,#0ahmov 44h,#0ah ajmp timtie: dec 44hmov 43h,#09hmov 42h,#09h tim: pop accpop pswretinopnopretikey:;-按键扫描处理nopnopacall ms10k0: jb p3.1,k1acall ms10acall ms10acall ms10acall ms10jnb p3.1,szljmp k1nopnopljmp k1sz: jnb p3.1,$acall ms10acall ms10setb ncasetb p3.7inc 45hmov r5,45hk1: cjne r5,#01h,k2mov 46h,#00hmov ie,#00hjb p3.0,fhacall ms10acall ms10jnb p3.0,ct1k2: cjne r5,#02h,k3mov 46h,#00hmov ie,#00hjb p3.0,fhacall ms10acall ms10jnb p3.0,ct2k3: cjne r5,#03h,k4mov 46h,#00hmov ie,#00hjb p3.0,fhacall ms10acall ms10jnb p3.0,ct3k4: cjne r5,#04h,fhmov r5,#00hljmp qdnopnopljmp qdfh: retnopnopretct1:;个位定时减jnb p3.0,$mov r4,4ahdec 4ahcjne r4,#00h,ct1amov 4ah,#09hct1a: m ov 42h,4ahret;nopnopretct2:;十位定时减jnb p3.0,$mov r4,4bhdec 4bhcjne r4,#00h,ct2amov 4bh,#09hct2a: m ov 43h,4bhretnopnopretct3:;佰位定时减jnb p3.0,$mov r4,4chdec 4chcjne r4,#00h,ct3amov 4ch,#09hct3a: m ov 44h,4chretnopnopretqd: mov 46h,#00h mov 45h,#00hmov 42h,4ahmov 43h,4bhmov 44h,4chmov ie,#88hsetb tr1clr p3.7clr ncaretnopnopretms10:;- 延时毫秒mov r0,#100ms: nopdjnz r0,msretnopnoprettab: db 80h,0f2h,48h,60h,32h,24hdb 04h,0f0h,00h,20h,7ehendkg bit B.1 ;用来判断开机等待t bit B.2 ;用来判断正反转,t=1正转,t=0反转w bit B.3 ;用来辅助正反转判断,选择了就为1,不选则为0KK1 BIT B.4 ;用来辅助加速按键,使其不用延时可以按一次速度指甲一档KK2 BIT B.5 ;同上cctv bit b.7 ;用来辅助中断显示程序计时org 0000hlJMP MAINORG 000BHLJMP CTC0ORG 0034hGraphemic:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H ,86H,84H,0FFH;共阳0~9字型码;PN1 EQU 30H ;PN1用来记脉冲的低二位数;PN2 EQU 31H ;PN2用来记脉冲的高二位数PN3 EQU 32H ;PN3用来做延时程序PN4 EQU 33H ;PN4用来做延时程序ORG 100HMAIN:MOV R6,#00H ;用R6来辅助显示计时MOV B, #00HCLR KGCLR WMOV TMOD,#01H ;T1和T0都是方式一计数MOV TL0,#18HMOV TH0,#0E0H;MOV TL1, #0AFH; MOV TH1, #3CHSETB EASETB ET0 ;T0中断允许SETB TR0SETB P3.4; SETB ET1 ;T1中断允许;SETB TR1SETB PT0 ;设置T1T2的中断优先,都设其为高级中断; SETB PT1MOV R1,#5H ;默认开始的时候速度为5档SETB KK1SETB KK2MOV A,#00H ;把PN1,PN2都清零;MOV PN1,A; MOV PN2,AMOV DPTR,#GraphemicANL P1,#0FH;ANL P0,#00Hmainline:jb p2.2,ks ;关机等待clr wclr kgsetb p1.0setb p1.1clr p1.2clr p1.3ks: jnb kg,wait ;是否开机?开了就往下执行,不开就跳到开机等待ANL P1,#00011111B ;显示最后一位为1,即是可以工作了的意思SETB P1.4MOV A,#1HMOVC A,@A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYSPD2:JB P2.1,KEY1CLR KK1KEY1: JNB P2.1,KEY2 ;当p2.1高电平时就往下执行,但是只要执行一次后,kk就为1,往后就不再执行JB KK1, KEY2INC R1SETB KK1 ;这段的任务是不用延时也能消除按键抖动的程序KEY2: JB P2.4,KEY3CLR KK2KEY3: JNB P2.4,posJB KK2, posSETB KK2DEC R1pos: jb p2.0,rev ;正转按钮setb tsetb wrev: jb p2.3,tt ;反转按钮clr tsetb wtt: jnb w,pos ;选择正反转了吗,选了电机就开始转了,不选电机就不转,等待正反转按钮jb t,positivejnb t,reversepositive: ;电机正转setb p1.0clr p1.1clr p1.2setb p1.3lcall BIJIAO0 ;PWM调制; lcall ShowSpeed ;显示速度程序LCALL showdigit1Ljmp mainlinereverse: ;电机反转clr p1.0setb p1.1setb p1.2clr p1.3lcall BIJIAO0 ;PWM调制; lcall ShowSpeed ;显示速度程序LCALL showdigit2Ljmp mainlinewait: mov a,#00h ;如果不开始,那么程序就在这里等待, mov p0,await1: setb p0.6setb p0.7anl p1,#0fhsetb p1.4setb p1.5setb p1.6setb p1.7SETB P3.6NOPCLR P3.6lcall delayjb p2.5,wait1 ;开机等待setb kgLjmp mainlineshowdigit1:ANL P1,#10001111B ;显示12在首位SETB P1.7MOV A,#1HMOVC A,@A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYANL P1,#01001111BSETB P1.6MOV A,#2HMOVC A,@A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYRETshowdigit2:ANL P1,#10001111B ;显示21在首位 SETB P1.7MOV A,#2HMOVC A,@A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYANL P1,#01001111BSETB P1.6MOV A,#1HMOVC A,@A+DPTRMOV P0,ASETB P3.6NOPNOPCLR P3.6LCALL DELAYRETBIJIAO0: MOV A,R1SUBB A,#0H JZ JJ0BIJIAO1: MOV A,R1SUBB A,#1H JZ JJ1BIJIAO2: MOV A,R1SUBB A,#2H JZ JJ2BIJIAO3: MOV A,R1SUBB A,#3H JZ JJ3BIJIAO4: MOV A,R1SUBB A,#4H JZ JJ4BIJIAO5: MOV A,R1SUBB A,#5H JZ JJ5BIJIAO6: MOV A,R1SUBB A,#6HJZ JJ6BIJIAO7: MOV A,R1SUBB A,#7HJZ JJ7BIJIAO8: MOV A,R1SUBB A,#8HJZ JJ8BIJIAO9: MOV A,R1SUBB A,#9HJZ JJ9BIJIAO10:MOV A,R1SUBB A,#0AHJZ JJ10MOV A,R1 ;如果R1的值小于零,则速度和pwm0的速度不变。

毕业设计(论文)-基于AT89C2051单片机的智能快速充电器设计

毕业设计(论文)-基于AT89C2051单片机的智能快速充电器设计

摘要本设计讨论了镍镉、镍氢电池的充电问题,以此为基础设计了一个快速充电器。

论文中首先介绍了镍镉、镍氢电池各自的特点以及它们的充电特性,研究了几种常用的充电方法和充电终止控制方法,分析了这几种方法各自的优缺点。

基于以上分析,本设计采用了一种较好的充电终止控制方法——电压负增量控制方法,以AT89C2051单片机为核心设计了一个智能快速充电器。

该充电器主要利用模数转换,将电池电压这一模拟量转换为单片机定时器中的数字量,经过数字量的运算、比较,对电池的工作状态进行判断,并相应地采取不同的充电方法。

其中快速充电过程采用了大电流脉冲充放电的方法,消除了电池极化反应这一现象,充电过程中检测电路检测到电池出现负压后,快速充电终止。

关键词:电压负增量;快速充电;模数转换AbstractThe reference design discusses the issue of charge for NiCd/NiMH batteries; on this basis a quick charger is designed. The characteristic and charge feature of them are introduced, some kind of charging method and stop-charge controlling method are particularly investigated,The advantages and disadvantages of them are analyzed. Based on the analysis above, a kind of well controlling method is adopted (-ΔV) and an intelligent quick charger based on AT89C2051 single-chip microcomputer designed. This charger uses the A/D conversion, changing analogical quantity of batteries voltage into digital quantity of timer in single-chip microcomputer. After operating and comparing of this digital quantity, it judges the state of batteries, accordingly adopts different charge method. To eliminate the effect of polarization, it uses large current pulse to conduct charging and discharging. Quick charge stops after negative voltage appearing during the process of charge.Key words:Negative voltage increment;Quick charge;A/D conversion前言最近几年以来,数码技术的发展使人们对能源的要求越来越高,作为能源市场上的佼佼者,性价比高的镍镉镍氢电池可满足很多方面的需求,得到了众人的青睐,各种镍镉镍氢电池的充电器也得到了很大发展。

基于AT89C2051单片机的数字电容表设计

基于AT89C2051单片机的数字电容表设计

第1章绪论随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一。

由于单片机适用与机,电,仪一体化的智能产品,它具有精度高,低功耗,控制功能强,小巧等优点。

把它用到仪器仪表上,可使产品的体积缩小,功能增强,实现不同程度的智能化。

因而受到人们高度重视,并取得了一系列科研成果,成为传统工业技术改造和新产品更新换代的理想机种,更有广阔的发展前景。

数字电容表就是单片机应用的一个实例,在实际应用中给人民带来了极大的便利。

测量电容器充电达到该电压的时间,便能知道充电器的容量。

现在国内市场上上海,广东等电子科技发达地区比较火爆,而在国际上则是日本,美国,德国的产品处于领先地位。

近年来随着国内电子事业的飞速发展,广东,台湾等地的产品已经赶上或是接近了国际先进水平,其精确度,稳定性,以及多功能的设计得到了人们的认可,被越来越多的工作者所接受。

本文介绍了一种对电容器进行数字测量的设计方案,数字电容表采用AT89C2051单片机做编程控制器,实现对电容器的测量。

此仪器是一种性能价格比高的具有结构简单,精度高的智能仪表。

其量程范围采用3位半数字显示,最大显示值为1999,读数单位统一采用毫微法(nf),量程分四挡,实际电容值为读书乘以相应的倍数;测量误差各挡误差均小于0.5%;显示方式为4位LED显示,并具有超量程显示功能。

第2章系统组成框图由图一可知,本电容表的硬件电路由AT89C2051单片机、复位电路、时钟振荡电路、电源滤波电路、键盘扫描电路、数码管显示电路、测试电路以及电源电路组成。

其中89C2051单片机是中央计算处理器,它内中ROM烧录了程序,它统一调度和管理所有接口电路工作。

复位电路是为单片机提供复位信号而设计的。

时钟振荡电路是为单片机提供时钟振荡信号而设计的。

电源滤波电路是为系统抗高频或低频干扰而设计的。

键盘扫描电路是为扫描人机键盘接口而设计的。

数码管显示电路是为显示测量结果而设计的。

测试电路是为测试电容冲充电且电容充电过程中与基准电压比较而知道电容充电完毕而设计的。

AT89C2051中文资料(非常完整)

AT89C2051中文资料(非常完整)

A T89C2051中文资料电子驿站http:// E-mail: support@AT89C2051是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-5l指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大。

AT89C2051单片机可为您提供许多高性价比的应用场合。

·与MCS-51产品指令系统完全兼容·2k字节可重擦写闪速存储器·1000次擦写周期·2.7V-6V的工作电压范围·全静态操作:0Hz-24MHz·两级加密程序存储器·128×8字节内部RAM·15个可编程I/O口线·2个l6位定时/计数器·6个中断源·可编程串行UART通道AT89C2051 ·可直接驱动LED的输出端口·内置一个模拟比较器·低功耗空闲和掉电模式功能特性概述:AT89C2051提供以下标准功能:2k字节Flash闪速存储器,128字节内部RAM,15个I/O口线,两个16位定时/计数器,—个5向量两级中断结构,一个全双工串行通信口,内置—个精密比较器,片内振荡器及时钟电路。

同时,AT89C2051可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

方框图引脚功能说明·Vcc:电源电压·GND:地·P1口:P1口是一组8位双向I/O口,P1.2-P1.7提供内部上拉电阻,P1.0和P1.1内部无上拉电阻,主要是考虑它们分别是内部精密比较器的同相输入端(AIN0)和反相输入端(AIN1),如果需要应在外部接上拉电阻。

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

AT89C2051的数字可调稳压电源单片机源程序
采用AT89C2051的数字可调稳压电源单片机源程序
ORG 0000H ;定位
LJMP MAIN ;跳转到MAIN主程序
;
ORG 0003H ;定位
LJMP IT_0 ;转入INT0的中断服务程序
;
ORG 000BH ;定位
LJMP IT_1 ;转入INT0的中断服务程序
;
ORG 0100H ;定位
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中断返回
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。

AT89C2051原理介绍

AT89C2051原理介绍

AT89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们开发简单的产品时用不了全部32个I/O 口,用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电的便携式产品。

本文以ATMEL公司生产的51系列家族的AT89S51和AT89C2051两种单片机来讲解,两种单片机是目前最常用的单片机,其中AT89S51为标准51单片机,当然其功能比早期的51单片机更强大,支持ISP 在系统编程技术,内置硬件看门狗。

一、AT89S51单片机引脚介绍AT89S51有PDIP、PLCC、TQFP三种封装方式,其中最常见的就是采用40Pin封装的双列直接PDIP封装,外形结构下图。

芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口(见图)左边那列引脚逆时针数起,依次为1、2、3、4。

40,其中芯片的1脚顶上有个凹点(见右图)。

在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。

1、主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线2、外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端3、控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

4、可编程输入/输出引脚(32根)AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

基于单片机AT89C51的数字稳压电源毕业论文

基于单片机AT89C51的数字稳压电源毕业论文

目录摘要 (1)一、前言 (1)1.1课题背景及意义 (5)二、总体方案论证 (5)2.1方案的比较与选择 (5)2.2系统主要模块的概述 (6)2.2.1 AT89C51单片机性能 (7)2.2.2 DAC0832数模转换器 (9)2.2.3 四运算放大器LM324 (10)2.2.4 LCD显示电路 (11)2.2.5 键盘电路 (12)三、硬件电路设计 (13)3.1单片机控制模块的设计 (13)3.2单片机时钟电路的设计 (14)3.3单片机复位电路的设计 (15)3.4键盘模块的设计 (16)3.5显示模块的设计 (17)3.6数模转换模块的设计 (20)3.7电压比较输出模块的设计 (20)四、软件设计 (22)4.1 软真开发平台Proteus仿真 (22)4.2 软件程序开发平台KEIL (23)4.3 主程序设计 (23)4.4 子程序设计 (25)4.4.1 液晶显示(读写数据)的设计 (25)4.4.2 D/A转换的设计 (26)4.4.3 键盘的设计 (26)五、系统测试与误差分析 (27)5.1 系统测试结果分析 (27)题目:基于单片机AT89C51的数字稳压电源摘要:本文所设计的基于单片机控制的直流稳压电源就是能用数字来控制电源输出电压的大小,而且能使输出的直流电压能保持稳定、精确的直流电压源。

本设计采用了AT89C51单片机、DAC0832、四运算放大器LM324、独立键盘和液晶显示LCD1602来实现整体电路功能。

主要是对AT89C51单片机的各个I/O口的充分利用。

P0口连接液晶显示电路,P1口连接独立键盘电路,P2口直接连接DAC0832芯片输出电压,最终的电压通过带有真差动输入的四运算放大器。

这种设计总体上能充分利用单片机各个接口而不必添加额外芯片,大大减少成本和电路板面积,除此之外,此设计还打破了传统的电阻式的可调稳压直流电源的局限,以此能够在众多的电子设备中广泛应用。

用AT89C2051做的保护电路

用AT89C2051做的保护电路

用AT89C2051做的保护电路(含源码)现在的A T89C2051单片机极其便宜,淘宝上不到2元钱,里面带一个比较器,因此利用它来做保护电路性价比不错。

保护电路实现如下功能:1.直流检测保护电路要检测正负窗口电压,但现在是在单电源下,如果要另外加DC检测,就失去了电路的简洁性,所以设计了如下单电源下的DC检测电路,只需一只单电源的比较器即可。

AT89C2051里面的比较器也是单电源的比较器,其输入电压可以等于地电平,因此用在这里很合适。

当输入电压为0时,两个二极管都不通,比较器负输入端电压为820K/39K分压,大概为0.22V,正输入端为0,因此比较器出0。

正电平检测闸值为二极管导通电压+0.22V,仿真大约是0.75V。

而负电平检测时,此时D1不通,比较器+输入端电压约为0,但-输入端为+0.22V,此时只要输入端电压小于一定程度,D2会导通,会将-输入端的电压拉低,直到为负的电压,此时比较器反转。

仿真大约是-0.55V触发。

2.交流断电检测这里交流检测是检测交流过零脉冲,检测电路由光耦组成,交流电是50Hz,因此光耦每20mS会导通,产生一个中断脉冲,MCU用这个脉冲复位定时器。

一旦在50mS内检测不到交流的脉冲,程序就认为是掉电了,就将继电器断开。

3.延时任何故障排除后,都延时9秒左右时间才将继电器吸合。

4.外接扩充信号控制用于扩展其功能,例如过流保护等等。

5.报警显示在故障状态(交流断电、DC保护、外接信号有效)时,故障灯闪烁在排除了故障后,正常灯会闪烁一段时间,然后才将继电器吸合,并正常灯常亮。

电路图如下:源码如下:#include <A T89X51.h>#define FLASHTIME 6000 //闪烁计时#define DELAYTIME 100000L //延时时间#define H_50mS 22 //看门狗定时时间,时钟14.318M,大约延时50mS,即超过2个50HZ交流周期。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

采用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 ;将INT1设为负边沿触发
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。

相关文档
最新文档