首页
基础教程 | 单片机设计实例 | 常用芯片 | 电子基础
当前位置:单片机教程 >> 单片机设计实例 >> 浏览文章 今天是:
单片机设计实例

单板机监控程序简介

作者:    来源:本站原创    点击数:   更新时间:2007年10月02日   
 

(二) 单板机监控程序简介

1. 什么是监控程序?

单板机的底层管理程序,直接面向硬件,接受键盘命令,执行基本操作,并向用户提供子程序模块。

* 研究监控程序,才能深入了解单板机的工作原理。

* 监控程序是运用汇编语言的良好实例,分析监控程序可以学到许多基本的编程方法和软硬结合的系统设计技术。

* 了解监控程序,以便调用其中的子程序,提高编程效率,

2. 单板机监控程序的基本功能

* 系统初始化。

* 提供人机对话界面,接受键盘命令,显示操作结果。

* 执行键盘命令:

1) 状态设置

2) 检查、修改存储器的内容或I/O端口的输出。

3) 与上位机进行串行通信,传送数据或下载程序。

4) 存储器数据块传送。

5) 运行用户程序,可单步调试。

* 提供常用运算、A/D转换及打印驱动等子程序。

3. 监控程序占用的资源

* 监控程序存放在2764的前4k,0000H-0FFFH。

* 工作寄存器用0区

* 监控状态标志使用内部2FH单元。

* 数据缓冲区使用30H-3FH

* 堆栈栈底 40H

* 显示缓冲区7EH-79H。

* 使用INT0及T1中断。

4. 监控主程序分析

点此在新窗口浏览图片

ORG 0000H

0000 00 NOP

0001 0130 AJMP START

0003 C2A8 CLR EX0 ;INT0入口,用于单步执行。

0005 02039C LJMP PUSH_REG ;转去单步现场保护。

ORG 000BH ;T0中断入口

000B 02200B LJMP 200BH ;转至200BH,向用户开放。

ORG 0013H ;INT1入口

0013 022013 LJMP 2013H ;转至2013H,向用户开放。

ORG 001BH ;T1中断入口

001B 020BB2 LJMP 0BB2H ;监控占用,转去打印控制。

ORG 0023H ;串行口中断入口

0023 022023 LJMP 2023H ;转至2023H,向用户开放。

;***************** 监控程序初始化 *********************

ORG 0030H

0030 7879 START: MOV R0,#79H ;监控初始化程序段

0032 7601 MOV @R0,#01H ;送“CPU-51”显示代码。

0034 08 INC R0

0035 7605 MOV @R0,#05H

0037 08 INC R0

0038 7614 MOV @R0,#14H

003A 08 INC R0

003B 761C MOV @R0,#1CH

003D 08 INC R0

003E 7610 MOV @R0,#10H

0040 08 INC R0

0041 760C MOV @R0,#0CH

0043 758140 MOV SP,#40H ;堆栈指针初值设为40H。

0046 7400 MOV A,#00H ;监控用的存储单元清零。

0048 F52F MOV 2FH,A ;状态标志单元2FH清零。

004A 7830 MOV R0,#30H ;30H—3FH单元清零。

004C 7910 MOV R1,#10H

004E F6 START0: MOV @R0,A

004F 08 INC R0

0050 D9FC DJNZ R1,START0

;**************** 监控开始,等待键命令 *******************

0052 1204AF MONITOR: LCALL KEY_SCAN ;扫描键盘。

0055 7005 JNZ KEY_PROC ;有键则转键处理。

0057 1204D0 LCALL DISPLAY ;维持显示。

005A 0152 AJMP MONITOR

005C 120340 KEY_PROC: LCALL OFF_DISP ;键命令处理程序。

005F 120460 K_P1:LCALL KEY_GET

0062 20E40D JB ACC.4,COMMAND;功能键,转命令处理。

0065 857D7E MOV 7EH,7DH ;数字键,送显示。

0068 857C7D MOV 7DH,7CH

006B 857B7C MOV 7CH,7BH

006E F57B MOV 7BH,A

0070 015F AJMP K_P1

0072 5407 COMMAND: ANL A,#07H ;命令分析。

0074 F8 MOV R0,A ;命令功能参见附录五。

0075 23 RL A

0076 28 ADD A,R0

0077 90007B MOV DPTR,#FUNCTION

007A 73 JMP @A+DPTR ;用散转指令转相应分支。

007B 02024E FUNCTION: LJMP MOV ;转MOV命令分支。

007E 0200A0 LJMP DOWN ;转MON命令分支。

0081 0201B1 LJMP WRIT ;转WRI命令分支。

0084 020161 LJMP READ ;转RDS命令分支。

0087 0200AF LJMP EXEC ;转EXE命令分支。

008A 0200E6 LJMP EXAM ;转EXA命令分支。

008D 020209 LJMP F ;转 [F] 命令分支。

0090 0201FB LJMP UP ;转USE命令分支。

;********************* MON 命令分支 *********************

ORG 00A0H

00A0 11A5 DOWN: ACALL DOWND

00A2 020052 LJMP MONITOR

00A5 120340 DOWND: LCALL OFF_DISP

00A8 757E10 MOV 7EH,#10H

00AB 752F00 MOV 2FH,#00H ;监控标志置待命状态0。

00AE 22 RET ;即 78H位 = 0 。

;************* EXE 命令分支 *****************

00AF 307803 EXEC: JNB 78H,EXECD ;待命方式0,转连续执行。

00B2 020520 LJMP STEP ;待命方式1,转单步执行。

00B5 11BE EXECD: ACALL EXECS

00B7 020052 LJMP MONITOR

转载须保留地址:http://www.51hei.com/mcu/291.html

;*************** USE 命令分支 ***********************

01FB 5100 UP: ACALL UPS

01FD 020052 LJMP MONITOR

0200 D278 UPS: SETB 78H

0202 120340 LCALL OFF_DISP

0205 757E1B MOV 7EH,#1BH

0208 22 RET

;*************** 取键值子程序 ************************


ORG 0460H

KEY_GET:ACALL KEY_SCAN

JNZ K_G1

LCALL DISPLAY

AJMP KEY_GET

K_G1: LCALL DISPLAY

LCALL DISPLAY

LCALL KEY_SCAN

JNZ K_G2

LCALL DISPLAY

AJMP KEY_GET

K_G2: MOV R2,#0FEH

MOV R4,#00H

K_G3: MOV DPTR,#6000H

MOV A,R2

MOVX @DPTR,A

MOV A,P1

JB ACC.0,LINE1

MOV A,#00H

AJMP K_G_END

LINE1: JB ACC.1,LINE2

MOV A,#08H

AJMP K_G_END

LINE2:JB ACC.2,NEXT_COL

MOV A,#10H

K_G_END: ADD A,R4

PUSH ACC

KEY_FREE: LCALL DISPLAY

ACALL KEY_SCAN

JNZ KEY_FREE

POP ACC

RET

NEXT_COL: INC R4

MOV A,R2

JNB ACC.7,KEY_NEXT

RL A

MOV R2,A

AJMP K_G3

KEY_NEXT: AJMP KEY_GET

KEY_SCAN: MOV DPTR,#6000H

MOV A,#00H

MOVX @DPTR,A

MOV A,P1

CPL A

ANL A,#07H

RET


;*************** 显示扫描子程序 ******************

DIS0000: MOV A,#0FFH ;显示准备

MOV DPTR,#8000H

MOVX @DPTR,A

MOV R0,#79H

MOV R3,#01H

AJMP DIS0001

ORG 04D0H

DISPLAY: AJMP DIS0000

DIS0001: MOV A,R3

DISPLAY1: MOV DPTR,#6000H

04D6 F0 MOVX @DPTR,A

04D7 E6 MOV A,@R0

04D8 2419 ADD A,#19H

04DA 83 MOVC A,@A+PC

04DB 908000 MOV DPTR,#8000H

04DE F0 MOVX @DPTR,A

04DF 91EB ACALL DELAY

04E1 08 INC R0

04E2 EB MOV A,R3

04E3 20E504 JB ACC.5,DISPLAY2

04E6 23 RL A

04E7 FB MOV R3,A

04E8 81D3 AJMP DISPLAY1

04EA 22 DISPLAY2: RET

;***** 延时子程序

04EB 7F02 DELAY: MOV R7,#02H

04ED 7EFF DELAY1: MOV R6,#0FFH

04EF DEFE DELAY2: DJNZ R6,DELAY2

04F1 DFFA DJNZ R7,DELAY1

04F3 22 RET

;*******字形码表

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H

DB 90H,88H,83H,0C6H,0A1H,86H,8EH,8CH,0DEH

DB 0F3H,91H,0BFH,7FH,0FFH,00H,0AFH,0A3H,00H

DB 0CH,0C1H,40H,79H,24H,30H,19H,12H,02H,78H,00H,10H




 
发表评论】【告诉好友】【打印此文】【收藏此文】【关闭窗口
网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
 >> 推荐文章
单片机USB-ISP下载线制作
自制单片机实验板
单片机一键多功能按键识别设
 >> 阅读排行
keil教程
单片机电子时钟设计
单片机DS18B20水温控制系统
单片机交通灯设计
单片机课程设计
单片机时钟设计
单片机数字钟设计
单片机键盘程序(4×4矩阵式
单片机串口通讯
单片机秒表设计
 >> 相关文章
  • 暂无相关链接
  • 站长:刘兴国 站长信箱:372xcom1@21cn.com
    单片机教程 @ www.51hei.com 2007-2008