• 沒有找到結果。

PIC 单片机课程设计 指导书

N/A
N/A
Protected

Academic year: 2022

Share "PIC 单片机课程设计 指导书"

Copied!
30
0
0

加載中.... (立即查看全文)

全文

(1)

PIC 单片机课程设计 指导书

编写:江 和、鲍光海

2010 年 6 月

(2)

一、 课程设计的性质与目的

《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程 在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握 PIC 单片机的 应用方法,熟练 PIC 单片机的 C 程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工 作岗位打下坚实的单片机应用基础。

二、设计内容与要求

根据所给的硬件线路原理图(附图 1~附图 5)与 PCB 焊接图(附图 6),焊接印刷线路板并经过 初步检查无误。根据附图 1~附图 5,设计一个具有完整功能、有一定工作量与一定难度的单片机应用 线路,并绘制能用于仿真的 Proteus 线路图,编制相应的单片机 C 语言,分别在 Proteus 仿真界面和实 物板上调试运行正确。最后用实物进行运行演示,并写出符合规范的课程设计报告。

本设计内容分为焊接、线路设计、绘制 Proteus 线路图、编程调试几个部分。

1、焊接部分

根据附图 1~附图 6,焊接所给的 PCB 板,要求如下:

1)元件排列整齐、高度方向要一致。

2)具有极性的元件如二极管、三端稳压器件、发光二极管、集成电路等在焊接前应确定正确的方 向才能焊接。

3)外形相同,参数不同的要确定好参数后再焊接,如电阻,应根据色环或用数字万用表测量后再 焊接。

4)单片机(U20)不要直接焊接在 PCB 板上,用一圆针插座焊接于 PCB 板上。

5)变压器要注意原边与副边引脚的区别,如接错将造成电源短路,烧毁变压器。接 220V 的线圈 引线通常为红色,用数字式万用表的电阻档测量其电阻为几百欧至几千欧。低压侧线圈的三个引线的中 间抽头(黑色)接板上变压器副边的中间点,副边线圈间测量的电阻接近于 0 欧;

6)焊点要均匀、饱满,所焊接的焊点从另一面看应有少许“渗透”; 7)焊接顺序要求,从最矮的元件先焊,最后焊接最高的元件;

8)焊接完毕先检查外观,是否有漏焊元件或焊点等,无误后在不接单片机芯片的条件下通电,检 查+5V、-5V 是否正确,电压在(±4.80V)~(±5.20V)内为正确,则焊接任务完成。否则应立即向 指导教师提出,找出问题并解决。

2、线路设计

为了让同学们可以自由组合线路,本设计采用短路插和杜邦线连接的方式。图 1(a)为一个具有 6 个短路插的端子,本指导书中将短路插中较小引脚编号(一般在左侧)作为短路插的编号,图 1(b)

表示短路插 2 和短路插 4 短接。杜邦线即二头为孔的导线,将其直接与要相连的二端连接即可。

图1 短路插说明图 所设计的线路图应为一个完整的应用线路。如:

l 数字钟:包括按键、LCD、蜂鸣器、时钟芯片DS1307在内。

(3)

或数码管)、按键(速度整定等)。

l 信号发生器:包括DA转换器4821及其信号调理电路、按键与显示(LCD或数码管),用于波形 参数设定。

l 交流电压频率与电压值检测:包括频率、电压有效值检测与计算、显示(LCD或数码管)。

l ……

所设计的电子线路图需经过指导教师同意后方可进行后续设计。

3、Proteus 线路图绘制

根据所设计的线路图,绘制与之一致的,能用于仿真的 Proteus 线路图。要求所绘的线路图美观、

紧凑,参数要与课设板一致。

4、软件编制与调试

根据所设计的线路图编制相应的单片机 C 程序,要求所编制的程序符合 C 语言格式并加上注解。

每编一段即进行编译,有错及时修改,并先在 Proteus 上仿真,基本正确后再用 ICD2 仿真,最后应 脱机运行。

三、相关基础知识

1、单片机 PIC16F887 介绍

[2]

本课设板所用的单片机为 PIC16F887,是 877A 的升级,其主要参数与 877A[1]类似,但使用更为灵 活、有的参数更为细化(如异步通信的波特率为双字节),而价格比 877A 更低。887 引脚与 877A 兼容,

但增加了一些功能。

887 的程序存储器、通用 RAM、EEPROM 与 877A 完全相同。但个别参数不同。

887 增加了一些功能,因此有的引脚上的功能也与 877A 不同,其引脚图如图 2 所示。

887 与 877A 的主要区别如下:

1)可使用内部 RC 振荡作为单片机的时钟

相关的寄存器为 OCSCON(新增),可通过此寄存器设定修改单片机的时钟频率,该寄存器功能说 明如图 3。

2)端口的主要差异:

l A口增加了RA6/OSC2/CLKOUT和RA7/OSC1/CLKIN,如要使用这两个引脚作为普通IO脚,显然单片 机只能用内部振荡器。

l B口的RB0~RB5增加了能作为AD转换的功能,同时能分别独立设置B口的8个引脚的弱上拉是否 使能,能分别独立设置B口的8个引脚的电平变化中断使能与否(877A只有B口的高4位有电平变化中断功 能,且只能4个引脚一起设置),RB5增加了T1G功能。

l E口增加了RE3/MCLR/VPP引脚,当在配置位(CONFIG)中设置为内部上拉复位时,此引脚才能作 为IO脚,且只能作为输入脚。

l C口的RC2增加了P1A功能。

l D口的RD5~RD7增加了P1B~PID功能。

3)AD 转换的不同

887 的 AD 通道增加到 14 路,新增的 6 路 AD 通道在 RB0~RB5,新增的寄存器 ANSEL,ANSELH 可独立设置每一个可作为 AD 转换的引脚作为普通 IO 口或 AD 转换口,注意这两个寄存器的上电默认 值为 AD 转换口。其中的 ADCON1、ADCON0 也有较大的修改。这些寄存器功能说明分别见图 4~图 7。

4)B 端口的弱上拉可独立设置

除需对 OPTION 的位 7 进行设置外,还可通过新增的寄存器 WPUB 对每一引脚独立设置。RB 引 脚的电平变换中断功能由原来的 877A 只有高 4 位扩展为全部 8 位,并可通过新增的 IOCB 寄存器独立 使能或禁止每一个 B 端口引脚的电平变化中断功能。这两个寄存器见图 8~ 图 9。

(4)

图2 DIP封装的PIC16F887引脚图

图3 OSCCON寄存器功能说明

(5)

图4 ANSEL寄存器功能说明

图5 ANSELH寄存器功能说明

图6 ADCON0寄存器功能说明

(6)

图7 ADCON1寄存器功能说明

图8 WPUB寄存器功能说明

图9 IOCB寄存器功能说明

5)WDT溢出时间更为精细

在887中,使用内部低频振荡器(31kHz)作为WDT的工作时钟,时间精度高,并且增加了WDTCON寄 存器,使得WDT溢出时间的范围更大,溢出时间从1ms~270s,而877A的WDT溢出时间范围为18ms~2.304s。

WDTCON寄存器功能说明如图10所示。

(7)

图10 WDTCON寄存器功能说明

6)具有门控功能的定时器 TMR1

887 增加了利用引脚 RB5/T1G 或比较器 C2 的输出作为 TMR1 的门控端,控制 TMR1 计数的功能。

TMR1 的门控端为 RB5/T1G 或比较器 C2。TNR1 默认的门控端为 RB5/T1G,如要使用此引脚作为 TMR1 的门控信号,要把 RB5 设置为 IO 口,并设置为输入。

当 TMR1 门控使能即 TMR1GE=1 时,如果 T1GINV=0,则 T1G=0 时 TMR1 计数,T1G=0 时 TMR1 停止计数。

T1GINV=1 时则相反。

图 11 为与 877A 新增的 T1CON 的 7、6 位说明。

图11 T1CON寄存器功能说明

(8)

7)比较器

887 的比较器模块与 877A 有较大的区别,在 887 中,两个比较器是相互独立的,因此控制寄存器 也是不同的。控制比较器的寄存器有:专门控制比较器 C1 的 CM1CON0;专门控制比较器 C2 的 CM2CON0;

控制比较器 C1、C2 的 CM2CON1(虽然从名称上看好像是专门控制 C2 的)。因此在 887 中,比较器使用 起来更为方便、灵活。如要使用比较器,请参阅相关资料。

8)双字节的波特率寄存器

在 887 中把通信的波特率因子寄存器改为双字节,即新增 SPBRGH 寄存器,增加了波特率控制寄存 器 BAUDCTL,使得波特率计算更为精确。BAUDCTL 寄存器如图 12,波特率计算公式见表 1。

此外,887 还能进行自动波特率检测,请进一步查阅相关手册资料。

图12 BAUDCTL寄存器功能说明

(9)

表1 887波特率计算公式

四、线路板使用说明

为了能使同学灵活方便选择线路,本课设板采用短路插的拔、插进行线路的组合。线路图如附图 1~

附图 6。未用部分短路插应拔起,以节省电源,避免与电源相关的芯片发热。

五、相关元件或模块使用说明

1、点阵型 LCD YB1602A

[3]

使用说明

图13 LCD相关接线图

本课设板所用的 LCD 型号为 YB1602A,接线如图 13 所示。图中采用 4 位数据线接线方式,是为 了节省单片机的 IO 口。从图中可以知道,要使用该 LCD 时,短路插 P38、P22 的短路插(除 RD7 外)

均要插上。如要使用背光控制,可将 P22 的短路插 8 插短接,如不用背光,该短路插不接。表 2 为 LCD YB1602A 的引脚功能说明。

表 2 LCD YB1602A 引脚功能表

引脚名 功能

RS 命令/数据选择:1:数据,0:命令 R/W 读/写选择:1:读,0:写

E 数据使能:下降沿送入有效

DB7~DB0 数据线,如用 4 位数据, 使用高 4 位

(10)

上电后要延时 15ms 后,才能进行初始化,LCD 初始化过程如下:

a) 写控制命令,4 位:0b0011,延时 1ms;

b) 写控制命令,4 位:0b0011,延时 100us;

c) 写控制命令,4 位:0b0011,延时 100us;

d) 写 4 位数据格式命令,4 位:0b0010,延时 100us;

e) 写功能设置命令,8 位(以下均为 8 位命令或数据,要分为二个 4 位命令或数据写):0b00101000,4 位数据格式,2 行,5×7 点阵;

f) 发送显示控制命令:0b00001100,D(d2)=1:打开显示,C(d1)=0:光标关闭,B(d0)=0:光标不闪烁;

g) 写清除命令:0b00000001,延时 2ms;

h) 写输入模式命令:0b00000110,输入模式,I/D(d1)=1:每显示 1 个字符后地址自动加 1,S(d0)=0:

显示移位关闭。

至此,LCD 初始化结束,可以写定位的行命令和数据命令进行显示。写命令和写数据的唯一区别是 写命令时 RS 为 0,写数据时 RS 为 1。写数据就是把数据对应的字符在前面的行命令所指定的位置上显 示字符。

写位置命令:b’1n00xxxx’,n=0 为第 1 行,n=1 为第 2 行,xxxx 表示第几个字符,xxxx=0~15,

从左至右为第 0 至 15。如写行命令 b’11001001’,显示第 2 行的第 9 个字符。在一行中,只要写一次 行命令,每写一个字符,只要地址不超过 15,即本行的最后一个位置,地址会自动加 1(前面的设定)。

如要在第 1 行的第 3 个位置(位置从 0 开始),显示“FZDX DQXY”,则应该先写位置命令:b’10000011’, 然后依次写数据命令:

‘F’、‘Z’、‘D’、‘F’、‘ ’、‘D’、‘Q’、‘X’、‘Y’。

注意,上面包括空格共 9 个字符。如‘F’:实际是这些字符的 ASCII 码。

语句:A=’F’,编译的结果与语句 A= 0x46 是相同的,因为 0x46 是‘F’的 ASCII 码。

再如要在第 2 行的第 1 个字符显示“A”,则先写行命令 0b11000001,其中低 4 位 0b0011 表示在第 2 行第 3 个位置显示。再写数据”A”的 ASCII 码 0x41=0b01000001。

写命令与写数据的区别在于 RS,RS=0 为写命令,RS=1 为写数据,图 14 为写相关命令或数据的 时序图。表 3~表 5 分别为字符码表、显示位置与地址关系表和 LCD 1602 命令一览表。

注意:写命令或数据间的之间的时间间隔要大于 50us。

图14 LCD相关时序图示例

表 3 为该 LCD 的字符码表,实际上绝大部分字符码均与 ASCII 一致。表 4 为其显示位置与地址关系 表,表 5 为其命令一览表。

(11)

表3 CGROM字符码表

表 4 1602 显示位置与 DDRAM 地址关系表 列

行 1 2 3 ... 14 15 16

1 00 01 02 ... 0D 0E 0F 2 40 41 42 ... 4D 4E 4F

表 5 字符型 LCD YB1602A 命令一览表 命令码(8 位命令格式)

号 命令

RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 说明 执行 时间 1 清屏 0 0 0 0 0 0 0 0 0 1 清除显示,光标归零 1.53ms

2 光 标

归零 0 0 0 0 0 0 0 0 1 - 光标归零,但不清除显示

1.53ms

(12)

3

输 入 模 式 设置

0 0 0 0 0 0 0 1 I/D S

设置光标移动方向,使能整

体移动 39μs

4 显 示

控制 0 0 0 0 0 0 1 D C B 控制显示、光标和光标闪烁

39μs

5 光 标 或 显 示 移 动控制

0 0 0 0 0 1 S/C R/L - -

光标与显示移动及方向控

制,不改变 DDRAM 39μs

6 功 能

设置 0 0 0 0 1 DL N F - - 命令位数,显示行数,字型

点阵设置 39μs

7

设 置 CGRAM 地址

0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0

设置 CGRAM 的地址计数器 AC 的值,即设置显示行列 位置

39μs

8

设 置 DDRAM 地址

0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0

设置 DDRAM 的地址计数器

AC 的值,即设置显示位置 39μs

9

读 忙 标 志 位

0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0

读忙标志,同时也获得地址

计数器的值 0μs

10 写 数 据 到 RAM

1 0 D7 D6 D5 D4 D3 D2 D1 D0

写数据到 DDRAM/CGRAM,如

果显示打开的放即显示 43μs

11 从 RAM 读 数 据

1 1 D7 D6 D5 D4 D3 D2 D1 D0

从 DDRAM/CGRAM 读数据

43μs

说明

I/D:I/D=1,完成一个字符码传送后,光标右移,AC 自动加 1;I/D=0,完成一个字符码传送后,光标左移,AC 自动减 1;

S: 整体移动使能,S=1 为使能整体移动;S=0 为禁止整体移动,移动方向由 I/D 确定;

D: 显示打开与关闭,D=1 打开显示;D=0 关闭显示,但数据还保留在 DDRAM 中,打开显示后即可再现;

C: 光标显示控制标志,C=1,光标显示;C=0,光标不显示,光标在第 8 行显示;

B: 闪烁显示控制标志,B=1,光标所指位置上,交替显示全黑点阵和字符,产生闪烁效果;B=0,关闭闪烁;

R/L:光标移动方向,R/L=1,向右移动;R/L=0 向左移动;

S/C: 光标或显示移位,可使光标或显示在没有读写显示数据的情况下,向左或向右移动;

S/C R/L 说 明

0 0 光标向左移动,AC 自动减1 0 1 光标向右移动,AC 自动加1

1 0 光标与显示一起向左移动,AC 值不变 1 1 光标与显示一起向右移动,AC 值不变

DL:数据线宽度设置,DL=1,8 位数据线;DL=0,4 位数据线;

N:显示行数设定,N=1,2 行;N=0,1 行;

F:字形设定,F=1,5×8 点阵;F=0,5×7 点阵;

BF:LCD 内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外部指令和数据;BF=0 内部空闲,

只有在 BF=0 时送到 DB7~DB0 的数据才有效。

(13)

2、74HC164 驱动的数码管显示

本课设板的数码管采用 74HC164[4]串转并的芯片进行 IO 中扩展,其原理如图 15 所示。

图15 74HC164控制6位数码管接线图

从图15可见,如要使用该显示模块,P39,P8短路插要插上。由于74HC164为SPI接口,因此通过P8 与单片机SPI接口的SCL,SDO相接。由于SPI接口不支持多机通信,故此时其他的SPI不能用,即附图中 的P12、P34必须断开。

所用的数码管为共阳,因此相应的164引脚为低电平时,数码管相应的段码亮。

图16是SPI发送0b10100100的时序图。实际上该图也是利用图15的线路显示数字“2”的时序图。图 16的CLK为74HC164的时钟信号,接单片机SPI接口的时钟SCK,SDI为74HC164的数据输入信号,接单片机 SPI接口的数据输出线SDO。按图15的接线,数字“2”的字形代码为0b10100100=0xA4。注意,SPI通信 是高位先发,数据是在时钟的上升沿被读入的,从图16可以看出。

图16 74HC164显示字符“2”,即SPI发送0b10100100=0xA4的时序图

按图15的接线,假设LED9~LED14分别为显示的高位(十万位)到低位(个位),则在发送时应先发 送要显示的低位即个位,再发十位、…十万位。如果没有使用全部的6个数码管,显示时也要按照显示6 位数码管的步骤,其时不用的位显示为“灭”代码,即0xFF。

如果某位要显示小数点,则把该位的显示代码的最高位清0,即让接于最高位的段为低电平,可以 把显示代码跟0x7F相与的方法可达到此目的。

3、按键模块

图 17 为按键输入模块的原理图,该图有两种方式可供选择。

1)普通按键:此时用到 4 个按键 S1、S5、S9、S13,P45 须短接到地,P20 的 1~4 短路插短接,

用到 RB0~RB3 4 个引脚。可以用 RB0/INT 中断与 RB 电平变化中断方便按键处理。

2) 4×4 按键:此时 P45 要断开,此时使用 RB 的 8 个引脚作为按键模块的控制端。要求 4 行接 RB0-RB3,4 列接 RB4-RB7,其中 RB6,RB7 可用 RA6,RA7 代替。

(14)

l 4 行(RB0~RB3)作为输入状态,低 4 位要有弱上拉使能并允许电平变化中断。

l 4 列(RB4~RB7)作为输出状态,平时输出低电平。

l 无按键时,4 行均为高电平(本身弱上拉)。一旦有按键按下,4 行之一为低电平,产生电平变 化中断,判断哪一行输入为低电平可确定是哪一行有按键按下。

l 再将 4 行设置为输出,按下的行输出低电平,其余 3 行输出高电平,将 4 个列设置为输入, 也 必须使能弱上拉,因此,无按键的列为高电平,有按键的列读出低电平。

l 在按键放开时,由于也产生电平变化中断,故此时按键无效,即电平变化中断时,如果 4 行

(RB0~RB3)均为高电平则无效。

l 如果使用 ICD2 作为调试器,RB6、RB7 暂时不能使用,则可用 RA6、RA7 替代,此时单片机须 使用内部 RC 振荡器。在这种情况下,P41 要短接,P20 的 7、8 短路插断开。

注意:各种按键软件中,要有防抖动措施,即在按键处理软件时,先延时 30ms 左右的时间,再清 除中断标志位,再执行按键处理程序。

图 17 按键输入模块

4、交流电压采样线路

线路图如图 18 所示,本线路是模拟一个交流电压采样电路。

要使用本模块时,短路插 P40 要短接,即接上变压器低压侧线圈,通过电位器把此电压降为合适的 电压,经绝对值线路后通过选择 P13 接到 RA0~RA3 之一的引脚作 AD 转换,而通过脉冲形成线路输出与 电源频率相同的脉冲,通过选择 P7 接到 RB0(INT 中断)、RC2(CCP1)、RC1(CCP2)、RA1(C12IN-)时 做相关处理,计算频率等。

图 18 中的 U2A 型号为 LM393,是一个比较器,在 Proteus 仿真中,该器件没有仿真模型,不能仿 真,可用 TLC393,其性能、参数与 LM393 相同。

图 19 是图 18 线路图的仿真结果,以下为计算交流电压有效值的计算思路。

对于周期为 T 的函数,在一周期内做 N 等分,如 N=32,则其有效值按如下式子计算:

=

=

N

i

u

i

U N

1

1

2

,这里,ui 为第 i 次的 AD 采样值。当然,还要根据线路参数(如变压器变比、相 关电阻、电位器的位置等)进行比例调整,使得计算结果与实际电压相符。

首先对脉冲信号的周期 T 进行采集计算,得到 DT=T/N 做为 AD 采样的间隔,则每间隔 DT 进行一次 AD 采样,并做平方计算及累加,最后平均,再开方。

要注意的是,在计算时,所用的变量要考虑是否够用!如 32 个 AD 值的平方和用 int 类型通常是不

(15)

图 18 交流电压采样电路

图 19 交流电压采样电路的输入输出波形图

5、SPI 接口线路

本课设板中有 3 个 SPI 接口,由于 SPI 不支持多机通信,所以不能同时使用这些芯片。

SPI 接口的 74HC164 串转并控制 6 个共阳数码管静态显示,前已介绍。

1)MCP4821

[5]

,SPI 接口、具有内部参考电压的 12 位 DAC

其引脚图及其功能如图 20 所示。

MCP4821 只有一个双字节的写命令寄存器,如图 21 所示。DA 输出电压按如下公式计算:

(16)

048 4096 . 2 2

048 .

2 G

12

D G D

V

OUT

= × × = × ×

这里,G 为增益,1 或 2,D 为写寄存器的低 12 位,确定输出电压的数值。

图 20 MCP4821 引脚功能与封装图

图 21 MCP4821 写命令寄存器

对 MCP4821 的操作就是单片机通过 SPI 接口输给 MCP4821 两个字节的写命令,图 22 给出 MCP4821 写命令时序图。由于该芯片只能输出正电压,为了能得到负的电压,课设线路中用“减”的方法让电压 下移,如图 23 所示,其中 U6A 为电压跟随运放,U6B 为减法电路运放。

(17)

图 22 MCP4821 写命令时序图

图 23 MCP4821 应用电路图

2)25LC010A

[6]

,SPI 接口的 EEPROM

25LC010A 是 128 字节,可进行 SPI 的双向通信(MCP4821、74HC164 均只单向通信)。图 24 为其引脚 功能与封装图。表 6 为 25LC010A 的命令。

图 24 25LC010A 引脚功能与封装图

(18)

表 6 25LC010A 命令表

通过单片机读 25LC010A 数据的过程是这样的:

a) 单片机先发送该器件的读命令 READ:0b00000011;

b) 单片机发要读的地址,由于该器件只有 128 字节,故地址的最高位以 0 补上;

c) 单片机发送“0”,即哑数据,该器件会通过 SO 引脚(接单片机的 SDI)输出 8 位数据,单片机 从 SSPBUF 寄存器便得到了要读的数据;

图 25 为其读时序图。

通过单片机写 25LC010A 数据的过程是这样的:

a) 单片机让接于 25LC010A 的 WP 引脚置 1,允许写;

b) 单片机先发送该器件的写使能命令 WREN:0b00000110;

c) 单片机发送该器件的写命令 WRITE:0b00000010;

d) 单片机发要写的地址,由于该器件只有 128 字节,故地址的最高位以 0 补上;

a) 单片机发送要写的数据;

b) 单片机让接于 25LC010A 的 WP 引脚置 0,禁止写;

图 25 25LC010A 读时序图

6、IIC 口

本课设板中有 3 个 IIC 接口,IIC 支持多机通信。

1)MCP3421

[7]

,IIC接口的12-18位AD转换芯片

MCP3421可以通过设置选择12、14、16、18位的分辨率,不同的分辨率,采样速率不同。18位为3.75 sps、16位为15 sps、14位为60 sps、12位为240 sps。

sps(samples per second)是每秒采样次数,因此18位分辨率的采样时间为1/3.75≈0.267s=267ms,

而12位分辨率的采样时间为1/240≈0.00417s=4.17ms,编程时在启动AD后的延时时间不能小于采样时 间。

图 26 为 MCP3421 的引脚功能与封装图,其中 VIN+、VIN-为参考电压的正端和负端。

(19)

图 26 MCP3421 引脚功能与封装图

MCP3421 的配置寄存器如图 27 所示。表 6、表 7 分别为 MCP3421 的写操作与读操作的配置位说明。

表 6 MCP3421 写操作配置位

表 7 MCP3421 读操作配置位

MCP3421 的默认 7 位地址为 0b1101000。MCP3421 的输入电压、参考电压与 AD 结果的关系如下式:

( )

048 . 1 × 2

+

+

= V

IN

V

IN

AD 结果 最大代码

(20)

图 27 MCP3421 配置寄存器说明

MCP3421 的操作过程如下:

a) 发送 MCP3421 的 7 位地址+0(写),即 0b11010000;

b) 发送 MCP3421 的 AD 转换命令 0b10001100,根据设置的 AD 分辨率适当延时;

c) 发送 MCP3421 的 7 位地址+1(读),即 0b11010001;

d) 接收使能,依次读 AD 结果的高、中、低字节及配置位,如果 AD 分辨率低于 18 位,则数据只 有高、低字节及配置位;

由于 PROTEUS 软件仿真的错误,读出的 3 个 AD 结果的顺序错为低字节在先,即配置位最先,温 度的低字节、中字节、高字节。

表 8 为 AD 分辨率为 18 位的输出代码示例。

(21)

表8 18 位数据输出代码示例

2)TC74

[8]

IIC 接口的温度传感器

图 28 为 TC74 引脚功能与封装图,TC74 有二种封装,本设计使用的是 TO-220 封装。

TC74温度范围为-40℃~+125℃, 在+25℃~+85℃范围的精度为±2℃(最大值),在0℃~+ 125℃ 的范围精度为±3℃(最大值)。

TC74的默认的7位地址为0b1001101。TC74的读温度命令是0b00000000, 在温度数据寄存器中,每 单位值代表1℃ ,数据用二进制补码格式。 温度与二进制值的对应关系示例如表9 所示。

对TC74的读温度的步骤如下:

a) 发送启始位;

b) 发送TC74的7位地址+0(写),即0b10011010;

c) 发送TC74的写命令(RTR),即0b00000000;

d) 重新开始条件;

e) 发送TC74的7位地址+1(读),即0b10011011;

f) 接收使能,接收TC74的温度;

g) 发送停止条件;

图29为读取TC74的时序图,从中可知道如何发送命令给TC74以得到温度值。

表 9 TC74 温度与数值的关系

(22)

图 28 TC74 引脚功能与封装图

图 29 读取 TC74 温度的时序图

3)实时时钟芯片 DS1307

[9]

DS1307 是实时时钟芯片,它提供秒、分、时、日、月、、年和星期等数据,并能自动计算闰年至 2100 年。

通常时钟芯片是要接备用电池,当主电源掉电时,备用电源为 DS1307 提供维持电源,此电源只供 DS1307 使用,此时时钟仍正常运行,时钟晶振是典型的 32.768kHz。

DS1307 的引脚功能与封装图如图 30 所示。

图 30 DS1307 引脚功能与封装图

DS1307 的寄存器如图 31。注意其中的“秒”,最高位“CH”为 1,说明时钟还未运行,只有当此位 被清 0 时才能运行。因此,通常在复位时,就先判断此位是否为 1,如为 1 就应先对时间初始化,如设 置为默认的上电值 2010 年 1 月 1 日,0 点 0 分 0 秒。如果此位为 0,说明时钟正在运行(即复位前有备 用电池),就不能对时间初始化。

注意,DS1307 的时间数据存放格式按特别方式,如 12 月,存放为 0x12,其余类推。

(23)

图 31 DS1307 的时间寄存器图

DS1307 的控制寄存器地址为 07,其各位说明见图 31。

图 32 DS1307 的控制寄存器说明

写 DS1307 的步骤如下:

a) 发送启始位;

b) 发送 DS1307 的 7 位地址+0(写),即 0b11010000;

c) 发送要写入 DS1307 的地址,地址见图 31,如要修改分,此值为 1;

d) 发送要写入 DS1307 的数,如要把分修改为十进制数 37,则此数为 0x37;

e) 发送停止位;

读 DS1307 的步骤如下:

a) 发送启始位;

b) 发送 DS1307 的 7 位地址+0(写),即 0b11010000;

c) 发送要读的 DS1307 的起始地址,如要从秒读起,为 0;

d) 发送停止位;

e) 发送重新开始位;

f) 发送 DS1307 的 7 位地址+1(读),即 0b11010001;

g) 发送读使能位,接收一个数据,单片机发送应答位;

h) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后 一个数时单片机不发送应答位;

i) 发送停止位;

要注意,虽然 IIC 支持多机通信,但 MCP3421 与 DS1307 的器件码相同,如果后面 3 位的地址码也 相同的话,不能同时进行通信。

7、串口

本课设板中有 3 个与串口有关的线路:

l RS232 接口,可接至计算机串口,与计算机进行异步串行通信,MAX232[10]为电平转换芯片,将

(24)

单片机的 TTL 电平转换为计算机串口的 RS232 电平(负逻辑)。

l USB 转 RS232 接口,可接至计算机 USB 接口,与计算机通信,但计算机须安装驱动软件。所用 的芯片为 PL2303[11]

l RS485 接口,通信距离可达 1200m,可带 128 个节点。图 33 为本课设板中所用的 RS485 芯片 MAX1487[12]的引脚功能与封装图。RS485 采用差分方式通信,即根据 A 与 B 间的电压差来确定逻辑值,

当 A>B 200mV 以上,为逻辑 1,当 A<B 200mV 以上,为逻辑 0。

图 33 MAX1487 引脚功能与封装图

8、其他线路

l 4 个普通 LED;

l 1 个蜂鸣器,由 PWM 控制;

l 1 个微型直流电机(5V 供电,接 PWM 接口控制);

l 1 个光电遮断器,与电机配合进行转速测量,输出接 CCP1 或 CCP2;

l 1 个小型直流继电器(5V 供电);

l 6 个电位器可接于 AN0~AN3,做 AD 转换及 AD 参考电压的正或负端及比较器输入电压;

l 2 个比较器输出接 LED 指示输出状态;

l 电压参考模块输出经电阻接地,可测电压参考模块的输出电压值;

l TMR1 的门控,由 RB4 输出控制 RB5,此时 RB5 作为输入,且为 TMR1 的门控;

l EPWM(4 路及 CCP1、CCP2)接到 T0CKI、T1CKI 计数。

参考资料:

[1] Microchip,Ltd.PIC16F87XA Data Sheet 28/40/44-Pin Enhanced Flash Microcontrollers. DS39582B.2003.

[2] Microchip,Ltd. PIC16F882/883/884/886/887 数据手册 采用纳瓦技术的28/40/44 引脚增强型闪存8位CMOS单片 机. DS41291E_CN.2008.

[3] Hitachi, Ltd. HD44780U (LCD-II) (Dot Matrix Liquid Crystal Display Controller/Driver).

[4] www.fairchildsemi.com. 74F164A Serial-In, Parallel-Out Shift Register. DS010613.2000.

[5] Microchip,Ltd.MCP4821/MCP4822 具有内部Vref和SPI接口的12位DAC.DS21953A_CN.2008.

[6] Microchip,Ltd. 25AA010A/25LC010A 1K SPI Bus Serial EEPROM. DS21832C.2006.

[7] Microchip,Ltd. MCP3421 18-Bit Analog-to-Digital Converter with I2C Interface and On-Board Reference.

DS22003D.2007.

[8] Microchip,Ltd. TC74 微型串行数字温度传感器. DS21462C_CN.2008.

[9] MAXIM,Ltd. DS1307 64 x 8 Serial Real-Time Clock.

[10] MAXIM,Ltd. +5V-Powered, Multichannel RS-232 Drivers/Receivers.2006.1

[11] Prolific Technology Inc. PL-2303 Edition USB to Serial Bridge Controller Product Datasheet.2005.4

(25)

RB0

RC2 RC1

RA1 RA0 RA2 RA3

RD5 RD6 RD7

RB5 RD0

RD1 RD2 RD3

RA4 RA5

RC0 RB3

RB1 RB4 U_电源与一般端口 电源与一般端口.SchDoc CLK_164

DAT_164

RC3 RC5 RC4 RE2

RE1 RE0

RC6 RC7 RA5

RC0

RA4

RC1 RC2 U_通信接口

通信接口.SchDoc

CLK_164 DAT_164

RD0 RD1 RD2 RD3 RD4 RD5 RD6 RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA6 RA7 U_显示与按键

显示与按键.SchDoc

RC3 RC4 RC5 RC6 RC7

RE0 RE1 RA5

RC0

RB0 RA4 RA0 RA1 RA2 RA3

RA6 RA7

RB1 RB2 RB3 RB4 RB5 RB6 RB7

RC1

RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 RC2 U_CPU

CPU.SchDoc

RB0 RB1 RB3 RB4 RB5 RB0

RB1 RB2 RB3 RB4 RB5 RB6 RB7

RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7 RA4

RA5

RA0 RA1 RA2 RA3 RA4 RA5

RC0 RC1 RC2 RD0 RD1 RD2 RD3 RD5 RD6 RD7 RC0

RC1 RC3 RC4 RC5 RC6 RC7 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7 RE0 RE1 RC0

RC3 RC4 RC5 RC6 RC7

RD0 RD1 RD2 RD3 RD4 RD5 RD6 RE0

RE1 RE2

RC2 RA[0...7]

RA[0...7]

      使用说明

<1>单片机,如不使用晶振,P23断开,RA6,RA7可替换4X4按键中的RB6,RB7。

  如使用内部复位,P18断开,单片机U20引脚1可作为一般IO口。

<2>单片机端口接线端及在线烧写接线端(P31)。

<3> 异步串行通信,分为三个部分  A:RS232接口,可与计算机串口通信;

 B:RS485接口,通过P3可与其他单片机通信;

 C:串口转USB接口,可与计算机的USB接口通信。

<4>SPI接口

 A:串转并的数码管静态显示;

 B:128字节的EEPROM;

 C:12位分辩率的DA转换器MCP4821,输出经电压跟随、提升,通过P4输出,可在相应的测试点用示波器观察波形。

<5>IIC接口,要使用IIC接口时,P51的上拉电阻要接上。由于MCP3421和DS1307的器件码都是0b1101,如果地址码也相同的话,无法同时进行通信!

 A:最高可达18位的AD转换器U8;

 B:温度传感器U10;

 C:实时时钟U22:其7脚输出方波,可由P49接到接到TMR0和TMR1计数和CCP1、CCP2捕捉及输出到LED16闪烁指示。

<6>LCD显示,不用时P38、P22要断开,减小损耗。

<7>按键,可为4X4按键或普通按键。使用4X4按键时P20短路插全合上,使用普通按键时(S1、S5、S9、S13),P20的RB0-RB3合上,RB4-RB7断开。

使用ICD2进行调试时,RB6,RB7用RA6,RA7替代,此时要用内部振荡器,相关短路插要合上或断开。

<8>SPI接口的静态数码管显示,不用时P39断开,以减小损耗。

<9>模拟电压输入,可作为AD转换、AD参考电压正负端、比较器的输入。

<10>交流电压的绝对值线路与脉冲形成线路,绝对值输出到AD转换口,脉冲输出到RB0/INT、CCP1、CCP2和比较器输入端(RA1/C12IN1-)。

<11>热敏电阻测温,输出端子可用线连到AD端口。

<12>蜂鸣器控制,由可产生PWM的引脚控制。

<13>继电器控制,由P2输出接点。

<14>电源,P46、P47、P48三个端子可输出到其他板上。

<15>微型电机控制,由可产生PWM的引脚控制。

<16>光电遮断器,由电机带动的遮光片切断红外线,输出到CCP1、CCP2捕捉。

<17>PWM与EPWM输出,接到TMR0或TMR1进行计数。

<18>TMR1的计数门控,由RB4输出控制RB5/T1G。

<19>比较器输出,通过LED显示输出状态,RA4为集电极开路,故加上上拉电阻。

<20>比较器参考电压输出。

<21>EPWM输出,可通过示波器观察输出波形。

<22>普通LED显示控制 RC1

RC2

RA6 RA7

(26)

RA0/AN0/ULPWU/C12IN0- 2

RA1/AN1/C12IN1- 3

RA2/AN2/VREF-/CVREF/C2IN+

4

RA3/AN3/VREF+/C1IN+

5

RA4/T0CKI/C1OUT 6

RA5/AN4/SS/C2OUT 7

RB0/AN12/INT 33 RB1/AN10/C12IN3- 34 RB2/AN8 35 RB3/AN9/PGM/C12IN2- 36 RB4/AN11 37 RB5/AN13/T1G 38 RB6/ICSPCLK 39 RB7/ICSPDAT 40 RC1/T1OSI/CCP2 16 RC0/T1OSO/T1CKI 15

RC2/P1A/CCP1 17 RC3/SCK/SCL 18 RC4/SDI/SDA 23 RC5/SDO 24 RC6/TX/CK 25 RC7/RX/DT 26

19 RD0 20 RD1 21 RD2 22 RD3 27 RD4

RD5/P1B 28

RD6/P1C 29

RD7/P1D 30

RE0/AN5 8 RE1/AN6 9 RE2/AN7 10 RE3/MCLR/VPP

1

RA7/OSC1/CLKIN 13

RA6/OSC2/CLKOUT 14

U20 PIC16F887

4MHzJ3 C26 20P

C27 20P

2 3

1 4

P23

CRYSTAL 1 2 3 4 5 6 7 8 P24 RA

1 2 3 4 5 6 7 8 P30 RB

1 2 3 4 5 6 7 8 P25 RC 1

2 3 4 5 6 7 8 P29 RD

RE0 RE1 RE2 1

2 3 4 P32 RE

RE3

RE0 RE1 RE2 RE3

RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 RB0

RB1 RB2 RB3 RB4 RB5 RB6 RB7

RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7

RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 RD0

RD1 RD2 RD3 RD4 RD5 RD6 RD7 RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7

RA0 RA1 RA2 RA3 RA4 RA5

RA6 RA7 RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7

R51 10K VCC

C20

10u C21

0.1u

1 2

P18 RESET

C24 10u

C23 0.1u VCC

1 2 3 4 5 6

P31 PROGRAM RE3 VCC GND RB7 RB6

RC3 RC4 RC5 RC6 RC7

RE0 RE1 RE2 R52 470

S17 RESET

RA5

RC0

RB0 RA4

RA0 RA1 RA2 RA3

RB1 RB2 RB3 RB4 RB5 RB6 RB7 RC1

RD0 RD1 RD2 RD3 RD4 RD5 RD6 RD7

RC2

<1>

<2>

RA7

(27)

VIN+ 1 VIN- 6 3 SCL

4 SDA

U8 MCP3421

13

2 VR2 10k VCC

2 SDA 4 SCLK

NC

t

U10 TC74 R20

4.7K R21 4.7K VCC 2 CS

3 SCK 4 SDI

LDAC 5 SHDN 6 VOUT 8

7 AVSS

U9 MCP4821 1

3 2

84

U6A TL082CP R23 10K

VCC VEE

1 2 DA_OUTP4 R25

10K 7 5

6

84

U6B

TL082CP R24 1k

R26 10k

13

2 VR3 10k

VCC

VCC VEE R19 10K

1 C1+

VDD 2 3 C1-

4 C2+

5 C2-

VEE 6 T2OUT 7

R2IN 8 R2OUT 9 10 T2INT1IN 11

R1OUT

12 R1IN 13

T1OUT 14

15 GND

VCC 16 U12 MAX232A C12

C16 0.1u 0.1u

C18 0.1u

C13 0.1u

1 6 2 7 3 8 4 9 5

D7 DB9/F C14 0.1u

1 R0 2 RE 3 DE 4 DI

B 7 A 6 U7 MAX1487 R22

R27 10K VCC

1 2 P3

RS485 J1

12MHz C1120P

C1520P

VCC

VCC R28 18

R2918

R31 10K

R34 10K VCC

R33 10K R32 10K

VCC R30 1K

C19 10u

C17 0.1u VCC

接异步串行接口 VCC

DAOUT1

DAOUT

DA_REF 1 CSSO

2 WP 3

5 SISCK 6

HOLD 7 U21 25LC010A

2 3

1 4

P8 164_DISP RC3

RC5

CLK_164 DAT_164

2 11

1 12

4 9

3 10

5 8

6 7

P34 25LC010A

RC4

RE0 RE1 RE2

2 3

1 4

P9 IIC_3421

2 3

1 4

P15 RS232 RC7

RC6

2 3

1 4

P19 USB-232

2 5

1 6

3 4

P17 RS485 RA5

RX TX

CLK_164 DAT_164 RC3

RC5

RC4 RE2 RE1 RE0

RC6 RC7

AD 1 VCC

2 D- 3 D+

4 GND P5

USB

RA5

J2 32.768k

2 3

1 4

P21 IIC_1307 RC4

RC3 X1 1

X2 2 VBAT 3 5 SDASCL

6

SQW/OUT 7

U22 DS1307

VCC R65

200 R67

1K LED16

RC0 RA4 RC0

RA4

BT1 3V

<4>

<5>

A B

C

A

B

C

C A

B

2314 P51

IIC_UP

2 3

1 4

P52 IIC_TC74

12 P53

BAT 1P54 2

AD 数码管静态显示控制

EEPROM

12位DA转换

串口转USB

RS485

RS232

18位AD转换

温度传感器

实时时钟

2 9

1 10

4 7

3 8

5 6

P49

TIME_OUT RC1

RC1 RC2 RC2 1 TXD

5 RXD

USBDM 16 USBDP 15

VCC_2324 VCC8

RESET19VCC20 VCC_PLL24

GND7 GND21 GND_3V318 GND_PLL25 PLL_TEST26 EE_CLK

13

EE_DATA 14

VCC_3V3 17 TRI_MODE 22 LD_MODE 23 27 OSC1OSC2

28

DTR2 CTS11 RTS3 DCD10

RI6 DSR9SHTD12

U11 PL-2303

LED15

LED17

2 9

1 10

4 7

3 8

5 6

P12

DA_OUT

(28)

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED9 LED8B CLK_164

DAT_164

D8 3V

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED10 LED8B

D9 3V

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED11 LED8B

D10 3V

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED12 LED8B

D11 3V

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED13 LED8B

D12 3V

3

109 gf

8 7 a

2 d 1 e

5 h 4 cb 6

LED14 LED8B

D133V

13

VR10 2 10k

RS_LCD RW_LCD E_LCD

DB4_LCD DB5_LCD DB6_LCD DB7_LCD

S1

0

S2

1

S3

2

S4

3

S5

4

S6

5

S7

6

S8

7

S9 8

S10 9

S11

A

S12

B

S13

C

S14

D

S15

E

S16

F

RB4_A RB5_A RB6_A RB7_A

RB0_A

RB1_A

RB2_A

RB3_A R46 1K

R48 1K

1KR49

R50 1K

R39 1K

R40 1K

R41 1K

R42 1K

NEXT_A

NEXT_A CLK_164

DAT_164

4 RS

V_LED+

15 3 VO 5 R/W

2 VCCB 1 GND

V_LED- 16

DB0 7 DB1 8 DB2 9 DB3 10 DB4 11 DB5 12 DB6 13 DB7 14 1602,16X2

6 E

U19 YB1602A

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U13

74HC164

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U14

74HC164

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U15

74HC164

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U16

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U17

9 CLR 8 CLK 1 A 2 B

QA 3 QB 4 QC 5 QD 6 QE 10 QF 11 QG 12 QH 13 VCCA 14

7 GND U18 B

EC

T5 9013 R59

1K R58 200/1W

LED_LCD 背光控制

1P45 2 GND 1P38 2VCC_LCD

VCC

1 2

P39 VCC_LED

2 15

1 16

4 13

3 14

5 12

6 11

7 10

8 9

P20 4X4KEY RB0

RB1 RB2 RB3 RB4 RB5 RB6 RB7

RB0_A RB1_A RB2_A RB3_A RB4_A RB5_A RB6_A RB7_A RS_LCD

RW_LCD E_LCD DB4_LCD DB5_LCD DB6_LCD DB7_LCD RD0

RD1 RD2 RD3 RD4 RD5 RD6

2 15

1 16

4 13

3 14

5 12

6 11

7 10

8 9

P22 LCD

RD7 LED_LCD

RD0 RD1 RD2 RD3 RD4 RD5 RD6

RD7

RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7

<6> <7>

<8>

VCC

4X4按键或4个普通按键

数码管静态显示 16X2字符型LCD

RA6 RA7

RA6

RA7 2 3

1 4

P41 RA6_7

2314

P37 RA6_7UP R60

20k R61 20k VCC

數據

表 6  25LC010A 命令表  通过单片机读 25LC010A 数据的过程是这样的:   a) 单片机先发送该器件的读命令 READ:0b00000011;  b) 单片机发要读的地址,由于该器件只有 128 字节,故地址的最高位以 0 补上;  c) 单片机发送“0” ,即哑数据,该器件会通过 SO 引脚(接单片机的 SDI)输出 8 位数据,单片机 从 SSPBUF 寄存器便得到了要读的数据;  图 25 为其读时序图。  通过单片机写 25LC010A 数据的过程是这样的:   a) 单片机让接

參考文獻

相關文件

意大利作曲家普契尼创作的歌剧《图兰朵》中,运用了我国

[r]

[r]

,在需求分析过程中应该建立起软件系统的 行为模型。状态转换图 ( 简称为状态图 ) 通

一般说来, 对于一个区间上单调的函数的 图形都存在一个需要判别弧段位于相应的弦线

在地图上查找上海到乌鲁木齐的铁路。 请根据地图上的比 例尺,估算一下 ,坐火车 从上海到乌鲁 木齐的位移和 经过的 路程

图1-46  果实和种子的形成 胚珠 → 种子 子房 → 果实 子房壁 →

下图是单脚支撑形式的示意图,支撑脚和地面的接触点 A 与前、后轮和地面之间 的接触点 B 、 C 共同构成三点支撑,在地面形 成△