51单片机汇编程序2
51单片机汇编语言程序设计
51单片机汇编语言程序设计1.题目:数码管显示1~72.题目分析本实验将要求51单片机采用汇编程序来实现以上程序,我们首先要对51单片机进行硬件电路设计,然后编写相应的汇编程序3.硬件电路4.程序设计;-------------------------------------------------------------------------------;选择P1口作为数码管位选;-------------------------------------------------------------------------------org 0hmov p1,h ;启动P1作为数码管位选again: m ov p2,Fh ;0000 0011 1111 显示数字1sjmp againmov p2,h ;0000 0110 显示数字2sjmp againmov p2,Bh ;0101 1011 显示数字3sjmp againmov p2,Fh ;0100 1111 显示数字4sjmp againmov p2,h ;0110 0110 显示数字5sjmp againmov p2,Dh ;0110 1101 显示数字6sjmp againmov p2,dh ;0111 1101 显示数字7sjmp againend5.程序流程本汇编程序的程序流程如下:1)将P1口设置为数码管的位选;2)通过P2口设置相应的数字,P2口的值将会根据数字的不同而不同,以便实现将不同的数字显示到数码管上;3)循环2步骤,不断刷新P2口的值,从而实现数字的不断变化,从而实现将1-7数字在数码管上循环显示。
MCS-51系列单片机的指令系统和汇编语言程序
3·1 汇编指令第3 章MCS 一51 系列单片机的指令系统和汇编语言程序3·1·1 请说明机器语言、汇编语言、高级语言三者的主要区分,进一步说明为什么这三种语言缺一不行。
3·1·2 请总结:(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么肯定要学汇编语言程序?3·1·3MCS 一51 系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。
3·1·4 要访问片内RAM,可有哪几种寻址方式?3·1·5 要访问片外RAM,有哪几种寻址方式?3·1·6 要访问ROM,又有哪几种寻址方式?3·1·7 试按寻址方式对MCS 一51 系列单片机的各指令重进展归类(一般依据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8 试分别针对51 子系列与52 子系列,说明MOV A,direct 指令与MOV A,@Rj 指令的访问范围。
3·1·9 传送类指令中哪几个小类是访问RAM 的?哪几个小类是访问ROM 的?为什么访问ROM 的指令那么少?CPU 访问ROM 多不多?什么时候需要访问ROM?3·1·10 试绘图示明MCS 一51 系列单片机数据传送类指令可满足的各种传送关系。
3·1·11 请选用指令,分别到达以下操作: (1)将累加器内容送工作存放器R6.(2)将累加器内容送片内RAM 的7BH 单元。
(3)将累加器内容送片外RAM 的7BH 单元。
(4)将累加器内容送片外RAM 的007BH 单元。
(5)将ROM007BH 单元内容送累加器。
3·1·12 区分以下指令的不同功能:(l)MOV A,#24H 与MOV A.24H(2)MOV A,R0 与MOV A,@R0(3)MOV A,@R0 与MOVX A,@R03·1·13 设片内RAM 30H 单元的内容为40H;片内RAM 40H 单元的内容为l0H;片内RAM l0H 单元的内容为00H;(Pl)=0CAH。
51单片机汇编程序 (2)
知识创造未来
51单片机汇编程序
抱歉,我不提供编写汇编程序的服务。
但是,您可以在互联网上找到关于51单片机的汇编程序示例。
思路如下:
1. 确定程序的功能和需求。
2. 编写源代码,使用51单片机的汇编指令集来实现功能。
3. 将源代码汇编成机器码,生成可执行文件。
4. 使用相应的编程器将可执行文件烧录到51单片机。
5. 测试程序,确保功能正常。
需要注意的是,51单片机的汇编语言和汇编器可能有所不同,具体编写和调试过程可能会因此而异。
建议参考相关文档和教程以获取更详细的信息。
1。
51单片机汇编指令(全)
若结果大于FFH,则将溢出标志OV置1
DIV Divide除法指令
DIV AB ;A-B商—A,余数tB
;若除数为0,结果不确定,则将溢出标志0V置1
INC In creme nt力口1指令
INC A ;A+1 A,A加1,结果放在A
指令中常用符号说明
Rn
当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri
当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct
8位内部数据寄存器单兀的地址及特殊功能寄存器的地址
#data
表示8位常数(立即数)
#data16
表示16位常数
Add16
表示16位地址
Addr11
DA Decimal Adjust十进制加法调整指令
DA A;在加法指令后,把A中二进制码自动调整为BCD码
;DA A只能更跟在ADD或ADDC加法指令后,不适用于减法
逻辑运算指令(9个助记符)
DEC Decreme nt减1指令
INC A ;A-1 A,A减1,结果放在A
INC Rn ; Rn -1 Rn, Rn减1,结果放在Rn
INC direct ;(direct)-1 direct,直接地址的内容减1,结果放在该地址中
INC @Ri; ((Ri))-1(Ri),间址中的内容减1,结果放在该间址中
ADDC A,@Ri ;((Ri))+A+CY A, A与间址中的内容、进位状态相加,结果送到A中
ADDC A,#data ;data+A+CY A,A与立即数、进位状态相加,和送入A
51单片机汇编程序2
51单片机汇编程序2§2.3.2软件结构及程序设计一、主程序及其说明ORG 0000HAJMP MAIN ;主程序ORG 0003HAJMP X0S ;外部中断入口ORG 000BHLJMP T0S ;定时器T0中断入口ORG 001BHAJMP T1S ;定时器T1中断入口ORG 0023HLJMP SSV ;串行中断入口ORG 0030HMAIN: CLR EAMOV SP, #50HMOV A, 48H ;48H、49H单元为冷热启动标志单元CJNE A, #0AAH, LRE ;如等于0AAH、55H,则说明为热启动MOV A, 49H ;否则,为冷启动,则进行自检CJNE A, #55H, LRESJMP HRELRE: LCALL ZJ ;冷启动,则自检SETD: MOV 48H,#0AAH ;自检完后,设置为热启动标志字节MOV 49H,#55HHRE: MOV A, P1 ;读判采样周期档位ANL A, #0FHXRL A, #09HJZ M17 ;数据掉电保护故不进行采样,分析原数据 SJMP M18 M17: CLR P3.5AJMP M19M18: MOV R7, #00H ;非掉电保护方式,则将所有采样数据单元 MOV DPTR,#8020H ;清0MOV R6, #00HMOV A, R6M20: MOVX @DPTR,AINC R7INC DPTRCJNE R7,#00H, M20M21: MOV R7,#19HMOV DPTR, #8000HMOV A, #14HM1: MOVX @DPTR, AINC DPTRDJNZ R7,M1SETB IT0CLR P3.5MOV TMOD,#11HM0: MOV A, P1ANL A, #0FHJNZ M2MOV TH0,#0FFH ;由T0设置采样周期MOV TL0,#0F6HMOV 3EH,#02HAJMP M10M2: JB ACC.3,M10JB ACC.2,M8JB ACC.1,M7MOV TH0,#0FFHMOV TL0,#0CEHMOV 3EH,#00HM8: JB ACC.1,M6 JB ACC.0,M5 MOV TH0,#0FCH MOV TL0,#18H MOV 3EH,#10H AJMP M9M7: JB ACC.0,M4 MOV TH0,#0FFH MOV TL0,#9CH MOV 3EH,#01H AJMP M9M6: JB ACC.0,M3 MOV TH0,#0ECH MOV TL0,#78H MOV 3EH,#13H AJMP M9M5: MOV TH0,#0F8H MOV TL0,#30H MOV 3EH,#12H SJMP M9M4: MOV TH0,#0FEH MOV TL0,#0CH MOV 3EH,#03H SJMP M9M3: MOV TH0,#0D8H MOV TL0,#0F0H MOV 3EH,#11H SJMP M9M10: LCALL ERRM9: MOV 3CH,TL0MOV 3DH,TH0MOV A, 3EHMOV DPTR,#8019HMOVX @DPTR,AMOV IE, #8BHMOV IP, #02HCLR 00H ;等待INT0采样中断M11: JNB 00H,M11MOV IE, #88HM23: MOV DPTR,#0E000HMOVX A, @DPTRMOV A, P1ANL A, #0F0HMOV DPTR,#801AHMOVX @DPTR,AM19: MOV IE, #88HACALL ST2 ;建立TB2显示内容表ACALL CALS ;计算信号峰值、均值、脉宽 LCALL TRS ;工程量转换M12: MOV DPTR,#0F000HMOVX A, @DPTRMOV A, P1 ;读显示方式开关JB ACC.4, M13ACALL SD ;固定显示SJMP M12M13: JB ACC.5, M14LCALL XPD ;分页显示SJMP M12M14: JB ACC.6, M15LCALL SLD ;滑移显示SJMP M12M15: JB ACC.7, M16ACALL DCH ;字符显示,将分析结果显示在示波器上SJMP M12M16: JB P3.4, M12 ;是否通信?=0,说明要通信JB P3.3, M16 ;开始通信?=0,说明开始通信;数据通信,以便在上位机上进行数据硬拷贝、FFT分析等LCALL SENT ;数据向上位机发送通信SJMP M12外部中断INT0中断服务程序清单如下:X0S: MOV DPTR, #2000H ;启动A/D转换MOVX @DPTR, ASETB TR0 ;启动T0定时MOV 3AH, #20H ;存储区首地址0020HMOV 3BH, #00HMOV R7, #00H ;存储计数器送初值1024MOV R6, #04HCLR 70H ;系统自检标志清除,即为正常的工作程序而非自检X0S0: CLR 01HX0S1: JNB 01H, X0S1 ;等待T0定时中断CJNE R6, #00H, X0S0 ;1024个数据全部采样完成?CJNE R7, #00H, X0S0 ;否,则继续采集CLR TR0 ;是,则停T0CLR EX0 ;关外中断INT0SETB 00HRETI定时器TIMER0中断服务程序清单如下:T0S: JNB 70H, T0S1 ;判是否为系统自检(其中的中断系统)CLR 70H ;是,则清标志后直接返回RETIT0S1: SETB 01HCLR TR0 ;停止T0MOV TH0, 3DH ;送T0原时间常数MOV TL0, 3CHSETB TR0 ;启动T0定时MOVX A, @DPTR ;读入A/D结果MOV DPH, 3BH ;按指针存储MOV DPL, 3AHMOVX @DPTR, AINC DPTR ;指向下一个单元MOV 3BH, DPH ;指针保护MOV 3AH, DPLMOV DPTR, #2000H ;指向A/D接口DEC R7 ;存储计数器减1CJNE R7, #0FFH, T0S2DEC R6T0S2: RETI2.显示字符与汉字的程序实现;******************************************************************* **** ;显示字符示例子程序,程序中的TB1、TB2、TB3三表分别为;TB1:各字符的显示点阵在字库中的首地址表,在内部EEPROM中;TB2:各字符的代码表,在外部RAM中,由子程序建立,例如:0AH代表“峰”;TB3:各字符的位置坐标,在内部EEPROM中;******************************************************************* **** DCH: MOV R0, #00H ;当前显示字符序号指针DCH1: MOV DPTR, #0000H ;查TB2表得当前显示字符的代码MOV A, DPLADD A, R0MOV DPL,AJNC DCH2INC DPHDCH2: MOVX A, @DPTR ;送存30H单元MOV 30H,ACJNE A, #14H, DCH3 ;非空格码转DCH3AJMP DCH7 ;是空格码转DCH7DCH3: MOV A, R0 ;查TB3表得显示字符的位置坐标ADD A, 0E0HPUSH ACCMOV DPTR, #0630HMOVC A, @A+DPTRMOV 31H,A ;位置X坐标送存31HPOP ACCMOVC A, @A+DPTRMOV 32H,A ;位置Y坐标送存32HMOV A, 30H ;查TB1表得字符点阵在字库中的地址ADD A, 30HPUSH ACCMOV DPTR, #0600HMOVC A, @A+DPTRMOV 33H,A ;地址高字节送33HPOP ACCINC ACCMOVC A, @A+DPTRMOV 34H,A ;地址低字节送34HMOV DPH,33H ;取本字符光点数送R1MOV DPL,34HMOV A, #00HMOVC A, @A+DPTRMOV R1, ADCH4: INC DPTR ;取光点坐标数据MOV A, #00HMOVC A, @A+DPTR ;光点X坐标送R7ANL A, #0F0HSW AP AADD A, 31HMOV R7, AMOV A, #00H ;光点Y坐标送R6MOVC A, @A+DPTRANL A, #0FHADD A, 32HMOV R6, APUSH DPLMOV DPTR, #4000H ;输出光点X坐标MOV A, R7MOVX @DPTR,AMOV DPTR, #6000H ;输出光点Y坐标MOV A, R6MOVX @DPTR,AMOV DPTR, #8000H ;X、Y同时输出至CRTMOVX @DPTR, ADEC R1 ;光点计数器减1CJNE R1, #00H, DCH5 ;本字符显示完未成,转显示下个点SJMP DCH6DCH5: POP DPLPOP DPHAJMP DCH4DCH6: POP DPL ;恢复指针POP DPHDCH7: INC R0 ;序号指针增1CJNE R0, #19H, DCH8 ;一帧未完成转显示下个字符RET ;一帧完成,则返回DCH8: AJMP DCH15.程序设计示例;******************************************************************* ****** ;滑移显示子程序,具有暂停功能,在CRT右上角显示对应页号.;******************************************************************* ****** SLD:MOV DPTR,#0020H ;数据指针初值0020HMOV TH1, #0FFH ;送T1时间常数,每点50usMOV TL1, #0EEHMOV 46H, #0FFHMOV 45H, #0EEHSETB ET1 ;开放T1中断SLD0:MOV R7,#00H ;每帧点数计数器清零PUSH DPH ;保护数据指针PUSH DPLSETB TR1 ;启动T1SLD1:CLR 02HSLD2:JNB 02H,SLD2 ;等待T1中断MOVX A,@DPTR ;按指针取数PUSH DPHPUSH DPLMOV DPTR,#6000H ;向Y轴输出MOVX @DPTR, AMOV A, R7MOV DPTR, #4000H ;向X轴输出MOVX @DPTR, AMOV DPTR, #8000H ;同时联合输出到CRTMOVX @DPTR, APOP DPLPOP DPHINC DPTR ;指向下个数据INC DPTR ;计数器减1INC R7CJNE R7, #00H, SLD1 ;本帧(256个数据)未完成则循环SLD3: POP DPL ;恢复数据指针POP DPHMOV A, DPL ;判是否已到数据末地址(即最后一个数据)CJNE A, #20H, SLD4 ;未到,修改数据指针初值转显示下帧MOV A, DPHCJNE A, #04H, SLD4CLR ET1 ;滑移显示完成,关T1LR TR1RETSLD4: JNB P3.0, SLD0 ;是暂停?是则转SLD0INC DPTR ;否则继续滑移显示SJMP SLD0串行通信中断服务子程序清单及其说明如下:SSV: CLR TI ;清发送中断标志DEC R7 ;计数器减1CJNE R7, #0FFH, SSV1DEC R6SSV1: CJNE R6, #00H, SSV2 ;计数器非0,则转SSV2 CJNE R7, #00H, SSV2CLR ES ;为0,则发送完成,关串行中断SJMP SSV3SSV2: INC DPTR ;指向下一个数据MOVX A, @DPTR ;取数LCALL XSS ;补校验位后发送SSV3: RETI补校验位并发送子程序清单:XSS: ADD A, #00H ;加入校验位MOV C, PMOV TB8, CMOV SBUF, A ;发送RET。
51单片机汇编程序设计之算数运算指令
1) 逻辑“与”指令
汇编指令格式 机器指令格式
操作
ANL A,Rn
58H~5FH
A ← (A)∧(Rn)
ANL A,direct 55H direct
A ← (A)∧(direct)
B←(A)÷(B)的余数
注意:若除数(B)=00H,则结果无法确定,OV置1。 CY总是 被清0。该操作也影响标志位P。
3 加1、减1指令
1) 加1指令 汇编指令格式 INC A INC Rn INC direct INC @Ri INC DPTR
机器代码 04H 08H~0FH 05H direct 06H~07H A3H
操作 A ← (A)-1 Rn ← (Rn)-l direct←(direct)-1 (Ri) ← ((Ri))-1
注意:1.该操作不影响PSW标志位。 2. 51单片机无DEC DPTR指令。
4 十进制调整指令
汇编指令格式 机器码格式 操 作
DA A
D4H
对A进行BCD调整
注意:这条指令一般跟在ADD或ADDC指令后,对累 加器A中的结果进行BCD调整。 该操作影响标志位P。
2 乘法、除法指令
1) 乘法指令
汇编指令格式 机器指令格式
操作
MUL AB
A4H
BA ← (A)×(B)
注意:若乘积大于0FFH,则OV置1,否则清0(此时B的内容为 0)。CY总是被清0。该操作也影响标志位P。
2) 除法指令
汇编指令格式 机器指令格式
操作
DIV AB
84H
A←(A)÷(B)的商,
【例2】 试编程计算5678H – 1234H的值,结果保存在R6、 R5中。
解:减数和被减数都是16位二进制数,计算时要先进行低8 位的减法,然后再进行高8位的减法,在进行低8位减
第3章_MCS-51单片机指令系统及汇编语言程序设计2
3. 汇编语言的语句格式是什么?使用标号有什么限制?注释段起什么作用? 答案: MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 标号位于语句的开始,由以字母开头的字母和数字组成,它代表该语句的地址。 标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操 作码之间可以有空格。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 4. MCS-51汇编语言有哪几条常用伪指令?各起什么作用? 答案: ORG:汇编程序起始地址,用来说明其后程序段在存储器中存放的起始地址; EQU:赋值指令,用来给变量标号赋予一个确定的数值; DB:定义数据字节,指令按字节数的形式把数据存放在存储单元中; DW:定义数据字,按字(双字节)的形式把数据存放在存储单元中; DS:定义存储区,从指定的地址单元开始,保留一定数量的存储单元; BIT:位定义,其功能是把位地址赋给字符名称; END:汇编结束,表明汇编语言程序结束。
2.顺序程序
顺序程序是指程序中没有使用转移类指令的程序段,机器执行这 类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环, 也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0~255之间,将其除以100后, 商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存 放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中, #64H可直接写成#100 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH ;将10送入B中, #0AH可直接写成#10 DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $
基于51单片机的计算器设计程序代码(汇编)
DBUF EQU 30HTEMP EQU 40HYJ EQU 50H ;结果存放YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 00HSTART:MOV R3,#0 ;初始化显示为空MOV GONG,#0MOV 30H,#10HMOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#10HMLOOP:CALL DISP ;PAN调显示子程序WAIT:CALL TESTKEY ;判断有无按键JZ WAITCALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1:CJNE A,#1,NEXT2LJMP E1NEXT2:CJNE A,#2,NEXT3LJMP E1NEXT3:CJNE A,#3,NEXT4LJMP E1NEXT4:CJNE A,#4,NEXT5LJMP E1NEXT5:CJNE A,#5,NEXT6LJMP E1NEXT6:CJNE A,#6,NEXT7LJMP E1NEXT7:CJNE A,#7,NEXT8LJMP E1NEXT8:CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11:CJNE A,#11,NEXT12LJMP E2NEXT12:CJNE A,#12,NEXT13LJMP E2NEXT13:CJNE A,#13,NEXT14LJMP E2NEXT14:CJNE A,#14,NEXT15LJMP E2NEXT15: LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1:CJNE R3,#2,N2LJMP E12 ;为第二个数字N2:CJNE R3,#3,N3LJMP E13 ;为第三个数字N3: LJMP E3 ;第四个数字转溢出E11:MOV R4,A ;输入值暂存R4 MOV 34H,A ;输入值送显示缓存MOV 33H,#10HMOV 32H,#10HLJMP MLOOP ;等待再次输入E12:MOV R7,A ;个位数暂存R7 MOV B,#10MOV A,R4MUL AB ;十位数ADD A,R7MOV R4,A ;输入值存R4MOV 32H,#10H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13:MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 30H,#10H ;显示清空MOV 31H,#10HMOV 32H,#10HMOV 33H,#10HMOV 34H,#10HLJMP MLOOPE2: MOV 34H,#10HMOV 33H,#10HMOV 32H,#10HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;”+"N21: CJNE A,#11,N22LJMP JIAN ;"-"N22:CJNE A,#12,N23LJMP CHENG ;"*”N23:CJNE A,#13,N24LJMP CHU ;”/”N24:CJNE A,#0,N25LJMP FIRST ;首次按功能键N25:LJMP DEN ;”=”N4:LJMP E3FIRST: MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA:MOV A,YJ ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN:MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG:M OV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU:MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN:MOV R3,#0LJMP DISP1DISP1:MOV B,#10MOV A,YJ ;结果送累加器DIV AB ;结果除10MOV YJ1,A ;暂存”商”MOV A,B ;取个位数MOV 34H,A ;个位数送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为一位数MOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP:MOV R0,#DBUF ;显示子程序MOV R1,#TEMP+4MOV R2,#5DP10:MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0DEC R1DJNZ R2,DP10MOV R0,#TEMPDP12:MOV A,@R0MOV P0,Aclr P2。
第4章 MCS-51单片机汇编语言程序设计(2)
XCH A,R3 INC A MOVC A,@A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB DW DW A0 A1
…………. DW AN
INC
DPTR
MOVX A,@DPTR SUBB A,R7 JNC XCH BIG1 A,R7
BIG0:INC DPTR
实现程序如下: 实现程序如下
START:CLR C : MOV DPTR,#ST1 , MOVX A,@DPTR , MOV R7,A
MOVX @DPTR,A RET BIG1:MOVX A,@DPTR SJMP BIG0
实现程序如下: 实现程序如下 MOV 30H, 20H ANL 30H,#00011111B MOV A,21H SWAP A RL A ANL A,#11100000B ORL 30H,A
第4章 MCS-51单片机汇编语言程序设计
实现程序如下: 实现程序如下 例 A,@R1 ADDC4.3 做3个字节的 无符号的加法. 无符号的加法.设一个加 MOV R0,#52H , MOV @R0,A 数存放在内部RAM 50H、 RAM的 数存放在内部RAM的50H、 MOV R1,#55H , DEC R0 51H、52H单元中 单元中, 51H、52H单元中,另一 DEC R1 RAM的53H、 MOV A,@R0 个加数存放在RAM 个加数存放在RAM的53H、 MOV A,@R0 54H、55H单元中 单元中, 54H、55H单元中,相加 ADD A,@R1 结果存内部RAM的50H、 结果存内部RAM的50H、 RAM ADDC A,@R1 51H、52H单元 单元, 51H、52H单元,均从高 MOV @R0,A 字节开始存放, 字节开始存放,进位存放 MOV 00H,C 在位寻址区的00H位中。 00H位中 在位寻址区的00H位中。 MOV @R0,A DEC DEC R0 R1
51单片机汇编指令总结
51单片机汇编指令总结数据传输指令一.片内RAM数据传输指令1.以累加器A为目的操作数的指令:MOV A , RnMOV A , directMOV A , @RiMOV A , #data2.以寄存器Rn为目的操作数的指令:MOV Rn , AMOV Rn ,directMOV Rn ,data3.以直接地址为目的操作数的指令:MOV direct ,AMOV direct ,RnMOV direct1 ,derect2MOV direct ,@RiMOV direct ,#data4.间接地址为目的操作数的指令:MOV @Ri ,AMOV @Ri ,directMOV @Ri ,#data5.十六位数据传送指令:MOV DPTR , #data16二.累加器A与片外RAM数据传送指令:MOVX A ,@RiMOVX A , @DPTRMOVX @Ri ,AMOVX @DPTR ,A三.查表寻址:MOVC A ,@A+DPTR (先PC←(PC)+1,后A←((A)+(DPTR)))+MOVC A ,@A+PC (先PC←(PC)+1,后A←((A)+(PC)))四.交换指令:1.字节交换指令:XCH A ,RnXCH A ,directXCH A ,@Ri2.半字节交换指令:XCHD A ,@Ri3.累加器半字节交换指令:SWAP A五.栈操作指令:1.PUSH(入栈指令)PUSH direct2.POP(出栈指令)POP direct算术运算指令:一.加法减法指令:1.加法指令:ADD A ,RnADD A ,directADD A ,@RiADD A ,#data2.带进位加法指令:ADDC A ,Rn A←(A)+(Rn)+CYADDC A ,direct A←(A)+(direct)+CYADDC A ,@Ri A←(A)+((Ri))+CYADDC A ,#data A←(A)+(data)+CY3.带借位减法指令:SUBB A ,Rn A←(A)-CY-(Rn)SUBB A ,direct A←(A)-CY-(direct)SUBB A ,@Ri A←(A)-CY-((Ri))SUBB A ,#data A←(A)-CY-#data二.乘法除法指令:1.乘法指令:MUL AB BA←(A) ×(B)高字节放在B中,低字节放在A中2.除法指令:DIV AB A←(A) ÷(B)的商,(B) ←(A) ÷(B)的余数三.加1减1指令:1.加1指令:INC A A←(A)+1INC Rn Rn←(Rn)+1INC direct direct←(direct)+1INC @Ri (Ri) ←((Ri))+1INC DPTR DPTR←(DPTR)+12.减1指令:DEC ADEC RnDEC directDEC @Ri四.十进制调制指令:DA A 调整累加器A的内容为BCD码逻辑操作指令:一.逻辑与、或、异或指令:1.逻辑与指令:ANL A ,RnANL A ,directANL A ,@RiANL A ,#data2.逻辑或这令:ORL A ,RnORL A ,directORL A ,@RiORL A ,#dataORL direct ,AORL direct ,#data3.逻辑异或指令:XRL A ,RnXRL A ,directXRL A ,@RiXRL A ,#dataXRL direct ,AXRL direct ,#data二.清零、取反指令:1.累加器A清零指令:CRL A2.累加器A取反指令:CPL A三.循环位移指令:1.累加器A循环左移指令:RL A2.累加器A循环右移指令:RR A3.累加器A连同进位位循环左移指令:RLC A4. 累加器A连同进位位循环右移指令:RRC A控制转移指令:一.无条件转移指令:1.绝对转移指令:AJMP addr11 (先PC+2,然后将addr11的低十位传给PC,PC的高六位不变)2.长转移指令:LJMP addr16 (用addr16的值替换PC的值)3.相对转移(短转移)指令:SJMP rel(带符号的偏移字节数)(PC+2,再加rel赋值给PC)4.间接转移指令:JMP @A+DPTR (A)+(DPTR) →(PC)二.条件转移指令:1.累加器判零转移指令:JZ rel 先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序执行JNZ rel 先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执行2.比较转移指令:CJNE 目的操作数,源操作数,relCJNE A,direct,rel 先PC+3传回PC,再比较目的操作数和原操作数CJNE A,#data,rel 目>源时,程序转移,PC+rel传回PC且CY=0CJNE Rn,#data,rel 目=源时,程序顺序执行CJNE @Ri,#data,rel 目<源时,程序转移,PC+rel传回PC且CY=13.减一非0指令:DJNZ Rn,rel 先PC\+2,Rn-1,当Rn为0时程序顺序执行,否则PC+rel传回PCDJNZ direct,rel 先PC+3,direct-1,direct为0时程序顺序执行,否则PC+rel 传回PC二.子程序调用、返回指令:1.绝对调用指令ACALL:ACALL addr11 先PC+2,SP+1将PC的低八位存入SP;SP+1,将PC的高八位存入SP。
C51单片机汇编语言程序设计
C51单片机汇编语言程序设计一、二进制数与十六进制数之间的转换1、数的表达方法为了方便编程时书写,规定在数字后面加一个字母来区别,二进制数后加B十六进制数后加H。
2、二进制数与十六进制数对应表二进制十六进二进制制0000000100100011010001010110011101234567100010011010101111001101 11101111十六进制89ABCDEF3、二进制数转换为十六进制数转换方法为:从右向左每4位二进制数转化为1位十六进制数,不足4位部分用0补齐。
例:将(1010000110110001111)2转化为十六进制数解:把1010000110110001111从右向左每4位分为1组,再写出对应的十六进制数即可。
0101000011011000111150D8F答案:(1010000110110001111)2=(50D8F)16例:将1001101B转化为十六进制数解:把10011110B从右向左每4位分为1组,再写出对应的十六进制数即可。
100111109E答案:10011110B=9EH4、十六进制数转换为二进制数转换方法为:将每1位十六进制数转换为4位二进制数。
例:将(8A)16转化为二进制数解:将每位十六进制数写成4位二进制数即可。
8A10001010答案:(8A)16=(10001010)2例:将6BH转化为二进制数解:将每位十六进制数写成4位二进制数即可。
6B01101011答案:6BH=01101011B二、计算机中常用的基本术语1、位(bit)计算机中最小的数据单位。
由于计算机采用二进制数,所以1位二进制数称作1bit,例如110110B为6bit。
2、字节(Byte,简写为B)8位的二进制数称为一个字节,1B=8bit3、字(Word)和字长两个字节构成一个字,2B=1Word。
字长是指单片机一次能处理的二进制数的位数。
如AT89S51是8位机,就是指它的字长是8位,每次参与运算的二进制数的位数为8位。
51单片机汇编语言指令教程(校对版)ppt课件
06
05
04
03
02
01
00
返回前一次
最新课件
19
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
三字节指令在存储器中存放的方式示意图
最新课件
9
指令的字节数与指令的运行时间
指令的字节多是否意味着指令周期就长?
指令
字节数 周期数
MOV A,R0
1
1
MOV A,#0FFH 2
1
MOV 20H,#30H 3
2
MUL AB
1
4
INC DPTR
1
1
指令说明 R0内容送累加器A
立即数FFH送A 立即数30H送内存20h单元
MOV A,00H ;将RAM中00H单元数据送累加器A
MOV A,R0 ;将工作寄存器R0的内容送累加器A
这里使用了不同的寻址方式,其指令的结构也不相同。
前者是:11100101(0E5H)、00000000(00H) 双字节。
后者的机器码是:11101000(0E8H)
单字节;
在物理结构上,R0与RAM的00H单元恰好是同一单元, 所以不同的指令而执行结果是一样的。
或者:指令中分别包含1个字节的操作数和1个字节的操作 数地址。如:
MOV direct,#data 举例:MOV 20H,#0FFH
51单片机汇编语言程序
如果平方值为两个字节,程序应如何编。
由条件转移指令构成程序判断框部分, 形成分支结构
单分支程序 一个判断决策框,两种分支结 例1 求8位有符号数的绝 构图。 对值。 ORG 0000H 方法:正数不变,负数变 MOV A,R2 补 JNB ACC.7,N ; 为正数? CPL A ;负数 变补
3.5.1
影响条件
条件满足? N 处理段 Y
影响条件 条件满足? N 处理1 Y 处理2
出重量后算出行李运费价格,其秤出的重 量以10kg为1个计价单位G , G已存入40H单 开始 元。计价方法 为50kg以内按3元, 50kg以上 (40H) A (A=G) 3G R2 分段计价: 50kg按3元计价 Y A<=5? ,超过部分按2元计价。 G×3 ;当G≤5 M= N 由此列出算式: ; 当G>5 G×3 + (G-5)×2
ORG 0000H MOV DPTR,#TAB MOV A,20H MOVC A,@A+DPTR ;查表 MOV 21H,A SJMP $ TAB2: DB 00H,01H,04H,09H,16H,25H END
TAB TAB+1 TAB+2 TAB+3 TAB+4 TAB+5
DPTR A
数据 0 1 4 9 16H 25H
1. 利用转移地址表实现转移 例3-7 根据R3的内容转向对应的程序,R3 的内容为0~n,处理程序的入口符号地址分 别为PR0~PRn (n<128)。
分析:将PR0—PRn入口地址列在表格中, 每一项占两个单元,PRn在表中的偏移量 为2n,因此将R3的内容乘2即得PRn在表中 的偏移地址,从偏移地址2n和2n+1两个单 元分别取出PRn的高八位地址和低八位地
51单片机汇编指令表
以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。
- MOVC:将数据从外部代码存储器复制到累加器或寄存器。
2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。
- SUB:从累加器中减去另一个寄存器或存储器中的值。
- INC:将累加器或寄存器的值加1。
- DEC:将累加器或寄存器的值减1。
3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。
- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。
- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。
- CPL:对累加器或寄存器中的值进行按位取反操作。
4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。
- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。
5. 跳转指令:
- JMP:无条件跳转到指定的地址。
- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。
- AJMP:绝对跳转,跳转到指定的地址。
- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。
6. 位操作指令:
- SETB:将某个位设置为1。
- CLR:将某个位清零。
- JB:如果某个位为1,则跳转到指定地址。
- JNB:如果某个位为0,则跳转到指定地址。
51单片机汇编指令集(附记忆方法)
51单片机汇编指令集一、数据传送类指令(7种助记符)MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送;MOVX (Move External RAM) 对外部RAM的数据传送;XCH (Exchange) 字节交换;XCHD (Exchange low-order Digit) 低半字节交换;PUSH (Push onto Stack) 入栈;POP (Pop from Stack) 出栈;二、算术运算类指令(8种助记符)ADD(Addition) 加法;ADDC(Add with Carry) 带进位加法;SUBB(Subtract with Borrow) 带借位减法;DA(Decimal Adjust) 十进制调整;INC(Increment) 加1;DEC(Decrement) 减1;MUL(Multiplication、Multiply) 乘法;DIV(Division、Divide) 除法;三、逻辑运算类指令(10种助记符)ANL(AND Logic) 逻辑与;ORL(OR Logic) 逻辑或;XRL(Exclusive-OR Logic) 逻辑异或;CLR(Clear) 清零;CPL(Complement) 取反;RL(Rotate left) 循环左移;RLC(Rotate Left throught the Carry flag) 带进位循环左移;RR(Rotate Right) 循环右移;RRC (Rotate Right throught the Carry flag) 带进位循环右移;SWAP (Swap) 低4位与高4位交换;四、控制转移类指令(17种助记符)ACALL(Absolute subroutine Call)子程序绝对调用;LCALL(Long subroutine Call)子程序长调用;RET(Return from subroutine)子程序返回;RETI(Return from Interruption)中断返回;SJMP(Short Jump)短转移;AJMP(Absolute Jump)绝对转移;LJMP(Long Jump)长转移;CJNE (Compare Jump if Not Equal)比较不相等则转移;DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;JZ (Jump if Zero)结果为0则转移;JNZ (Jump if Not Zero) 结果不为0则转移;JC (Jump if the Carry flag is set)有进位则转移;JNC (Jump if Not Carry)无进位则转移;JB (Jump if the Bit is set)位为1则转移;JNB (Jump if the Bit is Not set) 位为0则转移;JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;NOP (No Operation) 空操作;五、位操作指令(1种助记符)CLR 位清零;SETB(Set Bit) 位置1。
51单片机串口变并口汇编程序
51单片机串口变并口汇编程序51单片机是一种常用的微控制器,它具有高性能、低功耗、丰富的外设和广泛的应用领域。
其中,串口和并口是常见的通信接口方式。
本文将详细介绍51单片机串口变并口汇编程序的实现方法。
## 1. 串口和并口介绍### 1.1 串口串行通信接口(Serial Communication Interface),简称串口,是一种将数据以连续位的形式传输的通信方式。
它只需要两根线(发送线和接收线)即可实现数据传输,适用于远距离传输和多设备连接。
### 1.2 并口并行通信接口(Parallel Communication Interface),简称并口,是一种将数据以多个位同时传输的通信方式。
它需要多根线同时传输数据,适用于高速数据传输和短距离连接。
## 2. 串行通信与并行通信转换原理在51单片机中,通过软件编程可以实现串行通信与并行通信之间的转换。
下面是其基本原理:### 2.1 串行转并行在将串行数据转换为并行数据时,需要一个移位寄存器来存储接收到的串行数据,并通过时钟信号按位移出到并行总线上。
具体步骤如下:1. 初始化串口参数,包括波特率、数据位、停止位等。
2. 等待串口接收到数据。
3. 将接收到的串行数据写入移位寄存器。
4. 通过时钟信号依次将移位寄存器中的数据按位移出到并行总线上。
### 2.2 并行转串行在将并行数据转换为串行数据时,需要一个移位寄存器来存储要发送的并行数据,并通过时钟信号按位读取并发送出去。
具体步骤如下:1. 初始化串口参数,包括波特率、数据位、停止位等。
2. 将要发送的并行数据写入移位寄存器。
3. 通过时钟信号依次从移位寄存器中读取数据,并发送出去。
## 3. 51单片机串口变并口汇编程序实现下面是一个示例程序,演示了如何在51单片机中实现串口变并口的功能。
```assembly; 定义串口接收和发送函数USART_Rx: ; 串口接收函数MOV A, SBUF ; 读取SBUF中的接收数据RETUSART_Tx: ; 串口发送函数MOV SBUF, A ; 将A寄存器中的数据写入SBUFRET; 主程序入口MAIN:MOV TMOD, #20H ; 设置定时器1为工作模式2,用于串口通信 MOV TH1, #FDH ; 设置波特率为9600SETB TR1 ; 启动定时器1; 初始化串口参数MOV SCON, #50H ; 设置串口工作模式为8位数据位、1位停止位、可变波特率; 接收数据并转换为并行数据发送CALL USART_Rx ; 调用串口接收函数,将接收到的数据存入A寄存器MOV P0, A ; 将A寄存器中的数据写入P0,并行总线; 并行数据转换为串行数据发送MOV A, P1 ; 从P1并行总线读取要发送的数据,存入A寄存器CALL USART_Tx ; 调用串口发送函数,将A寄存器中的数据发送出去SJMP MAIN ; 无限循环END```上述汇编程序通过调用USART_Rx和USART_Tx函数实现了串口接收和发送功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§2.3.2软件结构及程序设计一、主程序及其说明ORG 0000HAJMP MAIN ;主程序ORG 0003HAJMP X0S ;外部中断入口ORG 000BHLJMP T0S ;定时器T0中断入口ORG 001BHAJMP T1S ;定时器T1中断入口ORG 0023HLJMP SSV ;串行中断入口ORG 0030HMAIN: CLR EAMOV SP, #50HMOV A, 48H ;48H、49H单元为冷热启动标志单元CJNE A, #0AAH, LRE ;如等于0AAH、55H,则说明为热启动MOV A, 49H ;否则,为冷启动,则进行自检CJNE A, #55H, LRESJMP HRELRE: LCALL ZJ ;冷启动,则自检SETD: MOV 48H,#0AAH ;自检完后,设置为热启动标志字节MOV 49H,#55HHRE: MOV A, P1 ;读判采样周期档位ANL A, #0FHXRL A, #09HJZ M17 ;数据掉电保护故不进行采样,分析原数据 SJMP M18M17: CLR P3.5AJMP M19M18: MOV R7, #00H ;非掉电保护方式,则将所有采样数据单元 MOV DPTR,#8020H ;清0MOV R6, #00HMOV A, R6M20: MOVX @DPTR,AINC R7INC DPTRCJNE R7,#00H, M20M21: MOV R7,#19HMOV DPTR, #8000HMOV A, #14HM1: MOVX @DPTR, AINC DPTRDJNZ R7,M1SETB IT0CLR P3.5MOV TMOD,#11HM0: MOV A, P1ANL A, #0FHJNZ M2MOV TH0,#0FFH ;由T0设置采样周期MOV TL0,#0F6HMOV 3EH,#02HAJMP M10M2: JB ACC.3,M10JB ACC.2,M8JB ACC.1,M7MOV TH0,#0FFHMOV TL0,#0CEHMOV 3EH,#00HM8: JB ACC.1,M6 JB ACC.0,M5 MOV TH0,#0FCH MOV TL0,#18H MOV 3EH,#10H AJMP M9M7: JB ACC.0,M4 MOV TH0,#0FFH MOV TL0,#9CH MOV 3EH,#01H AJMP M9M6: JB ACC.0,M3 MOV TH0,#0ECH MOV TL0,#78H MOV 3EH,#13H AJMP M9M5: MOV TH0,#0F8H MOV TL0,#30H MOV 3EH,#12H SJMP M9M4: MOV TH0,#0FEH MOV TL0,#0CH MOV 3EH,#03H SJMP M9M3: MOV TH0,#0D8H MOV TL0,#0F0H MOV 3EH,#11H SJMP M9M10: LCALL ERRM9: MOV 3CH,TL0MOV 3DH,TH0MOV A, 3EHMOV DPTR,#8019HMOVX @DPTR,AMOV IE, #8BHMOV IP, #02HCLR 00H ;等待INT0采样中断M11: JNB 00H,M11MOV IE, #88HM23: MOV DPTR,#0E000HMOVX A, @DPTRMOV A, P1ANL A, #0F0HMOV DPTR,#801AHMOVX @DPTR,AM19: MOV IE, #88HACALL ST2 ;建立TB2显示内容表ACALL CALS ;计算信号峰值、均值、脉宽 LCALL TRS ;工程量转换M12: MOV DPTR,#0F000HMOVX A, @DPTRMOV A, P1 ;读显示方式开关JB ACC.4, M13ACALL SD ;固定显示SJMP M12M13: JB ACC.5, M14LCALL XPD ;分页显示SJMP M12M14: JB ACC.6, M15LCALL SLD ;滑移显示SJMP M12M15: JB ACC.7, M16ACALL DCH ;字符显示,将分析结果显示在示波器上SJMP M12M16: JB P3.4, M12 ;是否通信?=0,说明要通信JB P3.3, M16 ;开始通信?=0,说明开始通信;数据通信,以便在上位机上进行数据硬拷贝、FFT分析等LCALL SENT ;数据向上位机发送通信SJMP M12外部中断INT0中断服务程序清单如下:X0S: MOV DPTR, #2000H ;启动A/D转换MOVX @DPTR, ASETB TR0 ;启动T0定时MOV 3AH, #20H ;存储区首地址0020HMOV 3BH, #00HMOV R7, #00H ;存储计数器送初值1024MOV R6, #04HCLR 70H ;系统自检标志清除,即为正常的工作程序而非自检X0S0: CLR 01HX0S1: JNB 01H, X0S1 ;等待T0定时中断CJNE R6, #00H, X0S0 ;1024个数据全部采样完成?CJNE R7, #00H, X0S0 ;否,则继续采集CLR TR0 ;是,则停T0CLR EX0 ;关外中断INT0SETB 00HRETI定时器TIMER0中断服务程序清单如下:T0S: JNB 70H, T0S1 ;判是否为系统自检(其中的中断系统)CLR 70H ;是,则清标志后直接返回RETIT0S1: SETB 01HCLR TR0 ;停止T0MOV TH0, 3DH ;送T0原时间常数MOV TL0, 3CHSETB TR0 ;启动T0定时MOVX A, @DPTR ;读入A/D结果MOV DPH, 3BH ;按指针存储MOV DPL, 3AHMOVX @DPTR, AINC DPTR ;指向下一个单元MOV 3BH, DPH ;指针保护MOV 3AH, DPLMOV DPTR, #2000H ;指向A/D接口DEC R7 ;存储计数器减1CJNE R7, #0FFH, T0S2DEC R6T0S2: RETI2.显示字符与汉字的程序实现;*********************************************************************** ;显示字符示例子程序,程序中的TB1、TB2、TB3三表分别为;TB1:各字符的显示点阵在字库中的首地址表,在内部EEPROM中;TB2:各字符的代码表,在外部RAM中,由子程序建立,例如:0AH代表“峰”;TB3:各字符的位置坐标,在内部EEPROM中;*********************************************************************** DCH: MOV R0, #00H ;当前显示字符序号指针DCH1: MOV DPTR, #0000H ;查TB2表得当前显示字符的代码MOV A, DPLADD A, R0MOV DPL,AJNC DCH2INC DPHDCH2: MOVX A, @DPTR ;送存30H单元MOV 30H,ACJNE A, #14H, DCH3 ;非空格码转DCH3AJMP DCH7 ;是空格码转DCH7DCH3: MOV A, R0 ;查TB3表得显示字符的位置坐标ADD A, 0E0HPUSH ACCMOV DPTR, #0630HMOVC A, @A+DPTRMOV 31H,A ;位置X坐标送存31HPOP ACCINC ACCMOVC A, @A+DPTRMOV 32H,A ;位置Y坐标送存32HMOV A, 30H ;查TB1表得字符点阵在字库中的地址ADD A, 30HPUSH ACCMOV DPTR, #0600HMOVC A, @A+DPTRMOV 33H,A ;地址高字节送33HPOP ACCINC ACCMOVC A, @A+DPTRMOV 34H,A ;地址低字节送34HMOV DPH,33H ;取本字符光点数送R1MOV DPL,34HMOV A, #00HMOVC A, @A+DPTRMOV R1, ADCH4: INC DPTR ;取光点坐标数据MOV A, #00HMOVC A, @A+DPTR ;光点X坐标送R7ANL A, #0F0HSW AP AADD A, 31HMOV R7, AMOV A, #00H ;光点Y坐标送R6MOVC A, @A+DPTRANL A, #0FHADD A, 32HMOV R6, APUSH DPHPUSH DPLMOV DPTR, #4000H ;输出光点X坐标MOV A, R7MOVX @DPTR,AMOV DPTR, #6000H ;输出光点Y坐标MOV A, R6MOVX @DPTR,AMOV DPTR, #8000H ;X、Y同时输出至CRTMOVX @DPTR, ADEC R1 ;光点计数器减1CJNE R1, #00H, DCH5 ;本字符显示完未成,转显示下个点SJMP DCH6DCH5: POP DPLPOP DPHAJMP DCH4DCH6: POP DPL ;恢复指针POP DPHDCH7: INC R0 ;序号指针增1CJNE R0, #19H, DCH8 ;一帧未完成转显示下个字符RET ;一帧完成,则返回DCH8: AJMP DCH15.程序设计示例;************************************************************************* ;滑移显示子程序,具有暂停功能,在CRT右上角显示对应页号.;************************************************************************* SLD:MOV DPTR,#0020H ;数据指针初值0020HMOV TH1, #0FFH ;送T1时间常数,每点50usMOV TL1, #0EEHMOV 46H, #0FFHMOV 45H, #0EEHSETB ET1 ;开放T1中断SLD0:MOV R7,#00H ;每帧点数计数器清零PUSH DPH ;保护数据指针PUSH DPLSETB TR1 ;启动T1SLD1:CLR 02HSLD2:JNB 02H,SLD2 ;等待T1中断MOVX A,@DPTR ;按指针取数PUSH DPHPUSH DPLMOV DPTR,#6000H ;向Y轴输出MOVX @DPTR, AMOV A, R7MOV DPTR, #4000H ;向X轴输出MOVX @DPTR, AMOV DPTR, #8000H ;同时联合输出到CRTMOVX @DPTR, APOP DPLPOP DPHINC DPTR ;指向下个数据INC DPTR ;计数器减1INC R7CJNE R7, #00H, SLD1 ;本帧(256个数据)未完成则循环SLD3: POP DPL ;恢复数据指针POP DPHMOV A, DPL ;判是否已到数据末地址(即最后一个数据)CJNE A, #20H, SLD4 ;未到,修改数据指针初值转显示下帧MOV A, DPHCJNE A, #04H, SLD4CLR ET1 ;滑移显示完成,关T1LR TR1RETSLD4: JNB P3.0, SLD0 ;是暂停?是则转SLD0INC DPTR ;否则继续滑移显示SJMP SLD0串行通信中断服务子程序清单及其说明如下:SSV: CLR TI ;清发送中断标志DEC R7 ;计数器减1CJNE R7, #0FFH, SSV1DEC R6SSV1: CJNE R6, #00H, SSV2 ;计数器非0,则转SSV2 CJNE R7, #00H, SSV2CLR ES ;为0,则发送完成,关串行中断SJMP SSV3SSV2: INC DPTR ;指向下一个数据MOVX A, @DPTR ;取数LCALL XSS ;补校验位后发送SSV3: RETI补校验位并发送子程序清单:XSS: ADD A, #00H ;加入校验位MOV C, PMOV TB8, CMOV SBUF, A ;发送RET。