基于单片机一氧化碳报警器设计内容摘要:

的数据重叠问题。 发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。 操作 SBUF 寄存器的方法则很简单,只要把这个 99H 地址用关键字 sfr 定义为一个变量就可以对其进行读写操作了,如 sfr SBUF = 0x99。 当然你也可以用其它的名称。 通常在标准的 或 等头文件中已对其做了定义,只要用 include 引用就可以了。 SCON 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。 SCON 就是 51 芯片的串行口控制寄存器。 它的寻址地址是 98H,是一个可以位寻址的寄存器,作用就是监视和控制 51 芯片串行口的工作状态。 51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用 SCON 寄存器。 它的各个位的具体定义如下: SM0 SM1 SM2 REN TB8 RB8 TI RI SM0、 SM1 为串行口工作模式设置位,这样两位可以对应 进行四种模式的设置。 串行口工作模式设置。 SM0 SM1 模式 功能 波特率 0 0 0 同步移位寄存器 fosc/12 0 1 1 8 位 UART 可变 1 0 2 9 位 UART fosc/32 或 fosc/64 1 1 3 9 位 UART 可变 成都电子机械高等专科学校成教院毕业论文 (基于单片机一氧化碳报警设计) 15 在这里只说明最常用的模式 1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件资料查看。 表中的 fosc 代表振荡器的频率,也就是晶振的频率。 UART 为 (Universal Asynchronous Receiver)的英文缩 写。 SM2 在模式 模式 3 中为多处理机通信使能位。 在模式 0 中要求该位为 0。 REM 为允许接收位, REM 置 1 时串口允许接收,置 0 时禁止接收。 REM 是由软件置位或清零。 如果在一个电路中接收和发送引脚 , 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入 REM=0 来禁止接收,在子程序结束处加入 REM=1 再次打开串口接收。 大家也可以用上面的实际源码加入 REM=0 来进行实验。 TB8 发送数据位 8,在模式 2 和 3 是要发送的第 9 位。 该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。 RB8 接收数据位 8,在模式 2 和 3 是已接收数据的第 9 位。 该位可能是奇偶位,地址 /数据标识位。 在模式 0 中, RB8 为保留位没有被使用。 在模式 1 中,当 SM2=0, RB8 是已接收数据的停止位。 TI 发送中断标识位。 在模式 0,发送完第 8 位数据时,由硬件置位。 其它模式中则是在发送停止位之初,由硬件置位。 TI 置位后 ,申请中断, CPU 响应中断后,发送下一 帧数据。 在任何模式下, TI 都必须由软件来清除,也就是说在数据写入到 SBUF 后,硬件发送数据,中断响应(如中断打开),这时 TI=1,表明发送已完成, TI 不会由硬件清除,所以这时必须用软件对其清零。 RI 接收中断标识位。 在模式 0,接收第 8 位结束时,由硬件置位。 其它模式中则是在接收停止位的半中间,由硬件置位。 RI=1,申请中断,要求 CPU 取走数据。 但在模式 1 中, SM2=1 时,当未收到有效的停止位,则不会对 RI 置位。 同样 RI 也必须要靠软件清除。 常用的 串口模式 1 是传输 10 个位的, 1 位起始位为 0,8 位数据位,低位在先, 1 位停止位为 1。 它的波特率是可变的,其速率是取决于定时器 1 或定时器 2 的定时值(溢出速率)。 AT89C51 和 AT89C2051 等 51 系列芯片只有两个定时器,定时器 0 和定时器 1,而定时器2是 89C52 系列芯片才有的。 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。 波特率是指串行端口每秒内可以传输的波特位数。 有一些初学的朋友认为波特率是指每秒传输的字节数,如标准 9600 会被误认为每秒种可以传送9600 个字节,而实际上它是指每秒可以传送 9600 个二进位,而一个字节要 8 个二进位,如用串口模式 1 来传输那么加上起始位和停止位,每个数据字节就要占用 10 个二进位, 9600 波特率用模式 1 传输时,每秒传输的字节数是 9600247。 10 = 960 字节。 51 芯片的串 口工作模式 0的波特率是固定的,为 fosc/12,以一个 12M 的晶振来计算,那么它的波特率可以达到 1M。 模式 2 的波特率是固定在 fosc/64 或 fosc/32,具体用那一种就取决于 成都电子机械高等专科学校成教院毕业论文 (基于单片机一氧化碳报警设计) 16 PCON 寄存器中的 SMOD位,如 SMOD 为 0,波特率为 focs/64,SMOD 为 1,波特率为 focs/32。 模式 1 和模式 3 的波特率是可变的,取决于定时器 1 或 2( 52 芯片)的溢出速率。 那么我们怎么去计算这两个模 式的波特率设置时相关的寄存器的值呢。 可以用以下的公式去计算。 波特率=( 2SMOD247。 32 ) 定时器 1 溢出速率 上式中如设置了 PCON 寄存器中的 SMOD 位为 1 时就可以把波特率提升 2 倍。 通常会使用定时器 1 工作在定时器工作模式 2 下,这时定时值中的 TL1 做为计数, TH1 做为自动重装值 ,这个定时模式下,定时器溢出后, TH1 的值会自动装载到 TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。 在这个定时模式 2 下定时器 1 溢出速率的计算公式如下: 溢出速率=(计数速率) /(256- TH1) 上式中的 “ 计数速率 ” 与所使用的晶体振荡器频率有关,在 51 芯片中定时器启动后会在每一个机器周期使定时寄存器 TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知 51 芯片的计数速率为晶体振荡器频率的 1/12,一个 12M 的晶振用在 51 芯片上,那么 51 的计数速率就为 1M。 通常用 晶体是为了得到标准的无误差的波特率,那么为何呢。 计算一下就知道了。 如我们要得到 9600 的波特率,晶振为 和 12M,定时器 1 为模式 2, SMOD 设为 1,分别看看那所要求的 TH1 为何值。 代入公式: 9600= (2247。 32)(()/(256 TH1)) TH1= 250 12M 9600= (2247。 32)((12M/12)/(256 TH1)) TH1≈ 上面的计算可以看出使用 12M 晶体的时候计算出来的 TH1 不为整数,而 TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的 9600 波特率。 当然一定的误差是可以在使用中被接受的,就算使用 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。 第二节 模数转换部分电路设计 模数转换部分采用 ADC0809芯片。 ADC0809 是 M美国国家半导体公司生产的 CMOS 工艺 8通道, 8 位逐次逼近式 A/D转换器。 其内部有一个 8 通道 多路开关,它可以根据地址码锁存译码后的信号,只选通 8 路模拟输入信号中的一个进行 A/D转换。 是目前国内应用最广泛的 8 位通用 A/D芯片。 ( 1) 主要特性 : ( 1) 8 路输入通道, 8 位 A/ D 转换器,即分辨率为 8 位。 ( 2) 具有转换起停控制端。 成都电子机械高等专科学校成教院毕业论文 (基于单片机一氧化碳报警设计) 17 ( 3)转换时间为 100μs( 时钟为 640kHz 时 ), 130μs (时钟为 500kHz 时) ( 4) 单个+ 5V 电源供电 ( 5) 模拟输入电压范围 0~+ 5V,不需零点和满刻度校准。 ( 6) 工作温度范围为 40~+ 85 摄氏度 ( 7) 低功耗,约 15mW。 ( 2) 内部结构 : ADC0809 是 CMOS 单片型逐次逼近式 A/ D 转换器,内部结构如图 13. 22 所示,它由 8 路模拟开关、地址锁存与译码器、比较器、 8 位开关树型 A/D转换器、逐次逼近。 ( 3) 外部特性(引脚功能) : ADC0809 芯片有 28条引脚,采用双列直插式封装,如图 13. 23 所示。 下面说明各引脚功能。 IN0~ IN7: 8 路模拟量输入端。 21~ 28: 8 位数字量输出端。 ADDA、 ADDB、 ADDC: 3 位地址输入线,用于选通 8路模拟输入中的一路 ALE:地址锁存允许信号,输 入,高电平有效。 START: A/ D 转换启动脉冲输入端,输入一个正脉冲(至少 100ns 宽)使其启动(脉冲上升沿使 0809 复位,下降沿启动 A/D 转换)。 EOC: A/ D 转换结束信号,输出,当 A/ D 转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。 当 A/ D 转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。 要求时钟频率不高于 640KHZ。 REF( +)、 REF( ):基准电压。 VCC:电源,单一+ 5V。 GND:地。 其内部结构及引脚图如图 所示 成都电子机械高等专科学校成教院毕业论文 (基于单片机一氧化碳报警设计) 18 图 ADC0809 内部图及引脚图 ( 4) ADC0809 的工作过程 : 首先输入 3 位地址,并使 ALE=1,将地址存入地址锁存器中。 此地址经译码选通8 路模拟输入之一到比较器。 START 上升沿将逐次逼近寄存器复位。 下降沿启动 A/ D转换,之后 EOC 输出信号变低,指示转换正在进行。 直到 A/ D 转换完成, EOC 变为高电平,指示 A/ D 转换结束,结果数据已存入锁存器,这个信号可用作中断申请。 当 OE输入高电平 时,输出 三态门打开,转换结果的数字量输出到数据总线上。 转换数据的传送 A/D 转换后得到的数据应及时传送给单片机进行处理。 数据传 送的关键问题是如何确认 A/D 转换的完成,因为只有确认完成后,才能进行传送。 为此可采用下述三种方式。 ( 1) 定时传送方式 对于一种 A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。 例如ADC0809 转换时间为 128μs ,相当于 6MHz 的 MCS51单片机共 64 个机器周期。 可据此设计一个延时子程序, A/D 转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了, 接着就可进行数据传送。 ( 2)查询方式 A/D 转换芯片由表明转换完成的状态信号,例如 ADC0809 的 EOC端。 因此可以用查询方式,测试 EOC 的状态,即可确认转换是否完成,并接着进行数据传送。 ( 3) 中断方式 把表明转换完成的状态信号( EOC)作为中断请求信号,以中断方式进行数据传送。 不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。 首先送出口地址并以信号有效时, OE 信号即有效,把转换数据送上数据总线,供单 成都电子机械高等专科学校成教院毕业论文 (基于单片机一氧化碳报警设计) 19 片机接受。 ( 5) ADC0809 与单片机连接方式如图 : I N 026m s b 2 1212 220I N 1272 3192 418I N 2282 582 615I N 312 714l s b 2 817I N 42I N 53A D D A25I N 64A D D B24A D D C23I N 75A L E22r e f ( )16E N A B L E9S T A R T6r e f ( + )12C L O C K10E O C7U1A D C 0 8 0 9E A /V P31X119X218R E S E T9RD17WR16I N T 012I N T 1。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。