实用程序举例.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:26 大小:1MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

实用程序举例.ppt

实用程序举例.ppt

预览

免费试读已结束,剩余 16 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

该程序的延时时间与系统所用的晶振和程序中每条指令的机器周期及其执行次数MT有关。设系统晶振为12MHz,则可知一个机器周期为:T=1s/(12×106)×12=1μs延时时间=T×(1×1+1×MT+1×MT+2×MT)=1μs×(1+MT+MT+2MT)(4-1)[例4.16]用双重循环完成延时程序。程序如下:MOVR0,#MT1;1×1DL1:MOVR1,#MT2;1×MT1DL2:NOP;1×MT2×MT1NOP;1×MT2×MT1DJNZR1,DL2;2×MT2×MT1DJNZR0,DL1;2×MT1设晶振仍为12MHz,则上面程序的执行时间T为:T=1μs×(1+1×MT1+1×MT2×MT1+1×MT2×MT1+2×MT2×MT1+2×MT1)(4-2)4.4.2代码转换1.十六进制到ASCII码的转换[例4.17]将20H单元中的两个十六进制数转换成ASCII码,低4位的ASCII码保存在21H单元,高4位的ASCII码保存在22H单元。由ASCII编码表可知,转换方法为:若十六进制数小于10,则此数加30H,否则加上37H就可以将十六进制数转换成ASCII码。MOVA,20H;(20H)→AANLA,0FH;屏蔽高4位ACALLCHANGE;求低位十六进制数的ASCII码MOV21H,A;保存低位十六进制数的ASCII码MOVA,20H;(20H)→AANLA,#0F0H;屏蔽低4位SWAPA;高位十六进制数送低4位ACALLCHANGE;求高位十六进制数的ASCII码MOV22H,A;保存高位十六进制数的ASCII码RETCHANGE:PUSHA;操作数进栈保护CLRC;进位标志清零SUBBA,#0AH;与10比较POPA;取出操作数JCNUM;比10小转NUMADDA,#07H;大于等于10加37HNUM:ADDA,#30H;加30HRET2.单字节二进制数转换为BCD数[例4.18]已知20H单元存放一个二进制数,编程将它转换为BCD数,百位送入FIRST单元的低4位,十位和个位分别送入SECOND单元的高4位和低4位。本题只需将20H单元中的内容除以100,得到的商就是百位BCD数,然后用余数除以10,其结果中,商为十位BCD数,余数为个位BCD数。ORG0100HFIRSTDATA30HSECONDDATA31HMOVA,20H;被除数送AMOVB,#64H;除数100送BDIVAB;A除以BMOVFIRST,A;百位BCD数送FIRSTMOVA,B;余数送AMOVB,#0AH;除数10送BDIVAB;A除以BSWAPA;十位BCD数送高4位ORLA,B;十位和个位BCD数组合成一个字节MOVSECOND,A;送入SECOND单元SJMP$;结束END4.4.3数据处理1.查询[例4.19]在外部RAM1000H开始的地址单元中存放30个数据,找出其中的奇数存入内部RAM20H开始的存储单元中,并统计奇数的个数,存入3FH单元。用位操作指令对操作数最低位进行判断,若为1即为奇数。本题中,DPTR是片外数据缓冲区地址指针,R0是片内数据缓冲区地址指针。ORG0030HMOVDPTR,#1000H;指向片外缓冲区首地址MOVR0,#20H;指向片内缓冲区首地址MOVR7,#30H;循环次数送入R7MOV3FH,#00H;清零LP:MOVXA,@DPTR;取数JNBACC.0,EVEN;偶数转EVENMOV@R0,A;奇数保存INCR0;修改片内地址INC3FH;修改统计个数EVEN:INCDPTR;修改片外地址DJNZR7,LP;控制循环RET2.排序[例4.20]将片内RAM30H开始的连续16个单元的数据按从小到大的顺序排序。此题采用的是冒泡排序法,即对这16个数据组成的数据串,依次将相邻两数分别进行比较,若后面的数小于前面的数,则比较的相邻两数互换,且置位地址单元7FH为1。若这组数据比较完后,相邻两数有交换(即交换标志位7FH为1),则再重新进行两两比较,直到16个数已从小到大排序,相邻两数比较后不再交换为止。交换标志位7FH用来控制是否再需要重新两两比较。程序流程如图4-7所示。程序如下:ORG2000HSORT:MOVR1,#30H