51单片机汇编程序2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§2.3.2软件结构及程序设计
一、主程序及其说明
ORG 0000H
AJMP MAIN ;主程序
ORG 0003H
AJMP X0S ;外部中断入口
ORG 000BH
LJMP T0S ;定时器T0中断入口
ORG 001BH
AJMP T1S ;定时器T1中断入口
ORG 0023H
LJMP SSV ;串行中断入口
ORG 0030H
MAIN: CLR EA
MOV SP, #50H
MOV A, 48H ;48H、49H单元为冷热启动标志单元
CJNE A, #0AAH, LRE ;如等于0AAH、55H,则说明为热启动
MOV A, 49H ;否则,为冷启动,则进行自检
CJNE A, #55H, LRE
SJMP HRE
LRE: LCALL ZJ ;冷启动,则自检
SETD: MOV 48H,#0AAH ;自检完后,设置为热启动标志字节
MOV 49H,#55H
HRE: MOV A, P1 ;读判采样周期档位
ANL A, #0FH
XRL A, #09H
JZ M17 ;数据掉电保护故不进行采样,分析原数据 SJMP M18
M17: CLR P3.5
AJMP M19
M18: MOV R7, #00H ;非掉电保护方式,则将所有采样数据单元 MOV DPTR,#8020H ;清0
MOV R6, #00H
MOV A, R6
M20: MOVX @DPTR,A
INC R7
INC DPTR
CJNE R7,#00H, M20
M21: MOV R7,#19H
MOV DPTR, #8000H
MOV A, #14H
M1: MOVX @DPTR, A
INC DPTR
DJNZ R7,M1
SETB IT0
CLR P3.5
MOV TMOD,#11H
M0: MOV A, P1
ANL A, #0FH
JNZ M2
MOV TH0,#0FFH ;由T0设置采样周期
MOV TL0,#0F6H
MOV 3EH,#02H
AJMP M10
M2: JB ACC.3,M10
JB ACC.2,M8
JB ACC.1,M7
MOV TH0,#0FFH
MOV TL0,#0CEH
MOV 3EH,#00H
M8: JB ACC.1,M6 JB ACC.0,M5 MOV TH0,#0FCH MOV TL0,#18H MOV 3EH,#10H AJMP M9
M7: JB ACC.0,M4 MOV TH0,#0FFH MOV TL0,#9CH MOV 3EH,#01H AJMP M9
M6: JB ACC.0,M3 MOV TH0,#0ECH MOV TL0,#78H MOV 3EH,#13H AJMP M9
M5: MOV TH0,#0F8H MOV TL0,#30H MOV 3EH,#12H SJMP M9
M4: MOV TH0,#0FEH MOV TL0,#0CH MOV 3EH,#03H SJMP M9
M3: MOV TH0,#0D8H MOV TL0,#0F0H MOV 3EH,#11H SJMP M9
M10: LCALL ERR
M9: MOV 3CH,TL0
MOV 3DH,TH0
MOV A, 3EH
MOV DPTR,#8019H
MOVX @DPTR,A
MOV IE, #8BH
MOV IP, #02H
CLR 00H ;等待INT0采样中断M11: JNB 00H,M11
MOV IE, #88H
M23: MOV DPTR,#0E000H
MOVX A, @DPTR
MOV A, P1
ANL A, #0F0H
MOV DPTR,#801AH
MOVX @DPTR,A
M19: MOV IE, #88H
ACALL ST2 ;建立TB2显示内容表
ACALL CALS ;计算信号峰值、均值、脉宽 LCALL TRS ;工程量转换
M12: MOV DPTR,#0F000H
MOVX A, @DPTR
MOV A, P1 ;读显示方式开关
JB ACC.4, M13
ACALL SD ;固定显示
SJMP M12
M13: JB ACC.5, M14
LCALL XPD ;分页显示
SJMP M12
M14: JB ACC.6, M15
LCALL SLD ;滑移显示
SJMP M12
M15: JB ACC.7, M16
ACALL DCH ;字符显示,将分析结果显示在示波器上
SJMP M12
M16: JB P3.4, M12 ;是否通信?=0,说明要通信
JB P3.3, M16 ;开始通信?=0,说明开始通信;数据通信,以便在上位机上进行数据硬拷贝、FFT分析等
LCALL SENT ;数据向上位机发送通信
SJMP M12
外部中断INT0中断服务程序清单如下:
X0S: MOV DPTR, #2000H ;启动A/D转换
MOVX @DPTR, A
SETB TR0 ;启动T0定时
MOV 3AH, #20H ;存储区首地址0020H
MOV 3BH, #00H
MOV R7, #00H ;存储计数器送初值1024
MOV R6, #04H
CLR 70H ;系统自检标志清除,即为正常的工作程序而非自检X0S0: CLR 01H
X0S1: JNB 01H, X0S1 ;等待T0定时中断
CJNE R6, #00H, X0S0 ;1024个数据全部采样完成?
CJNE R7, #00H, X0S0 ;否,则继续采集
CLR TR0 ;是,则停T0
CLR EX0 ;关外中断INT0
SETB 00H
RETI