2.2 程序及算法设计
本设计采用广泛使用的C语言,程序的编码、仿真、调试等采用的是Proteus和Keil软件,以下为相关介绍。
2.2.1程序代码语言
C语言程序是由各种函数构成的[2],一个C程序至少要包括一个函数,并且一个C源程序有且只能有一个main()函数,但也可能包含其它的函数,因此,函数是构成C程序的基本单位。主程序是通过直接写语句和调用其它的函数实现有关功能的,这些函数可以是C语言本身提供的函数,像这样的函数称为库函数,它们也可以是自己编写的函数,这样的函数称为用户自定义函数。库函数和用户自定义函数会有什么样的区别呢? 简单地说,使用Keil C语言的人,可以直接调用C的库函数但不需要为这个函数书写任何代码,但要包含具有该函数的相应的头文件,而用户自定义函数则是个性化的,它们是用户根据需要而编写的。一个C语言程序,总是从main函数开始执行的[5],而不管物理位置上这个Main()放在什么地方。
2.2.2 工作原理
CS-51单片机的内部有2个定时和2个计数器[14]:TO和T1,全双工串行口UART、中断系统,下面一一做出介绍。
当设置为定时工作方式时,输入信号来自内部振荡器,每个机器周期内定时器的计数器做一次加一运算。因此定时器也叫计算机机器周期的计数器。但是每个机器周期又相当于12个正带脉冲,故定时器计数速率为振荡频率的1/12。如果定时器的计数器产生溢出,则标志着定时时间到。下面分别介绍方式寄存器和控制寄存器。
(1)方式寄存器TMOD:
方式控制寄存器,是一可以编程的特殊功能寄存器,字节地址是88H,不可以位寻址。其低4位来控制TO,高4位来控制T1,格式如表1。
表1 方式寄存器TMOD
(MSB) (LSB)
GATA C/T M1 M0 GATA C/T M1 M0
GATE:门控位。当GATE=I时,计数器由外部中断信号INTx来控制,并且当运行控制位TR0(TRl)是“l”时开始计数,是“0”时停止计数。当GATE=“0”时,INTx不参加控制,这时只需要运行控制位TR0是“l”时,计数器就计数,而不管外部中断信号INTx的电平为高电平还是为低电平。
C/T:计数器方式或定时器方式选择位。当C/T=0时是定时器方式,对机器周期计数。当C/T=1时是计数器方式,计数器的触发输入来自TO或T1端的外部脉冲。M1、M0:操作方式选择位。对应着4种操作方式,单片机复位时,TMOD各位上均是“0”。
方式0:13位计数器
方式1:16位计数器
方式2:可自动重新装载的8位计数器
方式3:T0分为两个独立的8位计数器,T1停止计数。
(2)控制寄存器TCON
定时器控制寄存器也是8位特殊功能寄存器,字节地址为88H,可以位寻址,位地址是88~8FH,其格式如表2.
表2 控制寄存器TCON
(MSB) (LSB)
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 51单片机远程家电控制系统的设计+电路流程图+源码(4):http://www.751com.cn/zidonghua/lunwen_909.html