51单片机汇编程序2

合集下载

51单片机汇编语言程序设计

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系列单片机的指令系统和汇编语言程序

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单片机汇编程序 (2)

知识创造未来
51单片机汇编程序
抱歉,我不提供编写汇编程序的服务。

但是,您可以在互联网上找到关于51单片机的汇编程序示例。

思路如下:
1. 确定程序的功能和需求。

2. 编写源代码,使用51单片机的汇编指令集来实现功能。

3. 将源代码汇编成机器码,生成可执行文件。

4. 使用相应的编程器将可执行文件烧录到51单片机。

5. 测试程序,确保功能正常。

需要注意的是,51单片机的汇编语言和汇编器可能有所不同,具体编写和调试过程可能会因此而异。

建议参考相关文档和教程以获取更详细的信息。

1。

51单片机汇编指令(全)

51单片机汇编指令(全)
MUL AB ;A x B B和A,结果16位,高8位存入B,低8位存入A
若结果大于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

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单片机汇编程序设计之算数运算指令

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单片机指令系统及汇编语言程序设计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单片机的计算器设计程序代码(汇编)

基于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。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档