1、苏 州 市 职 业 大 学实习(实训)报告名称 单片机原理与应用课程设计 2013 年 2 月 25 日至 2013 年 3 月 1 日共 1 周院 系 班 级 姓 名 院 主 任 系 主 任 指 导 教 师 2苏 州 市 职 业 大 学实习(实训)任务书名 称: 单片机原理与应用课程设计 起讫时间: 2013-2-252013-3-1 院 系: 电子信息工程系 班 级: 指导教师: 系 主 任: 3一、实习(实训)目的和要求1掌握使用 MSC51 单片机编译软件的方法;2掌握常用温度测量方法,了解各种传感器工作原理;3设计电路并确定电路参数;4完成课程设计说明书,内容:原理分析、计算说明、调
2、试报告、心得体会;5将结果向指导教师演示,由教师提问验收通过。4二、实习(实训)内容1目录;2单片机结构、原理;3温度控制系统硬件设计(原理图、原理图分析) ;4软件设计,软件流程图,调试过程;5硬件、软件程序清单。三、实习(实训)方式 集中 分散 校内 校外5四、实习(实训)具体安排1集中讲解;2查阅资料,设计电路;3程序调试;4完成课程设计说明书,内容:原理分析、计算说明、调试报告、程序、心得体会;5验收,交课程设计报告。五、实习(实训)报告内容6目录第一章 摘要 7第二章 芯片资料 8一、AT89C51 单片机说明 .81、简介 82、引脚说明 83、引脚第二功能 8二、NTC 负温度系
3、数热敏电阻工作原理 .101、简介 102、工作原理 10三、TLC549 芯片 .111、 概述 112、工作原理 113、工作时序图 114.、应用接口及采样程序 .12四、AT24C02 芯片 .131、概述 132、管脚配置管脚封装 133、功能描述 134、结构与寻址 13第三章 项目设计 14一、设计电路图 14二、程序设计 15第四章 总结报告 197第一章 摘要8第二章 芯片资料一、AT89C51 单片机说明1、简介89C51 是一种高性能低功耗的采用 CMOS 工艺制造的 8 位微控制器,它提供下列标准特征:4K 字节的程序存储器,128 字节的 RAM,32 条 I/O 线
4、,2 个 16 位定时器/计数器, 一个 5 中断源两个优先级的中断结构,一个双工的串行口 , 片上震荡器和时钟电路。2、引脚说明VCC:电源电压GND:地P0 口:P0 口是一组 8 位漏极开路型双向 I/O 口,作为输出口用时,每个引脚能驱动 8 个 TTL 逻辑门电路。当对 0 端口写入 1 时,可以作为高阻抗输入端使用。当 P0 口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。在这种模式下,P0 口具有内部上拉电阻。在 EPROM 编程时,P0 口接收指令字节,同时输出指令字节在程序校验时。程序校验时需要外接上拉电阻。P1 口:P1 口是一带有内部上拉电阻的 8
5、 位双向 I/O 口。P1 口的输出缓冲能接受或输出 4 个 TTL 逻辑门电路。当对 P1 口写 1 时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。当作为输入端使用时,P1 口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL) 。P2 口:P2 是一带有内部上拉电阻的 8 位双向的 I/O 端口。P2 口的输出缓冲能驱动 4 个 TTL 逻辑门电路。当向 P2 口写 1 时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL) 。P2 口在访问外部程序存储器或 16 位地址的外部数
6、据存储器(例如 MOVX DPTR)时,P2 口送出高 8 位地址数据。在这种情况下,P2 口使用强大的内部上拉电阻功能当输出 1 时。当利用 8 位地址线访问外部数据存储器时(例 MOVX R1),P2 口输出特殊功能寄存器的内容。当 EPROM 编程或校验时,P2 口同时接收高 8 位地址和一些控制信号。P3 口:P3 是一带有内部上拉电阻的 8 位双向的 I/O 端口。P3 口的输出缓冲能驱动 4个 TTL 逻辑门电路。当向 P3 口写 1 时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL) 。P3 口
7、同时具有 AT89C51 的多种特殊功能,具体如下3、引脚第二功能P3.0 RXD (串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断 0)P3.3 (外部中断 1)P3.4 T0(定时器 0)P3.5 T1(定时器 1)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器都选通)9图 1 单片机引脚图RST:复位输入。当振荡器工作时,RST 引脚出现两个机器周期的高电平将使单片机复位。ALE/ :当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低 8位字节。当在 Flash 编程时还可以作为编程脉冲输出( ) 。一般情况下,ALE 是以晶振频率的 1/6 输
8、出,可以用作外部时钟或定时目的。但也要注意,每当访问外部数据存储器时将跳过一个 ALE 脉冲。PSEN :程序存储允许时外部程序存储器的读选通信号。当 AT89C52 执行外部程序存储器的指令时,每个机器周期 两次有效,除了当访问外部数据存储器时, 将跳过两个信号。 VPP:外部访问允许。为了使单片机能够有效的传送外部数据存储器从 0000H 到FFFH 单元的指令, 必须同 GND 相连接。需要主要的是,如果加密位 1 被编程,复位时EA 端会自动内部锁存。当执行内部编程指令时, 应该接到 VCC 端。XTAL1:振荡器反相放大器以及内部时钟电路的输入端。XTAL2:振荡器反相放大器的输出端
9、。10二、NTC 负温度系数热敏电阻工作原理1、简介NTC 是 Negative Temperature Coefficient 的缩写,意思是负的温度系数,泛指负温度系数很大的半导体材料或元器件,所谓 NTC 热敏电阻器就是负温度系数热敏电阻器。它是以锰、钴、镍和铜等金属氧化物为主要材料, 采用陶瓷工艺制造而成的。这些金属氧化物材料都具有半导体性质,因为在导电方式上完全类似锗、硅等半导体材料。温度低时,这些氧化物材料的载流子(电子和孔穴)数目少,所以其电阻值较高;随着温度的升高,载流子数目增加,所以电阻值降低。NTC 热敏电阻器在室温下的变化范围在 10O1000000 欧姆,温度系数-2%
10、-6.5%。NTC 热敏电阻器可NTC 热敏电阻器广泛用于测温、控温、温度补偿等方面2、工作原理NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系 NTC 热敏电阻材料 图 2 NTC 负温度系数热敏电阻温度范围它的测量范围一
11、般为-10+300,也可做到-200+10,甚至可用于+300+1200环境中作测温用 负温度系数热敏电阻器温度计的精度可以达到 0.1,感温时间可少至 10s 以下它不仅适用于粮仓测温仪,同时也可应用于食品储存、医药卫生、科学种田、海洋、深井、高空、冰川等方面的温度测量11三、TLC549 芯片1、 概述T LC548, TLC549 是美国德州仪器公司生产的 8 位串行 A / D 转换器芯片, 可与通用微处理器、控制器通过 I/ O CLOCK、CS 、DATA OU T 三条口线进行串行接口。具有 4MHz 片内系统时钟和软、硬件控制电路, 转换时间最长 17位s, TLC548 允许
12、的最高转换速率为 45 500 次/ s, T LC549 为40 000 次/ s。总失调误差最大为位 0. 5LSB, 典型功耗值为 6mW。采用差分参考电压高阻输入, 抗干扰, 可按比例量程校准转换范围, VREF - 接地, VREF + - VREF - 1V, 可用于较小信号的采样。2、工作原理T LC549 均有片内系统时钟, 该时钟与 I / O CLOCK 是独立工作的, 无须特殊的速度或相位匹配。其工作时序如图 2 所示。当 CS 为高时, 数据输出( DATA OUT ) 端处于高阻状态, 此时 I /O CLOCK 不起作用。这种 CS 控制作用允许在同时使用多片 T
13、LC548、TLC 549 时,共用 I/ O CLOCK, 以减少多路( 片) A/ D 并用时的 I / O 控制端口。一组通常的控制时序为:( 1) 将 CS 置低。内部电路在测得 CS 下降沿后,再等待两个内部时钟上升沿和一个下降沿后, 然后确认这一变化, 最后自动将前一次转换结果的最高位( D7) 位输出到 DAT A OU T 端上。( 2) 前四个 I/ O CLOCK 周期的下降沿依次移出第 2、3、4 和第 5 个位( D6、D5、D4、D3) , 片上采样保持电路在第 4 个 I/O CLOCK 下降沿开始采样模拟输入。( 3)接下来的 3 个 I /O CLOCK 周期的
14、下降沿将摘要: T LC548、TLC549 是采用 LinCMOSTM 技术, 以开关电容逐次逼近原理工作的 8 位串行 A/ D芯片。单电源 3V 6V 供电范围, 控制口线少, 时序简单 , 转换速度快, 功耗低, 价格便宜, 适用于低功耗的袖珍仪器上的单路 A/ D 采样, 也可将多个器件并联使用。( 4) 最后, 片上采样保持电路在第 8 个 I / OCLOCK 周期的下降沿将移出第 6、7、8( D2、D1、D0 )个转换位。保持功能将持续 4 个内部时钟周期, 然后开始进行 32 个内部时钟周期的A / D 转换。第 8 个 I/ O CLOCK 后, CS 必须为高, 或 I
15、 / O CLOCK 保持低电平, 这种状态需要维持 36 个内部系统时钟周期以等待保持和转换工作的完成。如果 CS 为低时 I/ O CLOCK 上出现一个有效干扰脉冲, 则微处理器/ 控制器将与器件的 I / O 时序失去同步; 若 CS 为高时出现一次有效低电平, 则将使引脚重新初始化, 从而脱离原转换过程。在 36 个内部系统时钟周期结束之前, 实施步骤( 1) - ( 4) , 可重新启动一次新的 A/D 转换, 与此同时,正在进行的转换终止, 此时的输出是前一次的转换结果而不是正在进行的转换结果。若要在特定的时刻采样模拟信号,应使第 8 个 I/O CLOCK 时钟的下降沿与该时刻
16、对应,因为芯片虽在第 4 个 I/ O CLOCK 时钟下降沿开始采样, 却在第 8 个 I/O CLOCK 的下降沿开始保存。3、工作时序图12图 3 TLC549 工作时序图4.、应用接口及采样程序TLC 549 可方便地与具有串行外围接口( SPI) 的单片机或微处理器配合使用, 也可与 51 系列通用单片机连接使用。与 51 系列单片机的接口如图 3 所示。其采样程序框图如图 4 所示, 实际应用程序清单如下:; 初始化:SETB P1. 2 ; 置 CS 为 1。CLR P1. 0 ; 置 I / O CLOCK 为零。MOV R0, # 00H ; 移位计数为零。; A/ D 过程
17、:A/ DP: CLR P1. 2NOP ; 等待 1. 4位s, nop 数根据晶振情况选择。NXT : SET B P1. 0MOV C, P1. 1RLC ACLR P1. 0INC R0CJNE R0, # 8, NXTMOV R0, # 00SETB P1. 2M OV DTSVRM, A ; DTSVRM: DATA SAVERAM .RETTLC 549 片型小, 采样速度快, 功耗低, 价格便宜, 控制简单。适用于低功耗的袖珍仪器上的单路 A / D 或多路并联采样。13四、AT24C02 芯片1、概述AT24C02 是一个 2K 位串行 CMOS E2PROM, 内部含有 2
18、56 个 8 位字节,CATALYST 公司的先进 CMOS 技术实质上减少了器件的功耗。AT24C02 有一个 16 字节页写缓冲器。该器件通过IIC 总线接口进行操作,有一个专门的写保护功能。2、管脚配置管脚封装DIP:双列直插式封装,是最简单的一种封装技术。管脚名称 功能 A0、A1 、A2 器件地址选择 SDA 串行数据、地址 SCL 串行时钟 WP 写保护 VCC+1.8V6.0V 工作电压 VSS 地 3、功能描述AT24C02 支持 I2C,总线数据传送协议 I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有
19、起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端 A0、A1 和 A2 可以实现将最多 8 个 AT24C02 器件连接到总线上。AT24C02 串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 SDA 串行数据/地址 AT24C02 双向串行数据/地址管脚用于器件所有数据的发送或接收,SDA 是一个开漏输出管脚,可与其它开漏输出或集电极开路输出进行线或(wire-OR) 。 A0、A1、A2 器件地址输入端这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为 0。当使用AT2
20、4C02 时最大可级联 8 个器件。如果只有一个 AT24C02 被总线寻址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到 Vss,如果只有一个 AT24C02 被总线寻址这三个地址输入脚(A0、A1、A2 )必须连接到 Vss。WP 写保护如果 WP 管脚连接到 Vcc,所有的内容都被写保护只能读。当 WP 管脚连接到 Vss 或悬空允许器件进行正常的读/写操作4、结构与寻址AT24C02 的存储容量为 2Kb,内容分成 32 页,每页 8B,共 256B,操作时有两种寻址方式:芯片寻址和片内子地址寻址。(1)芯片寻址:AT24C02 的芯片地址为 1010,其地址控制字格式为 10
21、10A2A1A0R/W。其中A2,A1,A0 可编程地址选择位。A2,A1 ,A0 引脚接高、低电平后得到确定的三位编码,与 1010形成 7 位编码,即为该器件的地址码。R/W 为芯片读写控制位,该位为 0,表示芯片进行写操作。(2)片内子地址寻址:芯片寻址可对内部 256B 中的任一个进行读/ 写操作,其寻址范围为00FF,共 256 个寻址单位。14第三章 项目设计一、设计电路图 21T3VCR4.K760UpF8D5Q9ABEGPSNXMIWL/+-_OHridgeanslYck位y15二、程序设计;*;难点,EEPROM 的读写;A/D 数据读取;*WX EQU P3.5DX EQU
22、 P3.6AD_CS EQU P1.2AD_CLK EQU P1.0AD_DO EQU P1.1RELAY EQU P1.3SDA EQU P1.6SCL EQU P1.5TEMP EQU 30HTEMP_S EQU 31HSD_JG EQU 32H ;闪动间隔TEMP_T EQU 33H ;采集数据暂存SD EQU 20H.0SD_KG EQU 20H.1XS_IO EQU P0KEY_IO EQU P2;*ORG 0000HAJMP MAINORG 000BHAJMP AD_P;*MAIN: MOV DPTR,#TABMOV SP,#5FH;-LCALL W_START ;当前地址读MOV
23、 A,#0A0H ;写设备地址,第 0 位为 1 为读LCALL WRITEMOV A,#01H ;写数据地址LCALL WRITELCALL W_STARTMOV A,#0A1H ;写设备地址LCALL WRITELCALL READMOV TEMP_S,ALCALL W_STOP;-MOV SD_JG,#5SETB SDSETB SD_KGMOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB EASETB ET0SETB TR0LOOP: LCALL DISPLCALL KEY_SCANJZ LOOPLCALL TZ_TEMPAJMP LOOP;*AT24C
24、02 保存W_START: CLR SCL ;I2C 总线通讯开始LCALL S_NOPSETB SDALCALL S_NOPSETB SCLLCALL S_NOPCLR SDALCALL S_NOPCLR SCLRET;-W_STOP: CLR SCL ;结束LCALL S_NOPCLR SDALCALL S_NOPSETB SCLLCALL S_NOPSETB SDALCALL S_NOPRET;-WRITE: MOV R3,#8 ;逐位发送W_NEXT: CLR SCLRLC A16MOV SDA,CSETB SCLCLR SCLDJNZ R3,W_NEXTSETB SCLLCALL S
25、_NOPCLR SCLLCALL S_NOPRET;-READ: MOV R3,#8 ;逐位接收R_NEXT: CLR SCLLCALL S_NOPSETB SCLLCALL S_NOPMOV C,SDARLC ACLR SCLDJNZ R3,R_NEXTCLR SCLLCALL S_NOPSETB SCLLCALL S_NOPRET;-S_NOP: NOPNOPNOPNOPRET;*TZ_TEMP: CJNE A,#1,TZ_ENDLP1: LCALL DISPLCALL KEY_SCANJNZ LP1CLR SD_KGLP2: LCALL DISPLCALL KEY_SCANJZ LP2C
26、JNE A,#1,TZ_INCLP3: LCALL DISPLCALL KEY_SCANJNZ LP3SETB SD_KGSETB SD;-LCALL W_START ;设置完毕,写入 E2ROMMOV A,#0A0H ;写入设备地址,第 0 位为 0 为写LCALL WRITEMOV A,#01H ;写入数据地址LCALL WRITEMOV A,TEMP_S ;写入数据LCALL WRITELCALL W_STOP;-AJMP TZ_ENDTZ_INC: CJNE A,#2,TZ_DEC ;设置温度加一按钮 0-99LP4: LCALL DISPLCALL KEY_SCANJNZ LP4MO
27、V A,TEMP_SCJNE A,#99,INC_NEXTMOV TEMP_S,#0AJMP LP2INC_NEXT: INC TEMP_SAJMP LP2TZ_DEC: ;- 设置温度减一按钮 99-0LP5: LCALL DISPLCALL KEY_SCANJNZ LP5MOV A,TEMP_SCJNE A,#0,DEC_NEXTMOV TEMP_S,#99AJMP LP2DEC_NEXT: DEC TEMP_SAJMP LP2TZ_END: RET;*AD_P: PUSH ACCPUSH PSWPUSH DPHPUSH DPLMOV TH0,#3CHMOV TL0,#0B0HJB SD_
28、KG,AD_NEXT117DJNZ SD_JG,AD_NEXT1MOV SD_JG,#5CPL SD;-AD_NEXT1: SETB AD_CS ;读取 A/D 转换数值,结果在 A 中CLR AD_CLKMOV R2,#8CLR AD_CSLCALL S_NOPNEXT: SETB AD_CLKMOV C,AD_DORLC ACLR AD_CLKDJNZ R2,NEXTMOV R2,#8SETB AD_CS;-MOV TEMP,#0 ;温度查表MOV TEMP_T,AMOV A,#0MOV DPTR,#TAB1CX_LP: MOVC A,A+DPTRCJNE A,TEMP_T,NEXT1NE
29、XT1: JC NEXT5AJMP NEXT6NEXT5: MOV A,TEMPCJNE A,#99,NEXT7 ;检查当前温度值是否超过 99NEXT7: JC NEXT8MOV TEMP,#0 ;超出赋 0AJMP NEXT6NEXT8: INC TEMPINC AAJMP CX_LP;-NEXT6: MOV A,TEMP;控制继电器部分CJNE A,TEMP_S,NEXT2NEXT2: JC NEXT3SETB RELAYAJMP NEXT4NEXT3: CLR RELAYNEXT4: POP DPLPOP DPHPOP PSWPOP ACCRETI;*DISP: MOV DPTR,#T
30、ABJNB SD,D_NEXTMOV B,#10 ;显示设置温度MOV A,TEMP_SDIV ABMOVC A,A+DPTRMOV XS_IO,#11111011BSETB WXCLR WXMOV XS_IO,ASETB DXCLR DXLCALL DELAYMOV A,BMOVC A,A+DPTRMOV XS_IO,#11110111BSETB WXCLR WXMOV XS_IO,ASETB DXCLR DXLCALL DELAY;-D_NEXT: MOV B,#10 ;显示当前温度MOV A,TEMPDIV ABMOVC A,A+DPTRMOV XS_IO,#11111110BSETB
31、WXCLR WXMOV XS_IO,ASETB DXCLR DXLCALL DELAYMOV A,BMOVC A,A+DPTRMOV XS_IO,#11111101BSETB WXCLR WXMOV XS_IO,A18SETB DXCLR DXLCALL DELAYRET;*按键KEY_SCAN: MOV A,KEY_IOANL A,#07HCJNE A,#07H,MAYKEYMOV A,#0AJMP KEY_ENDMAYKEY: LCALL DELAYMOV A,KEY_IOANL A,#07HCJNE A,#07H,YESKEYMOV A,#0AJMP KEY_ENDYESKEY: CJN
32、E A,#06H,NO_KEY1MOV A,#1AJMP KEY_ENDNO_KEY1: CJNE A,#05H,NO_KEY2MOV A,#2AJMP KEY_ENDNO_KEY2: MOV A,#3KEY_END: RET;*DELAY: MOV 40H,#5DL2: MOV 41H,#125DL1: NOPNOPDJNZ 41H,DL1DJNZ 40H,DL2RET;*TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HTAB1: DB 32,34,35,36,38,39,41,43,44,46,48,49,51,53,55DB 57,59,61,63,65,67,69,71,73,75,77,80,82,84,86DB 89,91,93,95,98,100,102,105,107,109,112,114,116DB 118,121,123,125,128,130,132,134END19第四章 总结报告