版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 MCS51系列单片机的扩展 内容提要 1、本章讲解单片机系统扩展方法,是指单片机在应用时常需外接I/O口和存储器,以增强单片机功能,单片机一般有固定的扩展模式。 2、简介常用存储器扩展方法,常用存储器芯片及串行数据存储器扩展、串行I2C芯片应用。5.1 MCS-51系列单片机系统扩展方法 5.1.1最小系统和系统扩展方法 单片机是在一片芯片内集成了计算机的基本组成电路,独立使用能更好地发挥其体积小、重量轻、耗电少、价格低的优点。使用最少芯片组成的系统称为最小系统。MCS-51系列单片机经多年发展,已经有很多公司在生产兼容51内核的各种不同配置的单片机,其存储器容量和内部模块的功能,可以
2、满足各种不同应用的需求。片内程序存储器的容量可以达到32KB以上,片内数据存储器也有超过2KB的,还有的在片内集成了EEPROM、ADC、DAC等各种功能模块。所以,在设计单片机应用系统时,首先要尽量选择满足系统需要的最小系统。 在使用过程中若单片机本身的功能部件确实不够,就需要扩展。单片机系统的扩展包括程序存储器扩展,数据存储器扩展和接口电路扩展。当前单片机型号很多,同一个系列中片内程序存储器容量有多种形式可供选择,安全性能更高一些,串行存储器应用更多,下面谈这两个问题。 由于MCS51系列单片机的并行接口可以组成总线,所以有很强的扩展功能。采用常用的电路芯片,按照典型的电路连接,就能方便地
3、构成各种不同扩展的应用系统。 MCS-51单片机的扩展也可以利用串行总线,市场上有多种带有I2C,SPI串行总线接口的接口芯片。单片机若有相应总线控制接口,则系统硬件和软件设计将十分简单。即使没有相应总线控制接口,也可以根据总线的时序要求,编写控制程序,用几位并行接口引脚实现串行总线扩展。5.1.2 MCS-51单片机的总线组成 5.1.2 MCS-51单片机的总线组成 系统扩展时,用单片机组成地址总线(AB)、数据总线(DB)和控制总线(CB)。总线的组成见图5.1所示,P0口作为8位数据总线,P0口和P2口组成16位地址总线,P0口经地址锁存器形成地址总线低8位,P2口做地址总线高8位;P
4、3口的第二功能用做控制总线。 即使进行并行总线扩展,也应该尽量减少扩展芯片数量。程序存储器和数据存储器扩展,用一片大容量芯片与用几片小容量芯片连接方法相比,电路连接简单,成本也低。接口电路的扩展,应尽量选用大规模集成电路的可编程接口芯片。 当必需用并行总线扩充多个集成电路芯片时,要考虑总线的驱动能力。驱动能力不够,要加总线驱动器。可以用两片74LS244组成单向地址总线驱动器,用一片74LS245组成双向数据总线驱动器。 使用并行总线扩展,MCS-51单片机的并行I/O口就只剩下P1口为用户口。 图5.1 MCS-51单片机总线组成 52 存贮器扩展5.2.1 程序存储器扩展 1EPROM存储
5、器 一般用EPROM进行程序存储器扩展。MCS-51的程序存储器空间最大为64K,扩展时可选用的EPROM芯片有 2764 (8K 8=64k位) 、 27128 (16K 8) 27256 (32K 8=256k位) 、27512 (64K 8) 图5-2 27256引脚图 图5.2是27256的引脚图。引脚功能如下: A0 A14地址输入,32KB存储空间需要 使用这15条地址线。 Q0 Q7 数据总线,8位宽度,Q7为高位。 /OE(/G)输出允许,低电平有效。 /CE(/CS/E)片选信号,低电平有效。 不同厂商符号可能不同。 VPP 编程电源输入端,根据说明编程时 多数接+12V。平
6、时使用时接5V。 VCC、GND +5V电源、地线。其他型号的EPROM,主要区别是地址线条数不同。 2扩展程序存储器 复位后,执行外扩EPROM程序存储器的程序时,应将MCS-51的EA引脚接GND;若复位后,从内部EPROM中执行程序,要将EA引脚接+5V。 扩展程序存储器后,还要执行片内ROM中的低4K程序,不必将外扩EPROM接到4K地址以后,只需将外扩EPROM前4K空起来不用。 图5.5电路图中扩展了32KB的EPROM 27256。数据总线D0-D7,地址总线A0-A14接27256对应引脚,地址总线A15悬空,单片机程序选通/PSEN接芯片27256 的读控制/OE(/G)引脚
7、。芯片的芯片选择控制/CE(/E)接地,VPP 接+5V。 使用其他容量的EPROM 只须改变地址位数:当用2764时,地址总线的A14、A13悬空,用27128时,A14悬空,用27512时,则还要连接A15。 在程序开发中还有EEPROM(E2PROM)电可擦存储器28和29系列,如AT28C64等,其引脚与2764、6264兼容,但其第27脚为WE(_), 它不像27系列改写芯片内容前需要用紫外线擦除,而能方便的进行多次改写,掉电后其内容也能长期保存。其引脚图和6264差不多一样。如图5.3所示,是32引脚DIP封装的电可擦存储器28F256的符号图。 EEPROM 是一种电可擦除可编程
8、的只读存储器,是目前广泛被使用的一种只读存储器,其主要优点是能在应用系统中进行在线改写,并能在断电情况下保存数据或程序而不需要保护电源,特别是近年来生产的+5V电可擦除可编程只读存储器,电可擦除只读存储器因兼有程序存储器和数据存储器的特点,故在单片机应用系统中,即可作为程序存储,也可用作数据存储器,作为程序存储器时,其连接方式同一般27系列程序存储器一样采用三总线方式,作数据存储器用时,要注意多数电可擦除存储器写入周期很长,往往有ms级,远远长于单片机的写周期s级,故对其写入控制线可用单片机的单个I/O口,如P1.0,还要专门编写相关的写入程序。或单独用编程器写入。 图5.3 电可擦只读存储器
9、 1静态RAM 单片机扩展数据存储器一般用静态RAM。MCS-51的数据存储器空间最大为64K,要考虑给外扩接口电路留出地址空间。扩展时可选用的静态RAM芯片有 6264 (8K8=64k位)图5.4 6264引脚图 62256 (32K 8=256 k位) 图5.4 是6264引脚图。 引脚功能: A0 A12 地址输入,8KB存储空间 需要13条地址线。I/O0 I/O7 数据总线,I/O7为高位。OE(_) 读输出允许,低电平有效。WE(_)写控制信号,低电平写。 其它时高电平。CE1(_)(CS1(_)) 片选信号,低电平有效。 CE2 (CS2) 片选信号,高电平有效。 NC 空脚
10、VCC、GND +5V电源和电源地线。 62256 无CE2 (CS2),26脚为A13, 1脚为A14。 图5.4 6264引脚图 图5.5 扩展存储器 2扩展数据存储器 图5.5电路图中扩展了8KB的静态RAM 6264。数据总线D0-D7,地址总线A0-A12接6264对应引脚,不接地址线A13-A15, WE(_)接WR(_), OE(_)接RD(_)。只扩展一片静态RAM时,CS2(CE2)接高电平, CS1(_)(/CE1)接地。本图中6264地址是xxx00000 00000000 xxx11111 11111111,其中x为任意值,即数据存储器地址可为0000H1FFFH,共8
11、K字节。程序存储器地址是x0000000 00000000 x1111111 11111111, 即程序存储器的地址可为0000H7FFFH,共32K字节。因为和CPU相连的地址线每条都可能有0和1两种变化,没相连的地址线变化对存储器没影响,可以是任意值。当使用62256时,增加连接A13、A14。 53串行存储器E2PROM的应用 常有单片机应用系统在掉电时要保存一些重要的数据,此时可以用E2PROM完成这一任务。串行E2PROM占用系统硬件资源少,是常用的方法。串行E2PROM是可在线电可擦除和电写入的存储器,具有体积小、接口简单、数据保存可靠、可方便改写、功耗低等特点,而且可低电压写入,
12、在单片机系统中应用十分普遍。如串行数据存储器24C02和X84041、串行时钟芯片DS1302、串行模数转换器TLC2543C等等。 5.3.1 I2C总线 I2C是由Philips公司推出的一种新型总线标准,具有接口线少,控制方式简单,器件封装外形结构小,通信速率高等特点。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件。I2C总线上允许连接多种接口电路,如A/D及D/A转换器、实时时钟/日历、LCD驱动器、键盘接口等。也可以连接串行E2PROM。 I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可以发送和接收数据。在CPU
13、和被控器件间双向传送,最高传送速率为400Kb/s。SDA是双向串行数据线,用于地址、数据的输入和数据的输出,使用时需加上拉电阻。SCL是时钟线,为器件数据传输的同步时钟信号。 I2C总线的数据传送格式是:在I2C总线开始信号后,主控器件送出的第一个字节数据是用来选择从器件的地址,其中前7位为地址码,第8位为方式位(R/W)。方式位为“0”表示发送,即CPU把信息写到所选择的接口或存储器;方式位为“1”表示CPU将从接口或存储器读信息。开始信号后,系统中的各个器件将自己的地址和CPU送到总线上的地址进行比较,如果与CPU发送到总线上的地址一致,则该器件即为被CPU寻址的器件,其接收信息还是发送
14、信息则由第8位(R/W)确定。 数据在I2C总线上以字节为单位进行传送,每次传送先传最高位。每次传送的数据字节数不限,在每个被传送的字节后面跟一个应答位(ACK), 总线上第9 个时钟脉冲对应于应答位,数据线上低电平时为应答信号,高电平时为非应答信号。传送数据开始前,CPU发送起始位,通知接收器件作好接收准备。起始位的时序是当SCL为高电平时,SDA由高变低。一组数据传送结束时,CPU发送停止位,停止位的时序是当SCL为高电平时,SDA由低变高。数据传送格式如下:起始位从器件地址R/WACK数据ACK数据ACK停止位 SDA上的数据在SCL高电平时必须稳定,在SCL低电平时才允许变化。也就是说
15、时钟信号SCL为高电平时,SDA由高电平到低电平为开始;当时钟信号SCL为高电平时,SDA由低电平到高电平为结束。从开始到结束期间为忙,结束到下次开始为闲。I2C总线属集电极开路器件,SCL总线上有一个器件为低电平,将影响所有器件,并使SCL变低,高电平不影响其它器件,当所有器件的SCL低电平结束后SCL总线才变为高电平。第一个变低电平的器件把总线SCL拉成低电平。 5.3.2 串行E2PROM -X24C02 X24C02是内含2568位低功耗CMOS的E2PROM,具有功耗小、工作电压宽(2.55.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。图5.6为X24C
16、02的引脚图。图中A0、A1、A2是三条地址线,使用时接电源或地,用于确定从芯片的器件地址。VDD和VSS分别为正、负电源。SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送。SCL为串行时钟输入线。WC(_)为写操作控制端,接“0”允许写入,接“1”禁止写入。在这点少数厂家的产品可能有不同规定。 图5.6 X24C02引脚 1.器件寻址与字节寻址 I2C总线的器件地址的高四位是器件类型识别符,X24C02 E2PROM的器件类型识别符是1010。接着的三位是由A2、A1、A0决定的器件地址,这三位接不同电平,可以在一个系统中接最多八片X24C02。最低位是读写控制位,“0”表示写
17、操作,“1”表示读操作。 X24C02 E2PROM中有256个字节(2K位),为指定读写单元,还需要在器件地址后跟一个字节数据地址,用于指明字节地址。 2.字节写操作起始位从器件地址0ACK字节地址ACK数据ACK停止位 单片机送出起始位后,接着送从器件地址码(7位)、R/W位(0),表示ACK位后面为待写入数据字节的地址和待写入数据字节,最后用停止位结束一个字节的写入。格式如下: 3.操作 X24C02还允许4个字节顺序写入,在以上格式中,连续送4个字节数据,再发停止位。起始位从器件地址0ACK字节地址ACK数据ACK停止位 3. 字节读操作 字节读操作需要在读之前,先用写操作指定字节地址
18、,在应答位之后,再送起始位和从器件地址码、R/W位(1),随后读出数据。格式如下:数据ACK停止位起始位从器件地址0ACK字节地址ACK起始位从器件地址1ACK X24C02允许多个字节顺序读出,在以上格式中,连续读多个字节数据,再发停止位。数据ACK停止位起始位从器件地址0ACK字节地址ACK起始位从器件地址1ACK 5.3.3 51单片机扩展 X24C02 电路连接如图5.7。写器件地址为0A0H(1010 000 0分别是识别符、地址和读写控制位),读器件地址为0A1H(只有读写控制位不同)。 驱动程序如下:图5-7 扩展24C02 1.送起始位子程序:STARTBIT:CLR P1.1
19、SETB P1.0 NOPSETBP1.1NOPCLRP1.0NOPCLRP1.1RET 图5-7 扩展24C022.送停止位子程序:STOPBIT: CLR P1.0 NOPSETB P1.1 ;SCLNOPSETB P1.0 ;SDANOPCLR P1.1RET 3.数据发送子程序: 入口条件: A中为待发送数据 WDATA: MOV R7,#8 CLR P1.1 WDATA1:CLR P1.1 RLC A MOV P1.0,C ;位传送 SETB P1.1 DJNZ R7,WDATA1 ;字节传送循环 CLRP1.1;8位数传完NOPSETB P1.1 ;停止位 NOPSETBP1.0J
20、BP1.0,$;应答位检查CLRP1.1NOPRET4.字节写子程序:入口条件:待写数据在R6中,写入单元地址在R5中。WRBYTE:ACALLSTARTBIT;发起始位MOVA,#0A0H;送写器件地址ACALLWDATAMOVA,R5 ;指定字节地址ACALLWDATAMOVA,R6;传送字节数据ACALLWDATAACALLSTOPBIT;发停止位RET5.读数据子程序: 程序出口:读出字节在A中 RDATA:MOVR7,#8 RDATA1:CLRP1.1NOPSETBP1.1NOPMOVC,P1.0;位读入RLCADJNZ R7,RDATA1;读字节循环CLRP1.1;ACKNOPSE
21、TB P1.0NOPSETBP1.1NOPRET 6字节读子程序: 入口条件:读字节地址在R5中;程序出口:读出字节在A中 RDBYTE:ACALLSTARTBIT;发起始位 MOVA,#0A0H;送写器件地址ACALLWDATAMOV A,R5;指定字节地址ACALLWDATANOPACALLSTARTBIT;发起始位MOVA,#0A1H;送读器件地址ACALLWDATAACALLRDATA;读出数据ACALLSTOPBIT;发停止位RET 5.4 串行温度传感器DS18B20 5.4.1 DALLAS公司DS18B20基本参数 DALLAS公司生产的单线数字温度传感器DS18B20、 DS
22、1822,外形如图5.8所示,支持“一线总线”接口,测量温度范围为 -55C+125C,在-10+85C范围内,精度为0.5C。DS1822的精度较差为 2C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,新的产品支持3V5.5V的电压范围, DS18B20可以程序设定912位的分辨率,精度为0.5C。用户设定的报警温度存储在EEPROM中,掉电后依然保存。图5.8 DS18B20的封装 DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2C,是经济型产品。
23、DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS1
24、8B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。 这是12位转化后得到的12位数据,存储在18B20的两个8比特(位)的RAM中,Bit0是最低位,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输
25、出为FC90H。 温度值位指示 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 温度值 的低字节 2 2 2 2 2-1 2-2 2-3 2-4 温度值 位指示 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 温度值 的高字节 S S S S S 26 25 24 表5.1两字节12位温度格式 DS18B20温度传感器的内部存储器包括一个高速暂存RAM(数据缓冲寄存器)和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。前者暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,
26、第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。该字节各位的意义如下:TM R1 R0 1 1 1 1 1 如表5。4所示。温度值/ 双字节温度(二进制) 双字节温度(十六进制) +125 0000 0111 1101 0000 07D0H +85.5 0000 0101 0101 1000 0558H +25.0625 0000 0001 1001 0001 0191H +10.125 0000 0000
27、 1010 0010 00A2H 0 0000 0000 0000 0000 0000H -1.5 1111 1111 1110 1000 FFE8H -10.125 1111 1111 0101 1110 FF5EH -25.0625 1111 1111 0110 1111 FE6FH -55 1111 1100 1001 0000 FC90H表5.2两字节温度与十进制温度转换关系 该寄存器的低五位一直都是1 ,TM是测试模式位,用于设置DS18B20处在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时
28、被设置为12位). R1 R0 分辨率 温度最大转换时间 0 0 9位 93.75ms 0 1 10位 187.5ms 1 0 11位 375ms 1 1 12位 750ms 表5.3分辨率设置表: 寄存器 内容字节地址 温度低8位0 温度高8位1 高温限值 2 低温限值3 配置寄存器4 保留5 计数剩余值6 每度计数值7 CRC校验8 表5.4 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500
29、微秒,然后释放(输出高),DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,拉低总线,主CPU收到此信号表示复位成功。 5.4.2温度传感器DS1820使用中注意事项 DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: (1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。由于本节技术复
30、杂性,对一般读者DS18B20内容只作阅读。 (2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 (3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造
31、成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。命令功能 指令代码 功能说明读ROM33H读DS18B20中的64位光刻ROM序列号启动转换 44H 启动温度转换,结果存入内部高速暂存器RAM中写温限值 4EH向内部字节地址2和3 中写入上下限温度值匹配ROM 55H发出命令后,还发送64位ROM序列号寻找对应号码的18B20读供电 B4H读电源供给方式: 18B20发0为寄生供电,1为外接供电读取温度 BEH读取温度寄存器等9字节的内容跳过ROM CCH单片18B20时,跳过读序列号操作,直接发温度转换报警搜索 ECH执行后,当温度超过上下限值时18
32、B20才作响应搜索ROM F0H搜索同一条线上挂接有 几个18B20,识别ROM表5.5温度传感器DS18B20指令(命令)说明 (4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序会进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地.当用P1.0和DS18B20相连接时参考程序如下。DQ EQU P1.0 ORG 000
33、0H AJMP MAIN ORG 1000HMAIN: LCALL INIT_18B20 ;调复位子程序MOV A,#0CCH LCALL WRITE_18B20 ; 跳过读序列号操作MOV A,#4EH ;写限制温度命令LCALL WRITE_18B20 MOV A, #TH ;写入上限温度值LCALL WRITE_18B20 MOV A,#TL LCALL WRITE_18B20;写入下限温度值 MOV A, CONFIG12 LCALL WRITE_18B20 ;设为12位转换精度MAIN1: LCALL INIT_18B20 ;复位子程序 LCALL RD_TEMPER ;读温度 LC
34、ALL LDVV ;调数据处理子程序, 简写程序 LCALL DISPLAY ;调显示子程序, 省略程序 LJMP MAIN1;*DS18B20复位程序*INIT_18B20: MOV R7 #06H ;复位时查询次数 LOP0:SETB DQ ;18B20输入端 MOV R0,#0FBH CLR DQ TSR1: DJNZ R0,TSR1 ;维持DQ低电平 480s960s SETB DQ MOV R0,#25H TSR2: DJNZ R0,TSR2 JNB DQ ,TSR3 ;查看18B20把DQ拉低否 DJNZ R7,LOP0 ;未拉低则延时再查, 6次结束 SETB P2.0 ;延时期
35、未能查到18B20 SJMP TSR4 TSR3: SETB FLAG1 ;置标志位FLAG1, 表明DS18B20存在 CLR P2.0 ;二极管指示TSR5: MOV R0,#06BH TSR6: DJNZ R0,TSR6 ;延时后结束 CLR C ORL C, DQLOP1;JC TSR4 ;确认一次 AJMP TSR7TSR4: CLR FLAG1 ;未能查到 SETB P2.0 ;取消指示灯 SETB DQ ;表明不存在 TSR7: RET ;*读转换后的温度值* RD_TEMPER: SETB DQ LCALL INIT_18B20 JB FLAG1,TSS2 RET ;若不存在则
36、返回 TSS2: MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20 MOV A,#44H ;发出温度转换命令 LCALL WRITE_18B20 LCALL DELAY ;调延时子程序500msLCALL INIT_18B20 ;调复位子程序 MOV A,#0CCH ;跳过ROM LCALL WRITE_18B20 MOV A,#0BEH ;发出读温度换命 LCALL WRITE_18B2 LCALL READ2_18B20 ;读两个字节的温度 RET ;*写DS18B20程序* WRITE_18B20: MOV R2,#8 SETB DQ WR1: CLR DQ MO
37、V R3,#6 DJNZ R3,$ ;写前保持15s低电平 RRC AMOV DQ,C;写入一位 MOV R3,#30 DJNZ R3,$ ;等待18B20读入 SETB DQ DJNZ R2,WR1 ;8位写完否 SETB DQ ;写完结束 RET ;*读18B20程序,读出两个字节的温度* READ2_18B20: MOV R4,#2 ;低位存在29H,高位存在28H MOV R1,#29H RE00: MOV R2,#8 RE01: CLR DQ ;低电平10s NOP NOP NOP SETB DQ ;高电平延时 MOV R3,#7 DJNZ R3,$ MOV C,DQ ;读入一位温度
38、到C中 MOV R3,#30 DJNZ R3,$ RRC A DJNZ R2,RE01 ;共读8位 MOV R1,A ;保存 DEC R1 ;保存下一数据单元地址 DJNZ R4,RE00 ;读第二字节 RET ;*读出的温度进行数据转换*LDVV: MOV A,29H ; 看成温度大于0 MOV C,28H.0 ;将28H中的最低位移入C RRC A MOV C,28H.1 RRC A MOV C,28H.2 RRC A MOV C,28H.3 RRC A MOV 30H,A ;整数温度结果存30H单元 JNC LOP2 ;小数点后面的数四舍五入 INC 30H LOP2: RET 练习8音
39、乐程序 1、 计算机可以模拟发声是大家都知道的事,电子琴就是利用电子电路发声的典型,当前MP3机的流行也是电子发声的代表事件。这里讲解用单片机发声的方法,重点在了解计算机发声的原理,学习单片机的编程方法,数据放在程序存储器中,采用查表程序编写,使用定时器产生声音所需频率的方波,经放大整形后送杨声器发出一个音,如图5.9所示,再按节拍送下一频率的声音,声音的节拍由延时程序给定,也就是说其发声的原理是:音调由不同的频率产生,由延时程序产生节拍,由定时器定时产生方波频率,如1KHZ频率的声音,周期是1mS,正负半周各500s,当用6MHZ晶体,定时方式1时,可计算定时器初值如下:(216-X)*12
40、/6=500S, X=65535-250=65285=FF05H,本次采用的音调、频率、定时器初值对应关系见表5.6所示,这个表中数据音调较低,实验时可适当调高,节拍一秒钟约几拍,常见是1/4拍子。其确定方法见下面例子,懂简谱时较好理解。图5.9 音乐程序电路参考图 音调 4 5 6 7 1 2 3频率 175 196 220 248 262 294 330T1初值 FA49 FAE6 FB7E FC0C FC2F FC8F FCF8音调 4 5 6 7 1(_) 2(_) 3(_)频率 349 392 440 494 523 587 659T1初值 FD23 FD73 FDBA FDFA F
41、E18 FE4C FE94表5.6 音乐 音调和T1初值对照表 查表方法: 我的祖国 第一句简谱和T1初值对应如下: 简谱: 1 2 3 5 1(_) 6 5 T1初值:FC2F02 FC8F02 FCF802 FD7302 FE1801 FDBA01 FD7304 由上可知每一个音调对应3个字节数据,前两个是音调,第三个是节拍。程序中音调由定时器产生,节拍由延时得到,把一个曲子的所有数据放入数据表DATA1中,用00H,00H,00H结束,程序可循环播放这段曲子。 2、程序清单如下: ORG 0000H LJMP START ORG 001BH LJMP LT1 START: MOV TMO
42、D ,#11H ;T1定时方式1 SETB ET1 ;T1开中断 ETB EA MOV DPTR, #DATA1 ;指向数据表 MOV A, #00H ;查表指令中用到 A的内容LOP: MOVC A, A+DPTR ;查表A+DPTR得到的 十六位地址中的数 JZ START ;查到00则运行下一轮 MOV R5,A ;暂存准备在中断程序中 使用 R5的内容 MOV TH1,A ;T1装入高8位 INC DPTR ;查下一个值 MOV A,#00H MOVC A,A+DPTR MOV R6,A ;产生中断时T1还要多次 装入初值 MOV TL1,A ;第二个值装入TL1 SETB TR1 INC DPTR ;指向第三个值 MOV A,#00H MOVC A,A+DPTR MOV R2,A ;装入R2的内容, 用于产生节拍,延时 LOP1: MOV R3,#80H ;延时程序 FEH*80H*(R2)=255*128*4=128MS LOP2: MOV R4,#0FEH ;(R2)=04H这样一个音响约0.25秒 LOP3 DJNZ R4,LOP3 ;延时产生节拍, R2的内容决定延时长度 DJNZ R3,LOP2 DJNZ R2,LOP1 INC DPTR MOV A,#00H SJ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅客登机桥操作员岗位工作合规化考核试卷含答案
- 野生动物饲养繁殖工岗中转正晋升考核试卷含答案
- 固体树脂版制版员岗位设备维护考核试卷含答案
- 2026聚酯纤维产业市场竞争力分析及投资发展趋势规划研究报告
- 2026能源装备制造业技术升级与国际化战略研究评估规划分析报告
- 2026能源化工行业市场现状供需分析及发展状况规划分析研究报告
- 2026中国显示面板用彩色光刻胶国产化替代进程报告
- 2026充电基础设施投融资模式创新与风险管控战略报告
- 2026液体化工生产型企业物流协同管理最佳实践报告
- 2026边缘计算节点部署策略专项报告
- 2026年社区卫生服务中心招聘考试真题及答案解析
- 2026散装水产品行业保鲜技术发展与终端零售模式研究报告
- 九年级语文(内蒙古专用)上学期期末真题汇编-古诗词赏析试题(含答案)
- 胖东来商品陈列技巧
- T/CEC 137-2017 输电线路钢管塔力加工技术规程
- 金属矿山井下检修培训
- 贵阳桥下空间管理办法
- 2025年成人高考语文试题及答案
- 麻醉护士护理管理制度
- 《约翰克里斯多夫》课件
- 1.1 都匀毛尖茶概况
评论
0/150
提交评论