《单片机原理与应用技术课程设计报告.doc》由会员分享,可在线阅读,更多相关《单片机原理与应用技术课程设计报告.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理与应用技术课程设计报告题目 基于单片机控制的出租车计价器专业班级: 电气工程及其自动化 2021年3月6日基于单片机控制的出租车计价器任务书一. 设计目的与要求1.根本功能1显示:可以显示 单价、里程、总金额。2停车计费功能:中途因故停车超过5分钟后每分钟按当时单价的50%收费。3自动分时计费功能:白天和夜间应能自动更换单价。2.性能 里程误差小于2%。3.扩展功能1可增加时钟功能。2可增加数据掉电保护功能。二.方案完成时间 三周 1第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。 2第二周完成软件的具体设计和硬件的制作。 3第三周完成软件和硬件的联合调试。目 录1 引言
2、12 总体设计方案12.1 设计思路113 设计原理分析2223343.1.5 键盘电路5663.2.2外部计数中断计程计价程序64 结束语7参考文献8附录9整体电路图9源程序10基于单片机控制的出租车计价器摘要:随着出租车行业的开展,出租车行业已经是城市交通的重要组成局部,从加强行业管理以及减少与乘客的纠纷出发,以单片机为核心的智能出租车计价系统的开发就显得尤其重要。本设计采用AT89S51单片机为主控器,A44E霍尔传感器测距,实现对出租车的多功能的计价设计,输出采用段数码显示管。本设计是以单片机AT89S51为核心,通过外围及附属电路来实现的。该系统满足计程、计时、计费、存储等多种计量功
3、能为一体的出租车计价器的实用要求。给出了硬件电路图及主程序流程图,阐述了软硬件设计过程中关键技术的处理。关键词:计价器 单片机AT89S51 1 引言出租车计价器是根据用户的实际情况而自动显示用车费用的自动化仪表。仪表根据用车起价、行车里程计费及中途等待时间计费三项求得客户用车的乘车里程及总费用,最终通过数码管显示出来。2 总体设计方案2.1 设计思路起步费用:由用户设定起步价保存在电路中,传感器检测到的行车里程在起价费用里程以内,就关闭行车里程计费程序,显示器一直显示起价费。当行车里程超过了起价费用里程,行车里程计费程序才启动计费。行车里程计费:通过传感器将汽车的行驶距离送入处理电路,然后换
4、算成行车里程,根据行车里程和已设定的单价计算出所需的行车费用,将这个费用送入总费用显示缓冲区。等待计费:在路途中,传感器检测到汽车停了下来,这时候就要启动等候计费程序中途因故停车超过5分钟后每分钟按当时单价的50%收费。整个行车过程中的总费用=起步价+行车费用+等候费,这个费用在总费用显示缓冲区完成求和之后通过显示器显示出来,客户能够直观明了的查看出来,十分方便。方案论证与比拟在设计时对以下两种方案进行了论证:方案一:使用传统的数字电路和模拟电路来完成设计要求。在使用数模电来实现时,由于该系统比拟大,整体电路不容易实现。整体电路的规模较大,用到的器件多,造成故障率高,难调试。方案二:使用单片机
5、来完成设计要求。单片机功能强大,用硬件和软件相结合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。针对计费模式的切换,通过软件编程就可以轻而易举的实现。总体设计框图1如下所示。图1总体设计框图3 设计原理分析单片机最小系统单元AT89S51提供以下标准功能:4K字节闪速存储器,128字节RAM,32根I/O引线,两个16位定时器/计数器,五个中断源,两个中断优先级,一个全双工串行口,一个精密模拟比拟器以及片内振荡器和时钟电路。此外,AT89C51是用可降到0频率的静态逻辑操作设计的并支持两种可选的软件节电工作方式。空闲方式停止CPU工作但允许RAM,定时器/计数器,
6、串行口和中断系统继续工作。掉电方式保存RAM内容但振荡器停止工作并禁止所有其它部件的工作直到下一个硬件复位。AT89S51片内的Flash ROM允许在系统内改变编程序或常规的非易失性存储器编程器来编程。单独的单片机是不能够工作的,它需要配合外围电路才能实现各种控制。单片机最小系统电路由AT89S51单片机、时钟电路和位电路组成,是整个电路的主要局部。时钟电路用来产生一个时钟信号,这个时钟信号是控制单片机内各运算器、控制器、存储器进行工作的一个时钟基准。时钟局部采用外接晶体振荡电路,在AT89S51的18和19脚外接6MHz的英晶振并跨接两个30pF电容就构成了时钟电路。复位电路是对单片机进行
7、初始化操作,当系统上电后把PC初始化为0000H,使单片机从0000H单元开始执行程序。另外当程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也须按复位键重新启动。电路图如图2所示。图2单片机最小系统电路霍尔电路它是本系统的根底元件,由它将出租车行驶时车轮所转的圈数转换成脉冲信号送入数据处理电路,完成相应的操作。它用一块A44E,安装在车轮上来检测信号。A44E是开关型的霍尔器件,其工作电压范围比拟宽4.518V,其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可到达1MHz。在这里用555电路来产生一个脉冲来模拟霍尔传感器输出的里程脉冲,选择P3.3
8、 口作为信号的输入端,内部采用外部中断0,555脉冲产生电路输出一个脉冲信号直接加到外部中断0上产生的频率F=,引起单片机的中断,对脉计数,通过计算将脉冲增加表达在金额和里程上。具体电路如图3所示。图3 555脉冲产生电路图掉电存储单元单元电路掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02 是ATMEL公司的2KB 字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到,额定电流为1mA,静态电流10A(5.5V),芯片内的资料可以在断电的情况下保存40 年以上,而且采用8 脚的DIP 封装,使用方便。AT24C02芯片引脚配置如图4所示。图4 A
9、T24C02引脚配置图AT24C02芯片DIP封装,共有8个引脚,其中:A2A0 地址引脚;SDA、SCL I2C总线接口;WP 写保护引脚,WP接VSS时,禁止写入高位地址,WP接VDD时,允许写入任何地址;VCC 电源端GND 接地端图5 掉电存储电路原理图图中R8、R10 是上拉电阻,其作用是减少AT24C02 的静态功耗,由于AT24C02 的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL移位脉冲和SDA数据/地址与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,
10、读到缓存单元中,供主程序使用。3.1.4显示单元电路设计由于设计要求有单价、路程、总金额显示输出,加上另外扩展了时钟显示包含时分秒的显示,采用6 位LED数码管的分屏显示。在显示电路里采用串中显示的方式,74LS164是一个串行输入,并行输出移位存放器,并带有去除端。从单片机串口RXD输出的信号先送到最左边74LS164的串行输入端AB,由于移位脉冲的作用,使数据向右移,到达显示的目的。移位存放器74LS164还兼作数码管的驱动。电路中的三个整流管D1D3 的作用是降低数码管的工作电压,增加其使用寿命。具体电路如下列图6所示。图6串口显示电路图由于所有六位段选都由单片机的RXD和TXD控制,因
11、此,在每一瞬时,六位LED只有一个亮。要想每位显示不同的字符,就必须使RXD和TXD连续输出点亮各位LED,既在第一个被点亮后,下一个要显示数据来到后,该位就自动转到下一位数码管显示,如此轮流,使每位分时显示该位应显示的字符。段选码,位选码每送一次后延时1mss100ms所以每位显示的时间间隔不能超过20ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每位数码管总在亮。采用了六个LED数码管,而显示要求显示金额,里程,单价,如果采用一屏显示,那么显示的总金额及里程在显示时不能显示十元以上的金额及十公里以上的里程。所以在设计时,这里采用分屏显示,由S1键切换,默认显示金额单价,S1按下时
12、,显示里程单价如图6,延时一段时间以后,自动返回显示金额和单价。如下列图所示。13.51.0默认显示22.82.0路程,单价显示151.0等待显示图7 显示模式3.1.5 键盘电路键盘采用四个独立按键,接在AT89S51的P0口,如图5所示。通电时用软件将P1口置1,当有键按下,时相对应的接口被置0。图8键盘电路按键S1:模式选择按键。按下一次为里程单价调整,LED1亮;按下第二次为起价调整,LED2亮;按下第三次为等待单价调整,LED3亮;再按下返回到了程单价调整,以此类推。按键S2:位调整按键。按下一次为最低位调整;按下第二次为次低位调整;以此类推至功能所需位数调整完或有中断插入。按键S3
13、:“+按键。每按一次被调整位加1。按键S4:“-按键。每按一次被调整位减1。单片机的软件设计流程如下所示。其中初始化模块由硬件初始化和软件初始化两局部组成,硬件初始化主要是对单片机及其它相关芯片进行初始化;而软件初始化主要是对各种软件标志进行初始化。主程序模块在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置时钟存放其、里程存放器和价格存放器的进行初始化,并进行键盘扫描。然后,主程序将根据键盘扫描的结果,分别完成启动、去除、时钟调整、计程和计价等不同的操作。其程序流程如图9所示。开始初始化键盘扫描程序
14、S2按下?SB 按路程显示计价程序晚上S3 按SB 按下?计价程序白天YYYNNN图9 主程序流程图当按下计价器计价开关时,说明准备出发,计价提示电路就发出声响,提醒乘客,车已启动请注意平安,并启动计价,到达目的地时效劳结束,关断计价开关,计价器会将当前累计行车里程及价格送至显示电路显示出来。外部计数中断计程计价程序发光二极管L1用来显示车上有无乘客,没乘客上车时,具有自锁功能的开关SB断开,L1亮,6个数码管显示时间。当有乘客上车时,把开关SB接通,L1灭,同时开始计程计价。开始计程计价时,车轮每转一圈,由于A44E 属于开关型的霍尔器件,其工作电压范围比拟宽18V,其输出的信号符合TTL
15、电平标准,可以直接接到单片机的IO 端口上,而且其最高检测频率可到达1MHZ。在实际电路中用555产生一个里程脉冲来模拟霍而传感器。选择了P3.2 口作为信号的输入端,内部采用外部中断0这样可以减少程序设计的麻烦,出于出租车的车轮直径D=因此车轮每转一圈的行程为S=D=。T0每计N0=125个数,相当于汽车行驶了1252m=250m。把T0设为计数模式2,用T0中断,计数初值为X=28-125=83H。汽车每行驶250m,T0计满数溢出一次,使T0中断,在中断子程序中,使某存放器加1计数。加4次相当于汽车行驶1km,这样行程缓冲区中行程里程加1,实现了行驶里程计算,单片机就控制将金额自动的加增
16、加,其计算公式:总金额=当前单价公里数。流程如下列图所示。单价开始行车3公里?行车100米?金额起步价YNY里程加里程加N显示结束图10计价子程序流程图4 结束语这次课程设计让我学到了很多在课本上学不到的东西,我获益匪浅,同时也让我对本专业有了更进一步的了解。由于使用的是单片机作为核心的控制元件,以及灵敏的霍尔开关型器件,是本出租车计价器具有功能强、性能可靠、电路简单、本钱低的特点,加上经过优化的程序,使其有很高的智能化水平。但是在我们设计和调试的过程中,也发现了一些问题,譬如计价的金额位数有限,实际的里程可能会很远,会超出我们的显示范围。计价器的设计还不够人性化,比方加上语音的提示功能,可能
17、会更有生命力。参考文献1李朝青.单片机原理与接口技术M.北京:北京航空航天大学出版社,19972康华光.数字电子技术根底M第四版. 北京:高等教育出版社,20003陈永甫.新编555集成电路应用800例 MMM.北京:机械工业出版社2007.附录整体电路图源程序DAY_PRICE EQU 6FHNIGHT_PRICE EQU 6EHMIDWAY_PRICE EQU 6DHSTART_PRICE EQU 6CHCOUNTL EQU 6BHCOUNTH EQU 6AHM100 EQU 69H ; 外部中断次数DISTANCE EQU 68H ; 行车距离MS100 EQU 67HSEC EQU 6
18、6HMIN EQU 65HHOUR EQU 64HLEDSL EQU 63H ; 时分钞显示缓冲区LEDSH EQU 62HLEDML EQU 61HLEDMH EQU 60HLEDHL EQU 5FHLEDHH EQU 5EHLEDDANJIAL EQU 5DH ; 总额,单价显示缓冲区LEDDANJIAH EQU 5CHLINE_ EQU 5BHLEDCOUNT1 EQU 5AHLEDCOUNT2 EQU 59HLEDCOUNT3 EQU 58HLEDDANJIA2L EQU 57H ; 路程,单价显示缓冲区LEDDANJIA2H EQU 56HLINE_ EQU 55HLINE_ EQU
19、 54HLEDDISTANCEL EQU 53HLEDDISTANCEH EQU 52HLEDDAY_PL EQU 51H ; 中途,晚上,白天显示缓冲区LEDDAY_PH EQU 50HLEDNIG_PL EQU 4FHLEDNIG_PH EQU 4EHLEDW_PL EQU 4DHLEDW_PH EQU 4CHS11 EQU 4BHS22 EQU 4AHS33 EQU 49HS44 EQU 48HM1 EQU 47HH1 EQU 46HM2 EQU 45HH2 EQU 44HPRICE EQU 43HORG 0000HAJMP MAINORG 0003HAJMP TOORG 000BHAJ
20、MP TOTIMEORG 001BHAJMP TOSTARTORG 0030HMAIN: MOV SP,#70HMOV TMOD, #11HMOV TH0, #3CHMOV TL0, #0B0HMOV TH1, #3CHMOV TL1, #0B0HMOV 22H, #0AHSETB EASETB TR0SETB EX0SETB IT0SETB ET0SETB ET1MOV R7,#34MOV R0,#69HLOOPL:MOV R0,#0DEC R0DJNZ R7,LOOPLMOV COUNTL, #00H ; 起步价MOV COUNTH, #05HMOV DAY_PRICE,#25H ; 白天
21、价格初始化MOV NIGHT_PRICE,#30H ; 晚上价格初始化MOV MIDWAY_PRICE,#10H ; 中途等待初始化MOV START_PRICE, #50H ; 起步价初始化MOV S11, #0MOV S22, #0MOV S33, #0MOV S44, #0MOV DISTANCE, #02HMOV HOUR, #12HKEY_MAIN: SETB TR0ACALL HMS_DISACALL T100MSDACALL T100MSDACALL T100MSDJB S1, KEY_MAINACALL T10MSDJB S1, KEY_MAINJNB S1,$SJMP WAI
22、T1WA1:JB S1, K1ACALL T10MSDJB S1, K1WAIT1:JNB S1, WAIT1MOV R0, #LEDDANJIALMOV R2, #6CLR AMOV COUNTL,AMOV COUNTH,AMOV M100, AMOV DISTANCE,ABK1: MOV R0, ADEC R0DJNZ R2, BK1MOV PRICE,DAY_PRICE; 起动初始化MOV COUNTL, #00H; 起步价MOV COUNTH, #05HLCALL CP_DIS; 总金额和单价显示K1: JB S2, K2ACALL T10MSDJB S2, K2WAIT2: JNB
23、S2, WAIT2INC S22MOV A, S22CJNE A, #1, NEXT1LCALL PA_DISLJMP KEY_DJNEXT1:CJNE A, #2, NEXT2CLR TR0LCALL HMS_DISLJMP KEY_SJNEXT2:CJNE A, #3, K2MOV S22, #0K2: JB S3, K3ACALL T10MSDJB S3, K3WAIT3:JNB S3, WAIT3INC S33MOV A, S33CJNE A, #1, NXT1LCALL DP_DISNXT1: CJNE A, #2, NXT2CLR CMOV A, M2SUBB A, M1MOV M
24、1, AKEY34: AJMP MID_PHOU_T: SETB F0 ;调用定时延时标志位LCALL T100MSDLCALL T100MSDMOV LEDHL, #0AHMOV LEDHH, #0AHLCALL HMS_DIS1;直接调用显示,不经过拆分程序LCALL T100MSDLCALL T100MSDMOV SEC, #0LCALL HMS_DISJB S3, KEY41MOV A, HOURADD A, #1DA AMOV HOUR,ACJNE A, #24H, KEY41MOV HOUR, #0KEY41: JB S4, KEY42MOV A, HOURADD A, #99HD
25、A AMOV HOUR,ACJNE A, #99H, KEY42MOV HOUR, #23HKEY42: JB S1, KEY43ACALL T10MSDJB S1, KEY43WAIT21: JNB S1, WAIT21INC S11MOV A, S11CJNE A, #1,NEXT61LJMP HOU_TNEXT61: CJNE A, #2,NEXT62LJMP MIN_TNEXT62: CJNE A, #3,KEY43MOV S11, #0LJMP KEY_SJKEY43: JB S2, KEY44LCALL T10MSDJB S2, KEY44WAIT32: JNB S2, WAIT3
26、2LJMP KEY_MAINKEY44: AJMP HOU_TMIN_T: SETB F0 ;调用定时延时标志位LCALL T100MSDLCALL T100MSDMOV LEDML, #0AHMOV LEDMH, #0AHLCALL HMS_DIS1;直接调用显示,不经过拆分程序LCALL T100MSDLCALL T100MSDMOV SEC, #0LCALL HMS_DISJB S3, KEY51MOV A, MINADD A, #1DA AMOV MIN, ACJNE A, #60H, KEY51MOV MIN, #0KEY51: JB S4, KEY52MOV A, MINADD A
27、, #99HDA AMOV MIN, ACJNE A, #99H, KEY52MOV MIN, #59HKEY52: JB S1, KEY53ACALL T10MSDJB S1, KEY53WAIT24: JNB S1, WAIT24INC S11MOV A, S11MOV TH1, #3CHMOV TL1, #0B0HDJNZ 22H, RETURN2 ;1S未到返回MOV 22H, #0AHMOV A, #1ADD A, 23HDA AMOV 23H, ACJNE A, #60H, RETURN2MOV 23H, #0MOV A, #1ADD A, 24HDA AMOV 24H,ACJNE
28、 A, #10H, RETURN2MOV 24H, #0MOV A, START_PRICEADD A, COUNTLDA AMOV COUNTL,ACJNE A, #10H, RETURN2MOV COUNTL, #0MOV A, #1ADD A, COUNTHDA AMOV COUNTH,ACJNE A, #99H,RETURN2MOV COUNTH,#0RETURN2: POP ACCPOP PSWRETIHMS_DIS:PUSH ACC PUSH PSWSETB RS1MOV R0,#SEC ;时分秒的拆分(三个字节)MOV R1,#LEDSLMOV R6,#03HLOOP1:MOV
29、A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,ADEC R1DEC R0DJNZ R6,LOOP1POP PSWPOP ACCHMS_DIS1: PUSH ACCPUSH PSWMOV R7,#06HMOV R0,#LEDSLLOOP: MOV A, R0MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,ABK: JBC TI,NEXTSJMP BKNEXT: DEC R0DJNZ R7,LOOPCLR RS1POP PSWPOP ACCRETCP_DIS:PUSH ACC PUS
30、H PSWSETB RS1MOV R0,#COUNTH ;MOV R1,#LEDCOUNT2MOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,AMOV LEDCOUNT1,COUNTLMOV A,LEDCOUNT1 ;送总金额低位MOV DPTR,#TABMOVC A, A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV A,LEDCOUNT2 ;送总金额中位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDCO
31、UNT3 ;送总金额高位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TICLR RS1MOV SBUF,#0FEH ;送短线(短线的字型码是0FEH)JNB TI, $CLR TIMOV R0,#PRICE;单价拆分(两个字节)MOV R1,#LEDDANJIALMOV R6,#03HMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,ADEC R1MOV A,LEDDANJIAL ;送单价低位MOV DPTR,#TABMOVC A,A+DPTRM
32、OV SBUF,AJNB TI, $CLR TIMOV A, LEDDANJIAH ;送单价高位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIPOP PSWPOP ACCRETDP_DIS:PUSH ACC PUSH PSWSETB RS1MOV R0,#PRICE ;单价的拆分(一个字节)MOV R1,#LEDDANJIALMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,ADEC R1MOV A,LEDDANJIAL ;送单价低位MOV D
33、PTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDDANJIAH ;送单价高位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV SBUF,#0FEH ;JNB TI, $CLR TIMOV SBUF,#0FEH ;送短线JNB TI,$CLR TIMOV R0,#DISTANCEMOV R1,#LEDDISTANCELMOV A, R0MOV B, AANL A, #0FHMOV R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,ADEC R1
34、MOV A,LEDDISTANCEL ;送路程低位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDDISTANCEH ;送路程高位MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TICLR RS1POP PSWPOP ACCRETPA_DIS:PUSH ACC PUSH PSWSETB RS1MOV R0,#DAY_PRICE ;价风格整拆分三个字节MOV R1,#LEDDAY_PLMOV R6,#03HLOOP2:MOV A, R0MOV B, AANL A, #0FHMO
35、V R1,ADEC R1MOV A, BSWAP AANL A, #0FHMOV R1,ADEC R1DEC R0DJNZ R6,LOOP2POP PSWPOP ACCPA_DIS1:PUSH ACCPUSH PSWMOV A,LEDDAY_PL ;白天单价MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A, LEDDAY_PHMOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV A,LEDNIG_PL ;晚上单价MOV DPTR,#TABMOVC A,A+DPTRMOV SBU
36、F,AJNB TI, $CLR TIMOV A,LEDNIG_PHMOV DPTR,#TABMOVC A, A+DPTRMOV SBUF,AJNB TI,$CLR TIMOV A,LEDW_PL ;中途等待单价MOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI, $CLR TIMOV A,LEDW_PHMOV DPTR,#TABMOVC A,A+DPTRMOV SBUF,AJNB TI,$CLR TICLR RS1POP PSWPOP ACCRETTAB:DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H,0FFHT10MSD: SETB RS0; 10毫秒延时程序MOV R4,#12TM:MOV R3,#128TM6:DJNZ R3,TM6DJNZ R4,TMCLR RS0RETT100MSD: MOV R3, #200D11: MOV R4, #125D12: DJNZ R4, D12DJNZ R3, D11RETEND