一首美妙的乐曲会有一个主旋律,而电脑的主旋律就是CPU的时钟频率。主频、外频和倍频,它们从何而来?锁频、超频,又是怎么回事呢?
电脑中有许许多多的半导体芯片,每个芯片都是在特定的时钟频率下进行工作的。时钟发生器提供给芯片的时钟信号是一个连续的脉冲信号,而脉冲就相当于芯片的脉搏,每一次脉冲到来,芯片内的晶体管就改变一次状态,让整个芯片完成一定任务。
电脑中的芯片绝大多数属于数字逻辑芯片,数字芯片中众多的晶体管全都工作在开关状态,它们的导通和关断动作无不是按照时钟信号的节奏进行的。如果时钟频率过高,就可能出现晶体管的状态来不及变化的情况,产生死锁或随机性误 *** 作。所以,每一款芯片都有自己的频率极限。 频率用f表示,基本单位为“1次/秒”,记做Hz(赫兹)。1Hz就是每秒一次,10Hz是每秒10次(图1)。不过,Hz这个单位在电脑里面太小了,因此通常以KHz、MHz或GHz来表示信号频率。随着频率的攀升,若干年以后恐怕需要使用THz作为频率的单位了(表1)。
表1: 频率表示法
频率单位 kHz MHz GHz THz
换算关系 1×10^3Hz 1×10^6Hz 1×10^9Hz 1×10^12Hz
英文名称 Kilo Hz Mega Hz Giga Hz Tera Hz
中文名称 千赫兹 兆赫兹 吉赫兹 太赫兹
1周期与频率
在电脑技术中,与频率相对应的一个常用术语是周期。周期是频率的倒数,频率越高,周期越短。譬如时钟频率为1GHz时,其时钟周期为1纳秒(表2)。
表2:频率与周期对照表
时钟频率 时钟周期 时钟频率 时钟周期
5MHz 200ns 133MHz 75ns
10MHz 100ns 166MHz 60ns
20MHz 50ns 200MHz 50ns
25MHz 40ns 250MHz 40ns
33MHz 30ns 300MHz 33ns
40MHz 25ns 333MHz 30ns
50MHz 20ns 400MHz 25ns
66MHz 15ns 500MHz 20ns
80MHz 12ns 800MHz 12ns
100MHz 10ns 1GHz 10ns
120MHz 83ns 4GHz 025ns
2带宽与频率 与频率相关的另一个参数是数据传输率,也称为“带宽”,用于衡量数据通信速度的快慢。通常情况下,带宽=时钟频率×(位宽÷8)。譬如PCI总线的时钟频率为3333MHz,因其位宽为32bit,所以其带宽为3333×(32÷8)=133MB/s。
3CPU的频率 在286及以前的电脑中,CPU的频率与外部总线的频率相同。Intel 386电脑中采用了时钟分频方式,时钟电路提供给CPU的时钟信号的频率66MHz,而CPU内部则以33MHz的频率工作。Intel 80486 DX2则采用倍频方式,它允许CPU以2倍或3倍于外部总线的速度运行,但仍以原有时钟频率与外界通讯。进入Pentium时代以后,倍频技术获得广泛应用,处理器的倍频已达20倍。
系统时钟频率:通常也称作“外频”——CPU外部总线的时钟频率。外频由频率合成器芯片提供,后文将对频率合成器芯片进行详细介绍。主频:主频是CPU内核(整数和浮点运算器)电路的实际运行频率,由外频(或前端总线频率)与倍率共同决定,也即:主频=外频×倍率。
前端总线频率:前端总线(Front Side Bus,FSB)频率是CPU和北桥芯片间进行数据交换的频率,它与外频既有联系,又有区别。外频是前端总线时钟信号的频率,而前端总线频率是指数据传输的频率。对于Pentium 4处理器来说,由于采用了QDR(Quad Data Rate,4倍数据比率)技术,1个时钟周期内可以传输4次数据,所以前端总线频率相当于外频的4倍:FSB 800MHz的处理器,外频只有200MHz。 我们可以将作为频率源的时钟信号发生器看作电脑的心脏。只有心脏跳动起来,电脑才能工作。
1振荡源:晶体振荡器
芯片本身通常并不具备时钟信号源,因此须由专门的时钟电路提供时钟信号,石英晶体振荡器(Quartz Crystal OSC)就是一种最常用的时钟信号振荡源。
石英晶体就是纯净的二氧化硅,是二氧化硅的单晶体,即我们常说的水晶。石英晶体有天然(Crude)晶体和人工合成(synthetic)晶体两种。天然石英晶体的杂质含量和形态等大多并不统一,因此电子线路中的晶体振荡器多使用人造石英晶体。
从一块晶体上按一定的方位角切下薄片(称为“晶片”),在晶片的两个表面上涂覆一层薄薄的银层后接上一对金属板,焊接引脚,并用金属外壳封装,就构成了石英晶体振荡器。
石英晶片之所以能当为振荡器使用,是基于它的压电效应:在晶片的两个极上加一电场,会使晶体产生机械变形;在石英晶片上加上交变电压,晶体就会产生机械振动,同时机械变形振动又会产生交变电场,虽然这种交变电场的电压极其微弱,但其振动频率是十分稳定的。当外加交变电压的频率与晶片的固有频率(由晶片的尺寸和形状决定)相等时,机械振动的幅度将急剧增加,这种现象称为“压电谐振”。
压电谐振状态的建立和维持都必须借助于振荡器电路才能实现。一个串联型振荡器,晶体管T1和T2构成的两级放大器,石英晶体XT与电容C2构成LC电路。在这个电路中,石英晶体相当于一个电感,C2为可变电容器,调节其容量即可使电路进入谐振状态。该振荡器供电电压为5V,输出波形为方波。
石英晶体振荡器的频率稳定度可达10^-9/日,甚至10^-11。例如10MHz的振荡器,频率在一日之内的变化一般不大于01Hz。因此,完全可以将晶体振荡器视为恒定的基准频率源(石英表、电子表中都是利用石英晶体来做计时的基准频率)。从PC诞生至今,主板上一直都使用一颗14318MHz的石英晶体振荡器作为基准频率源。至于始终沿用14318MHz这个频率的原因,或许是保持兼容性的需要吧。但是,笔者在显卡、闪存盘和手机中也发现了14318MHz的晶振,就不知道是什么原因了。
主板上除了这颗14318MHz的晶振,还能找到一颗频率为32768KHz的晶振,它被用于实时时钟(RTC)电路中,显示精确的时间和日期。
2分频器与倍频器
将脉冲频率降低n倍,这就是分频器的作用。在第一代PC机中,石英晶体振荡器输出的频率为14318MHz,而Intel 8086处理器的主频为477MHz,后者刚好是前者的1/3。变换频率的工作是在Intel 8284(时钟发生器/驱动器)中完成的,因为Intel 8284芯片中集成了三分频电路,能够将晶体振荡器产生的脉冲信号降低3倍后,提供给CPU和外设
随着CPU主频的提高,需要将晶体振荡器提高若干倍才能满足CPU的需要,于是在时钟电路中倍频器取代了分频器的位置。如果说分频器进行的是除法运算,倍频器则进行了乘法运算,它将晶体振荡器的频率提高n倍。 整合的时钟电路,是硬件技术进步的一个标志。电脑中的不同设备对时钟频率的要求是不一样的,如果你从废物箱中找来一块286主板,可以看到有好几颗晶振排列在一起。电脑中的CPU,AGP插槽、PCI插槽、硬盘接口、USB端口和PS/2端口等在通信速度上有很大差异,所以需要提供不同的时钟频率,譬如PCI要求33MHz、USB为48MHz等。可是,一只石英振荡器只能提供一种频率,所以主板制造商通常将这些原本散布在主机板上各处的振荡电路整合成一颗“频率合成器(Frequency Synthesizer)”芯片,对晶体振荡器产生的脉冲信号进行分频(或倍频),以便为不同运行速度的芯片(或设备)提供所需要的时钟频率。
普通分频器为整数分频器,其输出频率与输入频率之间为整数倍的关系,只能分段调节频率,不能满足精密调节的要求。频率合成器是“分数分频器”,可对输出频率进行精细调节。研发工程师可自由地设计电路中的各种频率,不再受限于石英震荡晶体的固定频率规格。电脑中的时钟芯片一般都具有“分数分频”能力,可以根据需要将调节步长设计到1%,甚至01%。为了指导和规范频率合成器的设计和应用,Intel制定了频率合成器设计指南,如CK97、CK40X等,适用于最新Pentium 4处理器的规范是CK410。
1频率调节原理
频率合成器是一个具有频率负反馈的时钟信号系统(图7),其中使用了两个分频器,Mdiv用于降低基准频率,Ndiv则用于对VCO进行分频。晶体振荡器(OSC)产生的频率fi经M分频器后得到参考频率fref,它与反馈频率ffd分别送入鉴频器(Frequency Detector,FD)的两个反向输入端,鉴频器输出一个反映两者之商的直流电压,并经低通滤波器(Low Pass Filter,LPF)滤除交流分量后,提供给压控振荡器(Voltage Controlled Oscillator,VCO)输出频率信号fout。
频率合成器的输出频率fout与输入频率fin之间的关系可以用公式fout=fin×(N+k/M)来表示,其中N、M和K均为整数,K可取0~M间的任意整数。非整数值N+k/M通常写作NF,这里的圆点代表小数点,N表示频率的整数部分,而F=k/M则表示频率的小数部分。在输入频率fin、N和M均不改变的条件下,只要修改k值即可得到所需要频率值fout。
在频率合成器芯片中,有专门的SMBus接口电路,这是芯片的寄存器与外部联络的途径,有了它,就能够通过BIOS或软件对寄存器进行改写。频率寄存器中的每一位数据有两种可能,“0”或“1”,那么当这几位按不同状态进行组合时就可得到多种外频输出。
频率合成器的频率调节精度与频率寄存器的位数有关,譬如,如果频率寄存器为5位,则调节步长为1MHz。为数越多,调节精度越高。在实用的频率合成器中,Mdiv和Ndiv两个分频器均为可编程的,只要用户设定相应的fout数值,BIOS便能自动给出N、M和K的值,并通过SMBus总线写入相应的寄存器中。
2PLL实现相位同步的自动控制原理
时钟芯片是电脑的心脏,其性能和稳定性直接决定着整个硬件系统的性能。采用频率合成器一方面可以节省成本与主板空间,更为重要的目的是使主板各芯片以及外部设备的时钟信号与CPU的时钟信号之间保持严格的同步关系,以保证正确地交换数据。FS芯片不仅具有倍频/分频功能,更主要的特点就是具有相位锁定功能——输出信号的相位被强制跟参考信号的相位保持一致。因此,频率合成器输出的各种时钟信号虽然频率各不相同,但它们在相位上是完全一致的,它们都与参考信号源保持相位同步。
为了实现相位锁定,VCO输出的时钟信号与参考频率信号在鉴相器中进行相位比较,如果两者相位不同,就会输出一个与相位差大小成比例的误差电压;误差电压的极性决定了电荷泵内的电流源是吸收还是送出电流,所以电荷会流入或流出滤波器内的电容器,电荷流动的数量与相位差的大小成正比。压控振荡器是一个受电压控制的振荡器,内部的变容二极管两端电压变化时,其电容量会随之改变,从而改变振荡器的频率。
压控振荡器是PLL电路的核心单元,相位控制过程是依靠改变压控振荡器的输入电压(即调谐电压)实现的,调谐电压的大小和极性决定了相位调整是滞后还是超前,从而使相位误差得以校正。
3频率合成器的其它功能
在主板设计中使用频率合成器芯片,可以很容易地实现时钟频率的调整和相位锁定。除了这些功能,频率合成器还允许主板设计工程师通过微调各种接口时钟之间的时钟延迟,使各种相关接口的组件保持同步,方便了设计和调试工作(图8)。
此外,频率合成器芯片在系统稳定性和安全性方面也是可以有所作为的。一方面,可以对不需要调整的频率进行锁定,防止因CPU超频而导致其它设备失效的情况;另一方面,一些频率合成器芯片中还设计了“看门狗”功能,一旦超频失败导致死机时,此功能可以对频率寄存器进行清零,使系统按照CPU的默认频率正常启动。
如今,频率合成器芯片的应用已经十分普遍,常见的有ICS、Cypress、IDT、Realtek和Winbond等品牌。不过,在nForce2主板中,已经找不到频率合成器的身影,因为频率合成功能已经整合到IGP/SPP芯片中了。
AMD Athlon系列处理器的倍频信号工作流程,当RESET#信号到来时,处理器将FID信号送给逻辑信号转换芯片,由该芯片产生SIP(Serialization Initialization Packet,串行初始化数据包),对系统总线进行初始化和设置。
在CPU上设置了一些称为金桥的连接线,FID信号的电平可以通过改变金桥的通断进行设置,金桥接通时为低电平,断开时则为高电平。FID信号在内置倍频控制单元内生成,并经内置FID驱动电路对信号进行放大后,从FID引脚送至逻辑信号转换芯片,产生的SIP数据包再从BP_FID引脚返回到CPU。这样,CPU内部的频率合成电路便可以将倍频与外频两个信号一起合成CPU的核心频率。
3内存频率的设置
早期主板上内存总线时钟信号也是由频率合成器产生的,不过较新的主板已经撇开了主板上的频率合成器芯片,而由北桥芯片完成内存总线时钟频率的设定,这在业界被称作“内存异步”。
与CPU频率的自动设置原理相似,北桥芯片内的频率合成器也是通过一定的手段实现自动设置频率的。内存的频率由内存条上的SPD(Serial Presence Detect 内存序列存储芯片)提供。SPD类似于主板上的BIOS,存储了内存芯片的内存容量、工作频率、延迟时间(CAS、tRCD、tRP、tCA)及工作电压和厂商信息等,北桥芯片通过SMBus总线的SDA引脚读取每个DIMM的SPD中的参数,SPD芯片的信息就会被记录在北桥芯片内PLL电路的寄存器(Register)中。
内存总线时钟与系统时钟的频率往往并不相同,譬如系统时钟为133MHz,而内存时钟的频率为200MHz时,两者之间存在67MHz的差异,这种频率上的差异被称为“内存异步”。不过,为了实现内存与CPU之间的同步通信,两个总线在相位上仍然需要保持同步。实现相位的同步在技术上并不困难,只要北桥芯片中的PLL电路与频率合成器中的PLL电路使用同一个参考频率fref就可以了。
事实上,即插即用的外部设备的频率设置与内存频率的自动设置原理基本相同,主机通过读取设备中ROM芯片中包括频率在内的特征参数,然后自动分配系统资源,自动配置驱动程序,使得设备可以正常工作。 1检试实际频率,释放设备潜能
Intel Processor Frequency ID Utility是Intel公司发布的CPU的检测软件,该软件列出了“报告频率”和“预期频率”两项数据,前一项表示被测试CPU的当前运行速度,后一项表示被测试CPU出厂时所设计的最高 *** 作速度。如果两者数据一致,即说明CPU未被超频。如果报告频率低于预期频率,则说明处理器的能力没有发挥出来。
使用测试软件能够大致了解各设备的工作状态,对优化系统性能非常重要。与上述检测软件类似的还有很多,所有需要测试的频率都可以通过测试软件显示出来。不过,一些高级玩家怀疑软件测出的频率是否准确。这种怀疑不是没有根据的,因为检测软件运行的平台,是基于参考频率fref的。如果参考频率自身都不准确,软件测出的频率值也就难以保证。不过,要精确地测量时钟信号的频率时,可以使用示波器。
外部设备的性能与接口电路工作频率之间有着密切关系。以硬盘为例,如果使用AIDA32等软件测出硬盘的最高UDMA传输模式为UDMA 6(ATA-133),但当前UDMA传输模式为UDMA 1(ATA-33)。即硬盘本来可以工作在133MHz的频率下,而接口却只以33MHz的频率交换数据。那么就会极大地降低硬盘性能。遇到这种情况,说明设备的潜能没有发挥出来,应检查BIOS中的接口模式选择是否正确或通过安装相关IDE驱动程序来解决。
2防止心跳过速
频率过低造成设备性能低下,相反,如果频率过高则会造成设备工作不稳定,甚至彻底罢工。平时我们在对显示芯片和显存进行超频之后,显示画面出现花屏就属于典型案例。因为心跳过速而导致设备不能工作的情况,在电脑故障中占有相当大的比重。因为种种原因,一些设备工作频率实际上是达不到标称频率的。对于此类问题的处理,笔者在“电脑故障降频诊断法”(《微型计算机》2003年第17期)一文中已有详细介绍。在此需要补充一点,如果CPU超频失败导致不能启动后,将CMOS放电,BIOS会以100MHz外频的安全模式启动,并不会造成严重后果。 在电脑的实际使用过程中,相信大部分DIYer对于“频率”一词的兴趣一开始都建立在对CPU、内存、显示核心和显存的超频之上。同时我们也相信,本文关于频率的深入探讨对您而言,不论是解决电脑故障还是享受超频的快感,都将起到极大的帮助。不过,在此我们仍然强调一点——当您把玩“频率游戏”时,请记住“超频”是把双刃剑,它能让您感受到运行速度的提升,但稳定性下降、系统崩溃,甚至硬件损坏等风险也会时刻相随! [2]
同步通信都要有时钟进行同步的,配置时钟频率就要告诉这个端口是以自身的时钟为准,还是取线路时钟,或者取外部的DTE时钟。
只有确立的同步方式,串口才可以好好的工作,否则不是不通,就是乱码,用不了的!在同步通信里,都必须有的,而异步通信就以校验,停止位为特点进行数据传输。现在IP接口的路由器大为应用,这样通过串口进行联网的都很少了
DTE是数据终端设备,如终端,是广义的概念,PC也可以是终端。(一般广域网常用DTE设备有:路由器,终;端主机)
扩展资料:
路由器的功能就是将不同的子网之间的数据进行传递。 具体功能有以下几点:
(1)实现IP、TCP、UDP、ICMP等网络的互联。
(2)对数据进行处理。收发数据包,具有对数据的分组过滤、复用、加密、压缩及防护墙等各项功能。
(3)依据路由表的信息,对数据包下一传输目的地进行选择。
(4) 进行外部网关协议和其他自制域之间拓扑信息的交换。
(5) 实现网络管理和系统支持功能。
参考 资料来源:
百度百科-路由器
百度百科-DCE
KEYTM EQU 31H
KEYSCAN EQU 32H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
MIN EQU 79H
HOUR EQU 7AH
PAUSE BIT 00H
DOT BIT 01H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR ;50ms定时
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#0
MOV SCANLED,#0
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV 37H,#10H
MOV 38H,#10H
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
MOV CLK,#0
CLR PAUSE
SETB EA
SETB ET1
SETB TR1
LOOP:
LCALL KEYSEL
MOV A,KEYVAL
CJNE A,#0FFH,LOOP1
SJMP LOOP
LOOP1:
CJNE A,#10,LOOP2 ;“ON”启动
SETB TR0
SETB ET0
SETB PAUSE
SJMP LOOP
LOOP2:
CJNE A,#11,LOOP3 ;“=”清零
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
LCALL DISCHG
SJMP LOOP
LOOP3:
CJNE A,#15,LOOP4 ;“+”暂停
CLR TR0
CLR ET0
CLR PAUSE
SJMP LOOP
LOOP4:
CJNE A,#14,LOOP5 ;“-”清显示暂停
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV 37H,#10H
MOV 38H,#10H
CLR TR0
CLR ET0
CLR PAUSE
SJMP LOOP
LOOP5:
CJNE A,#10,LOOP6 ;数字键
LOOP6:
JC LOOP7
LJMP LOOP
LOOP7:
JNB PAUSE,LOOP8 ;暂停状态可以输入数字键
LJMP LOOP
LOOP8:
MOV 33H,34H
MOV 34H,35H
MOV 35H,36H
MOV 36H,37H
MOV 37H,38H
MOV 38H,KEYVAL
MOV A,33H
SWAP A
ORL A,34H
LCALL BCDH
MOV HOUR,A
MOV A,35H
SWAP A
ORL A,36H
LCALL BCDH
MOV MIN,A
MOV A,37H
SWAP A
ORL A,38H
LCALL BCDH
MOV SEC,A
LJMP LOOP
;------------------
;BCD转换为十六进制
BCDH:
MOV B,#10H
DIV AB
MOV R7,B
MOV B,#10
MUL AB
ADD A,R7
RET
;------------------
;十六进制转换为BCD
HBCD:
MOV B,#10
DIV AB
SWAP A
ORL A,B
RET
;------------------
KEYSEL:
MOV KEYVAL,#0
MOV KEYSCAN,#0EFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS1
MOV KEYVAL,A
SJMP KEYRTN
KEYS1:
MOV KEYSCAN,#0DFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS2
CLR C
ADD A,#4
MOV KEYVAL,A
SJMP KEYRTN
KEYS2:
MOV KEYSCAN,#0BFH
LCALL GETKEY
MOV A,KEYTM
JZ KEYS3
CLR C
ADD A,#8
MOV KEYVAL,A
SJMP KEYRTN
KEYS3:
MOV KEYSCAN,#7FH
LCALL GETKEY
MOV A,KEYTM
JZ KEYRTN
CLR C
ADD A,#12
MOV KEYVAL,A
KEYRTN:
LCALL CHGKEY
RET
;--------------------
GETKEY:
MOV KEYTM,#0
MOV A,KEYSCAN
MOV P3,A
NOP
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY
MOV R2,#10
LCALL DELAY
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JZ NOKEY
MOV A,P3
ANL A,#0FH
MOV R7,A
SF:
MOV A,P3
ANL A,#0FH
XRL A,#0FH
JNZ SF
MOV A,R7
CJNE A,#0EH,NK1
MOV KEYTM,#1
SJMP NOKEY
NK1:
CJNE A,#0DH,NK2
MOV KEYTM,#2
SJMP NOKEY
NK2:
CJNE A,#0BH,NK3
MOV KEYTM,#3
SJMP NOKEY
NK3:
CJNE A,#07H,NOKEY
MOV KEYTM,#4
NOKEY: RET
;--------------------
DELAY:
MOV R3,#50
DELAY1:
MOV R4,#100
DJNZ R4,$
DJNZ R3,DELAY1
DJNZ R2,DELAY
RET
;--------------------
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#20,T0ISRE
MOV CLK,#0
INC SEC
MOV A,SEC
CJNE A,#60,T0ISRE
MOV SEC,#0
INC MIN
MOV A,MIN
CJNE A,#60,T0ISRE
MOV MIN,#0
INC HOUR
MOV A,HOUR
CJNE A,#24,T0ISRE
MOV SEC,#0
MOV MIN,#0
MOV HOUR,#0
T0ISRE:
LCALL DISCHG
POP ACC
RETI
;--------------------
DISCHG:
MOV A,HOUR
LCALL HBCD
PUSH ACC
ANL A,#0FH
MOV 34H,A
POP ACC
ANL A,#0F0H
SWAP A
MOV 33H,A
MOV A,MIN
LCALL HBCD
PUSH ACC
ANL A,#0FH
MOV 36H,A
POP ACC
ANL A,#0F0H
SWAP A
MOV 35H,A
MOV A,SEC
LCALL HBCD
PUSH ACC
ANL A,#0FH
MOV 38H,A
POP ACC
ANL A,#0F0H
SWAP A
MOV 37H,A
RET
;--------------------
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
CLR DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
SETB DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
CLR DOT
SJMP T1DIS
T103:
DEC A
JNZ T104
MOV P2,#08H
SETB DOT
SJMP T1DIS
T104:
DEC A
JNZ T105
MOV P2,#10H
CLR DOT
SJMP T1DIS
T105:
MOV P2,#20H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#6,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
;--------------------
CHGKEY:
MOV A,KEYVAL
JZ KV16
DEC A
JNZ KV01
MOV KEYVAL,#7
RET
KV01:
DEC A
JNZ KV02
MOV KEYVAL,#4
RET
KV02:
DEC A
JNZ KV03
MOV KEYVAL,#1
RET
KV03:
DEC A
JNZ KV04
MOV KEYVAL,#10
RET
KV04:
DEC A
JNZ KV05
MOV KEYVAL,#8
RET
KV05:
DEC A
JNZ KV06
MOV KEYVAL,#5
RET
KV06:
DEC A
JNZ KV07
MOV KEYVAL,#2
RET
KV07:
DEC A
JNZ KV08
MOV KEYVAL,#0
RET
KV08:
DEC A
JNZ KV09
MOV KEYVAL,#9
RET
KV09:
DEC A
JNZ KV10
MOV KEYVAL,#6
RET
KV10:
DEC A
JNZ KV11
MOV KEYVAL,#3
RET
KV11:
DEC A
JNZ KV12
MOV KEYVAL,#11
RET
KV12:
DEC A
JNZ KV13
MOV KEYVAL,#12
RET
KV13:
DEC A
JNZ KV14
MOV KEYVAL,#13
RET
KV14:
DEC A
JNZ KV15
MOV KEYVAL,#14
RET
KV15:
DEC A
JNZ KV16
MOV KEYVAL,#15
RET
KV16:
MOV KEYVAL,#0FFH
RET
;--------------------
LEDTAB: DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H
DB 0EEH ;"A" 0AH
DB 3EH ;"B" 0BH
DB 9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH
DB 00H ;" " 10H
;--------------------
END我可以给你一个模拟的,但是原理差不多,就是要用个单片机吗,自己要多动脑筋,肯定可以做出来的
下面是具体的设计:
数字时钟的设计与制作
摘要:本系统是采用555构成的多协振荡器、74LS90芯片组合做成的数子时钟系统。其中用555构成的多协振荡器产生震荡频率,再用74LS 90芯片组合成分频电路对震荡频率进行分频,然后对选用74LS92和74LS90分别作为时计数器和分、秒计数器,再加一个校时电路。能让该数子时钟准确计时,以数字形式显示时、分、秒的时间,小时的计时为“24翻1”分,秒的计时为60进位 ,和时间校正功能。
关键字: 震荡器 分频 计数器 74LS90 校时
一、数字时钟的总体设计
1 数字时钟的原理方框图如图1所示:
图1数字时钟的原理方框图
该电路系统由秒信号发生器、“时”、“分”、“秒”计数器、译码器及显示器等组成。秒信号产生器是整个系统是时基信号,它直接决定计数系统的精度。将标准秒信号送入“秒计数器”,“秒计数器”采用六十进制计数器,每累积60秒发出一个分脉冲信号,该信号将作为“分计数器”的时钟脉冲,“分计数器”也采用60进制计数器,每累积60分钟,发出一个“时脉冲”信号,该信号将被送入“时计数器”。“时计数器”采用24进制计数器,可实现对一天24小时的计数。译码显示电路将“时”、“分”、“秒”计数器的输出状态经7段译码显示器译码,通过7段显示器显示出来。
二、模块的设计与比较
1 振荡电路及分频电路
方案一:
(1)采用石英晶体振荡器
石英晶体振荡器的特点是振荡频率准确,电路结构简单,频率易高调整。它还具有压电效应,在晶体某一方向加一电场,则在与此垂直的方向产生机械振动和电场互为因果,这种循环过程一直持续到晶体的机械强度限制时,才达到最后的稳定,这种压电谐振的频率就是晶体振荡的固有频率。
图2 石音晶体振荡电路
图2所示电路通过CMOS非门构成的输出为方波的数字式晶体振荡电路,这个电路中,CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一
个高增益的反相放大器。电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。晶体X1的频率选为32768HZ。该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。C1、C2均选择为30pF。当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施。由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10MΩ。较高的反馈电阻有利于提高振荡频率的稳定性。
(2) 用CD4060计数作分频器
数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。本实验中采用CD4060来构成分频电路。CD4060在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,使用更为方便。CD4060计数为14级2进制计数器,可以将32768HZ的信号分频为2HZ,其次CD4060的时钟输入端两个串接的非门,因此可以直接实现振荡和分频的功能。
方案二:
(1)采用555构成的多偕振荡电路
振荡器电路选用555构成的多偕振荡器,设振荡频率f=1000HZ,其中的电位器可以微调振荡器的输出频率。
图5 多偕振荡电路
(2)用74LS90作分频器
通常实现分频器的电路是计数器电路,一般采用多级10进制计数器来实现。分频器的功能有两个:一是产生标准秒脉冲信号;二是提供功能扩展电路所需的信号。选用中规模集成电路74LS90可以完成以上功能。如图所示,将3片74LS90级联,每片为1/10分频,三片级联正好获得1HZ的标准秒脉冲。
图 6 分频电路
比较: 秒信号发生器是数字电子钟的核心部分,它的精度和稳度决定了数字钟的质量,但是我们做实验考虑到用石音晶体振荡电路时分频电路用的元件较多 且价格较贵,而用555构成的电路元件容易得,电路简单且易于实现,故选方案二
2 秒、分、时计数器设计
秒脉冲信号经过6级计数器,分别得到“秒”个位,十位、“分”个位、十位、“时”个位,十位的计时,秒分计数器为60进制,小时为24进制。
(1)60进制计数电路:秒计数器电路与分计数器电路都是60进制,它由一级10进制计数器和一级6进制计数器连接构成,如图7、8所示,采用两片中规模集成电路7490串联接起来构成的秒、分计数器。
IC2是十进制计数器,作为十进制的进位信号,7490计数器是十进制异步计数器,用反馈归零方法实现十进制计数。IC1和非门组成六进制计数。7490是在一秒时钟或进位信号的下降沿翻转计数, IC1的QA和QC相与0101的下降沿作为“分”或者“时”计数器的输入信号。IC1的QB和QC高电平1分别送到计数器的清零RO1、RO2,7490内部的RO1 和RO2与非后清零而使计数器归零,完成六进制计数。由此可见串联实现了六进制计数。
图7 秒计数电路
图8 分计数电路
(2)24进制计数电路:小时计数电路是由和组成的24进制计数电路,采用两片中规模集成电路7490串联接起来构成。如图9所示:
当“时”个位IC4计数输入端CKA来到第10个触发信号时,IC4计数器复零,进位端QD向IC3“时”十位计数器输出进位信号,当第24个“时”脉冲到达时,IC4计数器的状态为0100,IC3计数器的状态为0100,此时“时”个位计数器的QC和“时”十位计数器的QB输出为1。把它们分别送到IC4和IC3计数器的清零端RO1 和RO2通过7490内部的RO1 和RO2与非后清零,计数器复位,完成24进制计数。
图9 时计数电路
3 校时电路
校时电路实现对时分的校准。在电路中设有正常计时和校时位置。分、时的校准开关分别通过触发器控制。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。根据要求,数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。
图8所示为本实验所用的完整的校时电路图。
图10 校时电路
4 显示器
本系统用七段发光二极管来显示译码器输出的数字,显示器有两种:共阳极或共阴极显示器。74LS48译码器对应的是显示器是共阴显示器。
三、调试要点
我觉得假设在实际的实验箱上组装电子钟时,注意器件管脚的连接一定要准确。“悬空端“、“清0端”、“置1端”要正确处理,调试步骤和方法如下:。
(1)、将频率为1000HZ的信号送入分频器,并用示波器检查各级分频器的输出频率是否符合设计要求。
(3)、将1秒信号分别送入“时”、“分”、“秒”计数器,检查各级计数器的工作情况。
(4)、观察校时电路的功能是否满足校时要求。
(5)、当分频器和计数器调试正常后,观察电子钟是否准确正常地工作。
四、供参考的元器件
(1)、七段显示器(共阴极)6片 (2)、74LS90 9片 (3)、555多谐振荡器 1片 (4)、74LS00 8片 (5)、74LS04 4片
(6)、电阻、电容、导线等。
五、收获体会
该电路的设计让我对数字钟的设计有了一定的了解。我知道了如何设计出1HZ的信号,也对时分秒的设计有了一定的了解。并且在实际电路一般步骤为由数字钟系统组成框图按照信号的流向分级安装,逐级级联,这里的每一级是指组成数字钟的各功能电路。级联时如果出现时序配合不同步,或尖峰脉冲干扰,引起逻辑混乱,可以增加多级逻辑门来延时。经过联调并纠正设计方案中的错误和不足之处后,再测试电路的逻辑功能是否满足设计要求。最后画出满足设计要求的总体逻辑电路图。
参考文献:
1.谢自美,电子线路设计实验测试武汉:华中科技大学出版社,2007
2.康光华,电子技术基础(第五版)。北京:高等教育出版社,2006
3.蒋焕文,孙续。电子测量。北京:计量出版社,1998
4.P.F.格拉夫。电子电路百科全书。张殿等译。北京:科学出版社,1999
5.王兴亮主编现代音响和调音技术。西安电子科技大学出版,2006
该设计主要思路为时钟分频和逻辑运算。也可以理解为计数器设计和进位提取。
需要建立对D触发器的工作方式和各种逻辑门电路的工作方式的正确认识和使用
1、观察该系统输入输出波形可以确定该系统为时钟的四分频(2位2进制)
2、使用双D触发器对时钟进行四分频,一个D触发器可以完成2分频,级联即可完成4分频,根据D触发器分频基本电路设计电路原理图如下:
图中数字信号D(3)为时钟信号二分频,数字信号D(5)为D(3)信号的二分频
3、观察输出波形如下图,可以确认对信号D(3)取反后与D(2)、D(5)进行逻辑与(模2加)运算可以提取所需波形。
4、修改电路设计如下图:
可以直接使用74LS74的反相输出端减少反相器的使用。
5、模拟仿真输入和输出如下图:
观察仿真结果可以发现输出信号D(8)高电平持续时间位半个CP,4个CP为一个周期,符合设计要求。
注意:仿真使用的D触发器为边沿触发,边沿触发D触发器工作过程如下:
当时钟CP上升沿到达时,D输入端的状态被送到Q输出端。
当时钟CP上升沿完成后,Q输出端保持原有的状态,等待下一个CP上升沿。
部分触发器带有复位端和置位端,根据其有效电平可以对Q端进行清0或者置1的 *** 作。
基于AVR单片机Mega16的电子时钟设计摘要: Mega16是一款采用先进RISC精简指令,内置A/D的8位单片机,可支持低电压联机Flash和EEPROM写功能;同时还支持Basic和C等高级语言编程。用它设计电子时钟不仅成本低,硬件简单,而且很容易实现系统移植。介绍了如何利用AVR系列单片机Mega16及1602字符液晶来设计电子时钟的方法,同时给出了相应的电路原理及部分语言程序。
求采纳为满意回答。本实验采用W25Q64芯片
W25Q64是华邦公司推出的大容量SPI
FLASH产品,其容量为64Mb。该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件。W25Q64将8M字节的容量分为128个块,每个块大小为64K字节,每个块又分为16个扇区,每个扇区4K个字节。W25Q64的最小擦除单位为一个扇区,也就是每次必须擦除4K个字节。所以,这需要给W25Q64开辟一个至少4K的缓存区,这样必须要求芯片有4K以上的SRAM才能有很好的 *** 作。
W25Q64的擦写周期多达10W次,可将数据保存达20年之久,支持27~36V的电压,支持标准的SPI,还支持双输出/四输出的SPI,最大SPI时钟可达80Mhz。
一。SPI接口原理
(一)概述
高速,全双工,同步的通信总线。
全双工:可以同时发送和接收,需要2条引脚
同步: 需要时钟引脚
片选引脚:方便一个SPI接口上可以挂多个设备。
总共四根引脚。
(二)SPI内部结构简明图
MISO: 做主机的时候输入,做从机的时候输出
MOSI:做主机的时候输出,做从机的时候输入
主机和从机都有一个移位寄存器,在同一个时钟的控制下主机的最高位移到从机的最高位,同时从机的最高位往前移一位,移到主机的最低位。在一个时钟的控制下主机和从机进行了一个位的交换,那么在8个时钟的控制下就交换了8位,最后的结果就是两个移位寄存器的数据完全交换。
在8个时钟的控制下,主机和从机的两个字节进行了交换,也就是说主机给从机发送一个字节8个位的同时,从机也给主机传回来了8个位,也就是一个字节。
(三)SPI接口框图
上面左边部分就是在时钟控制下怎么传输数据,右边是控制单元,还包括左下的波特率发生器。
(四)SPI工作原理总结
(五)SPI的特征
(六)从选择(NSS)脚管理
两个SPI通信首先有2个数据线,一个时钟线,还有一个片选线,只有把片选拉低,SPI芯片才工作,片选引脚可以是SPI规定的片选引脚,还可以通过软件的方式选择任意一个IO口作为片选引脚,这样做的好处是:比如一个SPI接口上挂多个设备,比如挂了4个设备,第二个用PA2,第三个用PA3,第四个用PA4作为片选,我们
跟第二个设备进行通信的时候,只需要把第二个片选选中,比如拉低,其他设备的片选都拉高,这样就实现了一个SPI接口可以连接个SPI设备,战舰开发板上就是通过这种方法来实现的。
(七)时钟信号的相位和极性
时钟信号的相位和极性是通过CR寄存器的 CPOL 和 CPHA两个位确定的。
CPOL:时钟极性,设置在没有数据传输时时钟的空闲状态电平。CPOL置0,SCK引脚在空闲时为低电平,CPOL置1,SCK引脚在空闲时保持高电平。
CPHA:时钟相位 设置时钟信号在第几个边沿数据被采集
CPHA=1时:在时钟信号的第二个边沿
CPOL=1,CPHA=1,
CPOL=1表示时钟信号在没有数据传输时即空闲时的状态为高电平。如果CPHA=1,那么数据就在时钟信号的第二个边沿即上升沿的时候被采集。
CPOL= 0,CPHA=1, CPOL=0表示时钟信号在没有数据传输时即空闲时的状态为低电平。
如果CPHA=1,那么数据就在时钟信号的第二个边沿即下降沿的时候被采集。
CPHA=0时:在时钟信号的第一个边沿
CPOL=1,CPHA=0,
CPOL=1表示时钟信号在没有数据传输时即空闲时的状态为高电平。如果CPHA=1,那么数据就在时钟信号的第一个边沿即下降沿的时候被采集。
CPOL= 0,CPHA=0, CPOL=0表示时钟信号在没有数据传输时即空闲时的状态为低电平。
如果CPHA=1,那么数据就在时钟信号的第一个边沿即上升沿的时候被采集。
为什么要配置这两个参数
因为SPI外设的从机的时钟相位和极性都是有严格要求的。所以我们要根据选择的外设的时钟相位和极性来配置主机的相位和极性。必须要与从机匹配。
(八)数据帧的格式和状态标志
数据帧格式:根据CR1寄存器的LSBFIRST位的设置,数据可以MSB在前也可以LSB在前。
根据CR1寄存器的DEF位,每个数据帧可以是8位或16位。
(九)SPI中断
(十)SPI引脚配置 (3个SPI)
引脚的工作模式设置
引脚必须要按照这个表格配置。
二。SPI寄存器库函数配置
(一)常用寄存器
(二)SPI相关库函数
STM32的SPI接口可以配置为支持SPI协议或者支持I2S音频协议。默认是SPI模式,可以通过软件切换到I2S方式。
常用的函数:
1 void SPI_Init(SPI_TypeDef SPIx, SPI_InitTypeDef
SPI_InitStruct);//SPI的初始化
2 void SPI_Cmd(SPI_TypeDef SPIx, FunctionalState NewState); //SPI使能
3 void SPI_I2S_ITConfig(SPI_TypeDef SPIx, uint8_t SPI_I2S_IT,
FunctionalState NewState); //开启中断
4 void SPI_I2S_DMACmd(SPI_TypeDef SPIx, uint16_t SPI_I2S_DMAReq,
FunctionalState NewState);//通 过DMA传输数据
5 void SPI_I2S_SendData(SPI_TypeDef SPIx, uint16_t Data); //发送数据
6 uint16_t SPI_I2S_ReceiveData(SPI_TypeDef SPIx); //接收数据
7 void SPI_DataSizeConfig(SPI_TypeDef SPIx, uint16_t SPI_DataSize);
//设置数据是8位还是16位
8 其他几个状态函数
void SPI_Init(SPI_TypeDef SPIx, SPI_InitTypeDef
SPI_InitStruct);//SPI的初始化
结构体成员变量比较多,这里我们挑取几个重要的成员变量讲解一下:
第一个参数 SPI_Direction 是用来设置 SPI 的通信方式,可以选择为半双工,全双工,以及串行发和串行收方式,这里我们选择全双工模式
SPI_Direction_2Lines_FullDuplex。
第二个参数 SPI_Mode 用来设置 SPI 的主从模式,这里我们设置为主机模式 SPI_Mode_Master,当然有需要你也可以选择为从机模式
SPI_Mode_Slave。
第三个参数 SPI_DataSiz 为 8 位还是 16 位帧格式选择项,这里我们是 8 位传输,选择SPI_DataSize_8b。
第四个参数 SPI_CPOL 用来设置时钟极性,我们设置串行同步时钟的空闲状态为高电平所以我们选择 SPI_CPOL_High。
第五个参数 SPI_CPHA
用来设置时钟相位,也就是选择在串行同步时钟的第几个跳变沿(上升或下降)数据被采样,可以为第一个或者第二个条边沿采集,这里我们选择第二个跳变沿,所以选择
SPI_CPHA_2Edge
第六个参数 SPI_NSS 设置 NSS 信号由硬件(NSS 管脚)还是软件控制,这里我们通过软件控
制 NSS 关键,而不是硬件自动控制,所以选择 SPI_NSS_Soft。
第七个参数 SPI_BaudRatePrescaler 很关键,就是设置 SPI 波特率预分频值也就是决定 SPI 的时
钟的参数 , 从不分频道 256 分频 8 个可选值,初始化的时候我们选择 256 分频值
SPI_BaudRatePrescaler_256, 传输速度为 36M/256=140625KHz。
第八个参数 SPI_FirstBit 设置数据传输顺序是 MSB 位在前还是 LSB 位在前, ,这里我们选择
SPI_FirstBit_MSB 高位在前。
第九个参数 SPI_CRCPolynomial 是用来设置 CRC 校验多项式,提高通信可靠性,大于 1 即可。
设置好上面 9 个参数,我们就可以初始化 SPI 外设了。
初始化的范例格式为:
SPI_InitTypeDef SPI_InitStructure;
SPI_InitStructureSPI_Direction = SPI_Direction_2Lines_FullDuplex;
//双线双向全双工
SPI_InitStructureSPI_Mode = SPI_Mode_Master; //主 SPI
SPI_InitStructureSPI_DataSize = SPI_DataSize_8b; // SPI 发送接收 8 位帧结构
SPI_InitStructureSPI_CPOL = SPI_CPOL_High;//串行同步时钟的空闲状态为高电平
371
SPI_InitStructureSPI_CPHA = SPI_CPHA_2Edge;//第二个跳变沿数据被采样
SPI_InitStructureSPI_NSS = SPI_NSS_Soft; //NSS 信号由软件控制
SPI_InitStructureSPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //预分频
256
SPI_InitStructureSPI_FirstBit = SPI_FirstBit_MSB; //数据传输从 MSB 位开始
SPI_InitStructureSPI_CRCPolynomial = 7; //CRC 值计算的多项式
SPI_Init(SPI2, &SPI_InitStructure); //根据指定的参数初始化外设 SPIx 寄存器
(三)程序配置步骤
三。W25Qxx配置讲解
(一)电路图
片选用的PB12
W25Q64 是华邦公司推出的大容量SPI FLASH 产品,W25Q64 的容量为 64Mb,该系列还有 W25Q80/16/32
等。ALIENTEK 所选择的 W25Q64 容量为 64Mb,也就是 8M 字节。(1M=1024K)
W25Q64 将 8M 的容量分为 128 个块(Block),每个块大小为 64K 字节,每个块又分为 16个扇区(Sector),每个扇区 4K
个字节。W25Q64 的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25Q64 开辟一个至少 4K 的缓存区,这样对 SRAM
要求比较高,要求芯片必须有 4K 以上 SRAM 才能很好的 *** 作。
W25Q64 的擦写周期多达 10W 次,具有 20 年的数据保存期限,支持电压为 27~36V,W25Q64 支持标准的
SPI,还支持双输出/四输出的 SPI,最大 SPI 时钟可以到 80Mhz(双输出时相当于 160Mhz,四输出时相当于 320M),更多的 W25Q64
的介绍,请参考 W25Q64 的DATASHEET。
在往一个地址写数据之前,要先把这个扇区的数据全部读出来保存在缓存里,然后再把这个扇区擦除,然后在缓存中修改要写的数据,然后再把整个缓存中的数据再重新写入刚才擦除的扇区中。
便于学习和参考再给大家分享些spi 的资料
stm32之SPI通信
>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)