基于51单片机交通灯控制器设计内容摘要:
第 三 章 软件系统设计介绍 为了使汇编程序段和 C 程序能够兼容,必须为汇编语言编写的程序段指定段名并进行定义。 如果要在它们之间传递函数,则必须保证汇编程序用来传递函数的存储区和 C 函数使用的存储区是一样的。 被调用的汇编函数不仅要在汇编程序中使用伪指令以使 CODE 选项有效,并声明为可再定位的段类型,而且还要在调用它的 C 语言主程序中进行声明。 函数名的转换规律如表 所示。 段名的转换规律如表 所 示。 表 函数名的转换规律 主函数中的声明 汇编符号名 说明 Void funs(void) FUNC 无参数传递或不含寄存器的函数名不作改变转入目标文件中,名字只是简单地转为大写形式 Void funs(char) _FUNC 带寄存器参数的函数名,前面加“ _”前缀,它表明这类函数包含寄存器内的参数传递 Void funs(void) reentrant _?FUNC 对于重入函数,前面加“ _?”前缀,它表明该函数包含栈内的参数传递 表 段名的转换规律 存储区 命名转换 CODE ?PR?CO XDATA ?XD DDATA ?DT BIT ?BI PDATA ?PD 3. Keil C51 与汇编的接口 (1)模块内接口 有时候,需要使用汇编语言来编写程序,比如对硬件进行操作或在一些对时钟要求很严格的场合,但又不希望用汇编语言来编写全部程序或调用汇编语言编写的函数,那么可以通过预编译指令“ asm”,在 C 代码中插入汇编代码。 方法是用 pragma 语句 ,具体结构是 : pragma asm 汇编行 pragma endasm 这种方法是通过 asm与 endasm告诉 C51 编 译器中问行不用编译为汇编行。 (2)模块间接口 基于 51 单片机交通灯控制器设计 17 C 模块与汇编模块的接口较简单,分别用 C51 与 A51 对源文件进行编译,然后用 L51 连接 obj 文件即可。 (3)SRC 控制 该控制指令将 C 文件编译生成汇编文件 (.SRC),该汇编文件在改名后,生成汇编 .ASM 文件,再用 A51 进行编译。 C51 对标准 C 语言的扩展 C51 语言的特色主要体现在以下几方面 : (1)1 虽然继承了标准 C 语言的绝大部分的特性,而且基本语法相同,但其本身又在特定的硬件结构上有所扩展,如关键字 sbit, data, idata, pdata,xdata,code 等。 (2)应用 C51 更要注重对系统资源的理解,因为单片机的系统资源相对 PC 机来说很贫乏,对于 RAM,ROM 中的每一字节都要充分利用。 可以通过多看编译生成的 .m51 文件来了解自己程序中资源的利用情况。 (3)程序上应用的各种算法要精简,不要对系统构成过重的负担。 尽量少用浮点运算,可以用 unsigned 无符号型数据的就不要用有符号型数据,尽量避免多字节的乘除运算,多使用移位运算等。 1. 数据类型 C51 具有标准 C 语言的所有标准数据类型,除此之外,为了更加有效地利用8051 的 结构,还加入了以下特殊的数据类型。 bit 位变量值为 0或 1。 sbit 从字节中声明的位变量 0或 1。 sfr 特殊功能寄存器, sfr 字节地址为 0~ 255 sfr16 同上,只是 sfr 字地址为 0~ 65535 其余数据类型如 char,enum,short,int,long,float 等与标准语言 C 相同。 完整的数据类型表如表 所示。 表 数据类型 数据类型 位数 字节数 数值范围 bit 1 0~ 1 char 8 1 128~ +127 unsigned char 8 1 0~ 255 18 第 三 章 软件系统设计介绍 enum 16 2 32768~ +32767 short 16 2 32768~ +32767 unsigned short 16 2 0~ 65535 int 16 2 32768~ +32767 unsigned int 16 2 0~ 65535 long 32 4 2147483648~+2147483647 unsigned long 32 4 0~ 4294967295 float 32 4 177。 ~177。 +38 sbit 1 0~ 1 sfr 8 1 0~ 255 sfr 16 16 2 0~ 65535 bit,sbit,sfr 和 sfr16 数据类型专门用于 8051 硬件和 C51 编译器,并不是标准 C语言的一部分,不能通过指针进行访问。 bit,sbit,sfr 和 sfr16 数据类型用于访问 8051的特殊功能寄存器,例如 sfr P0=0x80,表示声明变量 P0,并为其分配特殊功能寄存器地址 0x80。 当结果为不同的数据类型时, C51 编译器自动转换数据类型。 除了数据类型的转换之外,带符号变量的符号扩展也是自动完成的。 2. 存储类型及存储区 C51 编译 器支持 8051 及其扩展系列,并提供对 8051 所有存储区的访问。 存储区可分为内部数据存储区、外部数据存储区以及程序存储区。 8051 CPU 内部的数据存储区是可读写的, 8051 派生系列最多可有 256 字节的内部数据存储区,其中低 128 字节可直接寻址,高 128 字节 (从 0x80 到 0xff)只能间接寻址,从 20H 开始的 16 字节可位寻址。 内部数据区又可以分成 3 个不同的存储类型 :data、 idata 和bdata。 外部数据区也是可读写的,访问外部数据区比访问内部数据区慢,因为外部数据区是通过数据指针加载地址来间接访问的。 C51 编译器提供两种不同的存储类型 xdata 和 pdata 访问外部数据。 程序 CODE 存储区是只读的,不能写。 程序存储区可能在 8051CPU 内或者在外部或者内外都有,这由 8051 派生的硬件决定。 每个变量可以明确地分配到指定的存储空间,对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部数据存储器中,而把较少使用的变量放在外部数据存储器中。 各存储区的简单描述如表 所示。 变量的声明中还包括了对存储器类型的指定,即指定变量存放的位置。 基于 51 单片机交通灯控制器设计 19 表 存储区的简单描述 存储区 描述 DATA RAM 的低 128 字节,可在一个周期内直接寻址 BDATA DATA 区可字节、位混合寻址的 16 字节区 IDATA RAM 区的高 128 字节,必须采用间接寻址 XDATA 外部存储区,使用 DPTR 间接寻址 PDATA 外部存储区的 256 字节,通过 P0 口的地址对其寻址。 使用指令 MovX @Rn,需要两个指令周期 CODE 程序存储区使用 DPTR 寻址 DATA 区 DATA 区的寻址是最快的,所以应该把经常使用的变量放在 DATA区。 但是 DATA 区的空间是有限的, DATA 区除了包含程序 变量外,还包含了堆栈和寄存器组。 DATA 区声明中的存储类型标识符为 data,通常指低 128 字节的内部数据区存储的变量,可直接寻址。 BDATA 区 BDATA 区实际就是 DATA 区中的位寻址区,在这个区声明变量就可进行位寻址。 位变量的声明对状态寄存器来说是十分有用的,因为它可能仅仅需要使用某一位,而不是鹅字节。 BDATA 区声明中的存储类型标识符为bdata,指内部可位寻址的 1字节存储区 (20H到 2FH)可位寻址变量的数据类型。 编译器不允许在 BDATA 区中声明 float 和 double 型的变量。 如果想对浮点数的每 一位进行寻址,可以通过包含 float 和 long 的联合体来实现 . IDATA 区 IDATA 区存放使用比较频繁的变量,使用寄存器作为指针进行寻址,即在寄存器中设置 8 位地址进行间接寻址。 与外部存储器寻址相比它的指令执行周期和代码长度都比较短。 IDATA 区声明中的存储类型标识为 idata,指内部的 256 字节的存储区,但是只能间接寻址,速度比直接寻址慢。 PDATA 和 XDATA 区 PDATA 和 XDATA 区属于外部存储区,外部数据区是可读写的存储区,最多可有 64KB ,当然这些地址不是必须用作存储区的。 访问外部数据 存储区比访问内部数据存储区慢,因为外部数据存储区是通过数据指针加载地址来间接访问的。 程序存储区 CODE 程序存储区的数据是不可改变的,跳转向量和状态表对CODE 段的访问和对 XDATA 区的访问时间是一样的。 编译的时候要对程序存储区中的对象进行初始化,否则就会产生错误,程序存储区 CODE 声明中的标识符为 code,在 C51 编译器中可用 code 存储区类型标识符来访问程序存储区。 20 第 三 章 软件系统设计介绍 3. 存储器模式 存储器模式是函数自变量、自动变量和没有明确规定存储类型的变量的默认存储器类型,指定存储器类型需要在命令行中使用 SMALL,COMPACT 和 LARGE3个控制命令中的 1 个。 SMALL 在该模式中,所有变量都默认地位于 51内部数据存储器,这和使用data 指定存储器类型的方式一样。 在此模式下,变灵访问的效率很高,但所有的数据对象和堆栈必须适合内部 RAM。 COMPACT 当使用 COMPACT 模式时,所有变量都被默认为在外部数据存储器的页内,这和使用 pdata 指定存储器类 型 是一样的。 该存储器类型适用于变量不超过 256 字节的情况,此限制是由寻址方式所决定的。 和 SMALL 模式相比,该存储器模型的效率比较低,对变量访问的速度也慢 一些,但比 LARGE模式快。 地址的高字节通常通过 P2 口设置,编译器没有设置该口。 LARGE 在 LARGE 模式中,所有变量都默认为位于外部数据存储器 (这和使用xdata 指定存储器类型是一样的 ),并使用数据指针 DPTR 进行寻址。 通过数据指针访问外部数据存储器的效率较低,特别是当变量为 2 字节或更多字节时,该模式要比 SMALL 和 COMPACT 产生更多的代码。 4. 特殊功能寄存器 (SFR) 51 单片机提供 128 字节的 SFR 寻址区,地址为 80H~ FFH。 51 单片机中,除了程序计数器 PC 和 4 组通用寄存器组之外,其 他所有的寄存器均为 SFR,并位于片内特殊寄存器区。 这个区域可位寻址、字节寻址或字寻址,用以控制定时器、计数器、串口、 I/O 及其他部件。 特殊功能寄存器可山以下几种关键字说明。 (1) sfr 声明字节寻址的特殊功能寄存器,比如 sfr P0=0x80;表示 P0 口地址为 80H。 注意:“ sfr”后面必须跟一个特殊寄存器名。 “ =”后面的地址必须是常数,不允许带有运算符的表达式,这个常数值的范围必须在特殊功能寄存器地址范围内,位于 0x80H 到 0xFFH 之间。 (2) sfr16 许多新的 8051派生系列单片机用两个连续地址的 SFR来指定 16位值,例如 8052 用地址 0xCC 和 0xCD 表示定时器 /计数器 2的低和高字节,如 sfr 16 T2=0xCC;表示 T2 口地址的低地址 T2L=0xCC,高地址 T2H=0xCD。 sfr16 声明和 sfr 声明遵循相同的原则,任何符号名都可用在 sfr16 的声明中。 声明中名字后面不是赋值语句。 而是一个 SFR 地基于 51 单片机交通灯控制器设计 21 址,其高字节必须位于低字节之后。 这种声明适用于所有新的 SFR,但不能用于定时 /计数器 0和计数器 1。 (3) sbit 声明可位寻址的特殊功能寄存器和别的可位寻址的目标。 “ =”号后将绝对地址赋给变量名, 3 种变量声明 形式如下。 5. C51 指针 (1) 通用指针 C51 提供一个 3字节的通用指针,通用指针的声明和使用均与标准C语言相同,但它同时还可以说明指针的存储类型。 (2) 指定存储区指针 C51 允许使用者规定指针指向的存储段,这种指针叫指定存储区指针。 (3) 指针转换 C51 编译器可以在指定存储区指针和通用指针之间转换,指针转换可以用类型转换的直接程序代码来强迫转换,或在编译器内部强制转换。 当把指定存储区指针作为参数传递给要求使用通用指针的函数时, C51 编译器就把指定存储区指针转换为通用指针。 (4) 绝对 指针 绝对指针类型可访问任何存储区的存储区地址,也可用绝对指针调用定位在绝对或固定地址的函数。 6. 函数 (1) 函数声明 Keil C51 编译器扩展了标准 C 函数声明,这些扩展有: 1)指定一个函数作为一个中断函数。 2)选择所用的寄存器组 : 3)选择存储模式 : 4)指定重入。 5)指定 ALIEN PL。基于51单片机交通灯控制器设计
相关推荐
in)) /*当时间到闹钟的时间时,蜂铃器叫 5次 */ { if(ring5) { ring++。 alarm=0。 delay(100)。 alarm=1。 } } } } void Leap_Nonleap(int aa) /*判断是否为闰年 */ { if(((aa%4==0)amp。 amp。 (aa%100!=0))||(aa%400==0)) {
止新数据输入,在时钟端( CLOCK)脉冲上升沿作用下 Q0为低电平。 当 A、 B 有一个为高电平,则另一个就允许输入数据,并在 CLOCK 上升沿作用下决定 Q0 的状态。 表 31 74LS164 工作参数 参数 最小值 标准值 最大值 单位 高电平输入电压 2 — — V 低电平输入电压 — — V 高电平输出电压 V 低电平输出电压 — V 时钟频率 0 — 25 MHZ
NG EQU。 南北方向绿灯 ER EQU。 东西方向红灯 EY EQU。 东西方向黄灯 EG EQU。 东西方向绿灯 BREAKRULE EQU。 交通违章模拟信号输入 SOUND EQU。 警报声输出信号 PEAKORNORM EQU。 高峰信 号输入 ALLSTOP EQU。 全部禁行输入 ALLGO EQU。 全部通行输入 NSTHROUGH EQU。 南北通行输入 EWTHROUGH
utton 目录 : 一 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。 单片机微型计算机简 称单片机,特别适用于控制领域,故又称为微控制器。 通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和 I/O 接口电路等。 因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。 单片机经过 3 代的发展
24L01 是由 NORDIC 生产的工作在 ~ 的 ISM 频段的单片无线收发器芯片。 采用 无线收发器包括:频率发生器、增强型 “ SchockBurst”模式控制器、功率放大器、晶体振荡器、调制器和解调器。 STC89C51 用于控制平台,将所要设计的功能模块集成在单片机上,也就是把 无线发射模块、无线接收模块、单片机控制模块、显示模块、呼叫报警部分和复位应答