7项目一程序设计.ppt
文本预览下载声明
时钟与时序 时钟周期P(震荡周期或拍) P=1/fosc 1/12M=0.0833us 状态周期 1个状态周期=2个时钟周期,=2/fosc=0.167us 机器周期 1个机器周期由6个状态周期组成 指令周期 执行一条指令所占用的全部时间。 已知单片机晶振的振荡频率fosc=12MHZ,若某指令为双周期指令,指令执行所需时间为( ) A、1微秒 B、2微秒 C、4微秒 D、1毫秒 上例程序中采用了多重循环程序, 即在一个循环体中又包含了其它的循环程序, 这种方式是实现延时程序的常用方法。 使用多重循环时, 必须注意: (1)循环嵌套, 须层次分明, 不允许有内外层循环交叉。 (2)外循环可一层层向内循环进入, 结束时由里往外一层层退出。 (3) 内循环可以直接转入外循环, 实现一个循环由多个条件控制的循环结构方式。 例10 在内部 RAM中从 50H单元开始的连续单元依次存放了一串字符, 该字符串以回车符为结束标志, 要求测试该字符串的长度。 程序如下: START: MOV R2, #00H MOV R0, #4FH ; 数据指针R0置初值 LOOP: INC R0 INC R2 CJNE @R0, #0DH, LOOP RET 子程序和参数传递 一、 子程序的概念 通常把这些基本操作功能编制为程序段作为独立的子程序, 以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令, 当程序执行到调用指令, 就转到子程序中完成规定的操作, 并返回到原来的程序继续执行下去。 二、 子程序的调用 调用子程序的指令有“ACALL”和“LCALL”, 执行调用指令时, 先将程序地址指针PC改变(“ACALL”加 2, “LCALL”加 3), 然后 PC值压入堆栈, 用新的地址值代替。执行返回指令时, 再将 PC值弹出。 子程序调用中, 主程序应先把有关的参数存入约定的位置, 子程序在执行时, 可以从约定的位置取得参数, 当子程序执行完, 将得到的结果再存入约定的位置, 返回主程序后, 主程序可以从这些约定的位置上取得需要的结果, 这就是参数的传递。 查表程序设计 查表程序是一种常用程序, 它广泛使用于 LED显示控制、 打印机打印控制、数据补偿、数值计算、转换等功能程序中, 这类程序具有简单、执行速度快等特点。 所谓查表法, 就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出, 然后把这张表存于单片机的程序存储器中, 这时自变量值为单元地址, 相应的函数值为该地址单元中的内容。查表, 就是根据变量 X在表格中查找对应的函数值 Y, 使 Y=f(X)。 指令系统中, 有两条查表指令: MOVC A, @A+PC MOVC A, @A+DPTR 例 一个十六进制数存放在内部 RAM 的 HEX单元的低 4 位中, 将其转换成ASCII码并送回 HEX单元。 十六进制 0~9的ASCII码为 30H~39H, A~F的ASCII码为41H~46H, ASCII码表格的首地址为ASCTAB。编程如下: ORG 1000H HEXASC: MOV A, HEX ANL A, #0FH ADD A, #3 ; 修改指针 MOVC A, @A+PC MOV HEX, A RET ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H 在这个程序中, 查表指令MOVC A, @A+PC到表格首地址有两条指令, 占用 3 个字节地址空间, 故修改指针应加 3。 例 设有一个巡回检测报警装置, 需对 96 路输入进行控制, 每路有一个额定的最大值, 是双字节数。当检测量大
显示全部