1、完成第一次循环点亮,延时约0.25秒 AJMP START反复循环延时子程序,12M晶振延时约250毫秒DELAY:大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW现场保护指令(有时可以不加)MOV R4,#2 L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) DJNZ R2 ,L1 中层循环:256次DJNZ R4 ,L3外层循环:2次POP PSWRETEND51单片机汇编程序集(二)2008年12月12日 星期五 10:27辛普生积分
2、程序内部RAM数据排序程序(升序)外部RAM数据排序程序(升序)外部RAM浮点数排序程序(升序)BCD小数转换为二进制小数(2位)BCD小数转换为二进制小数(N位)BCD整数转换为二进制整数(1位)BCD整数转换为二进制整数(2位)BCD整数转换为二进制整数(3位)BCD整数转换为二进制整数(N位)二进制小数(2位)转换为十进制小数(分离BCD码)二进制小数(M位)转换为十进制小数(分离BCD码)二进制整数(2位)转换为十进制整数(分离BCD码)二进制整数(2位)转换为十进制整数(组合BCD码)二进制整数(3位)转换为十进制整数(分离BCD码)二进制整数(3位)转换为十进制整数(组合BCD码)
3、二进制整数(M位)转换为十进制整数(组合BCD码)三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7入口: R3,R4占用资源: ACC,R2,NDIV31堆栈需求: 5字节出口: R0,NCNTIBTD21 : MOV NCNT,#00HMOV R2,#00HIBD211 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV R0,AINC R0INC NCNTMOV A,R3ORL A,R4JNZ IBD211MOV A,R0CLR CSUBB A,NCNTMOV R0,A ACC,B,R7 3字节 R0IBTD22 : MOV A,R0PUSH A
4、MOV R7,#03HCLR AIBD221 : MOV R0,ADJNZ R7,IBD221POP AMOV R7,#10HIBD222 : PUSH AMOV A,R4RLC AMOV R4,AMOV R3,AMOV B,#03HIBD223 : MOV A,R0ADDC A,R0DA ADJNZ B,IBD223DJNZ R7,IBD222 R2,R3,R4IBTD31 : CLR AMOV NCNT,AIBD311 :MOV A,R2ORL A,R3JNZ IBD311IBTD32 :MOV R7,#04HIBD321 :DJNZ R7,IBD321MOV R7,#18HIBD322
5、:MOV R2,AMOV B,#04HIBD323 :DJNZ B,IBD323DJNZ R7,IBD322第七个试验:流水灯数字显示综合练习-51单片机汇编语言试验教程 该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。 显示的数字不对。该程序在本站XP开发套件上调试通过,以下是程序运行在XP版时的照片.数码管
6、显示数字注意0为点亮 1 为灭 显示数字 p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码 0 0 0 1 0 1 0 0 0 28H 1 0 1 1 1 1 1 1 0 7EH 2 1 0 1 0 0 0 1 0 A2H 3 0 1 1 0 0 0 1 0 62H 4 0 1 1 1 0 1 0 0 74H 5 0 1 1 0 0 0 0 1 61H 6 0 0 1 0 0 0 0 1 21H 7 0 1 1 1 1 0 1 0 7AH 8 0 0 1 0 0 0 0 0 20H 9 0 1 1 0 0 0 0 0 60H 代码表的意思和方法参照前
7、面的教程; 注意0为点亮 1 为灭然后我们可以把代码送到P0口,就可以是数码管显示需要的数字; 当然, 必须有位选,因为我们的实验板是动态扫描数码管, 两个8的位选分别是P2.6 P2.7.LOOP: ; 标号CLR P2.6 ;选中p2.6 数码管左边的8字使能SETB P2.7 ;p2.7不使能。 右边的数码管消隐MOV P0,#28H ;把28h送p0口;数码管显示 0LCALL DELAY ;延时MOV P0,#0FFH ;0ffh 送p0口,数码管清除CLR P1.0 ;点亮p1.0发光管MOV P0,#7EH ;把7eh送p0口;数码管显示 1LCALL DELAYMOV P0,#
8、0FFHCLR P1.1 ;CLR P1.0 ;MOV P0,#0A2H ;数码管显示 2 CLR P1.2CLR P1.1CLR P1.0MOV P0,#62H ;数码管显示 3CLR P1.3CLR P1.2MOV P0,#74H ;数码管显示 4CLR P1.4MOV P0,#61H ;数码管显示 5; CLR P1.5 CLR P1.4MOV P0,#21H ; 数码管显示 6 CLR P1.6MOV P0,#7AH ; 数码管显示 7CLR P1.7CLR P1.6CLR P1.5MOV P0,#20H ; 数码管显示 8MOV P1,#0FFH;程序到此结果为左边的数码管显示0,1
9、,2,3,4,5,6,7,8p1.0-p1.7指示灯依次点亮SETB P2.6 ; 左边的8消隐CLR P2.7 ;选中p2.7 数码管右边的8字使能 ,;MOV P0,#28HMOV P0,#7EHMOV P0,#0A2HMOV P0,#62HMOV P0,#74HMOV P0,#61HMOV P0,#21HMOV P0,#7AHMOV P0,#20H这一段和上一段基本相同, 不同的是右边的数码管依次显示012345678,左边的不亮;同时p1口的灯流动显示:AJMP LOOP; 注意: 程序运行到此跳转到开始标号,重复执行:延时子程序;参考前面的教程:CLR P3.3 ;注意小喇叭在3.3口, 这里可以使小喇叭发出嗒,嗒声MOV R7,#255NOPD1:MOV R6,#255setb p3.3D2: DJNZ R6,D2clr p3.3DJNZ R7,D1SETB P3.3