c8051F020寄存器
- 格式:xls
- 大小:139.50 KB
- 文档页数:701
C8051F020 学习笔记——基本概念C8051F020 是完全集成的混合信号系统级芯片,具有64个数字I/O引脚。
下面列出了一些主要特性:1. 高速、流水线结构的8051兼容的CIP-51内核(可达25MIPS)2. 全速、非侵入式的在线系统调试接口(片内)3. 真正12位(C8051F020)100ksps的8通道ADC,带PGA和模拟多路开关。
4. 真正8位500ksps的ADC,带PGA和8通道模拟多路开关5. 两个12位DAC,具有可编程数据更新方式6. 64K字节可在系统编程的FLASH存储器7. 4352(4096+256)字节的片内RAM8. 硬件实现的SPI、SMBus/IIC和两个UART串行接口9. 5个通用的16位定时器10. 具有5个捕捉/比较模块的可编程计数器/定时器阵列11. 片内看门狗定时器、VDD监视器和温度传感器每个MCU都可在工业温度范围(-45C到+85C)内用2.7V-3.6V的电压工作.端口I/O、/RST和JTAG引脚都容许5V的输入信号电压。
C8051F020/2为100脚TQFP 封装。
C8051F020系列器件使用Silicon Labs的专利CIP微控制器内核。
CIP-51内核具有标准8052的所有外设部件,包括5个16位的计数器/定时器、两个全双工UART、256字节内部RAM、128字节特殊功能寄存器(SFR)地址空间及8/4个字节宽的I/O端口。
速度提高:CIP-51采用流水线结构,70%的指令的执行时间为1个或两个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。
CIP-51工作在最大系统时钟频率25MHz,它的峰值性能达到25MIPS。
增加的功能:C8051F020系列MCU对CIP-51内核和外设有几项关键性的改进:扩展的中断系统向CIP-51提供22个中断源(标准8051只有7个中断源),允许大量的模拟和数字外设中断微控制器。
C8051F02X外部存储器接口和IO端口配置C8051F02X外部存储器接口和I/O端口配置摘要:介绍美国Cygnal公司生产的C8051F02X系列单片机的外部存储器接口、I/O端口配置方法和有关注意的问题;在此基础上列举两个关于EMIF、I/O的配置应用。
关键词:C8051F02X EMIF I/O 交叉开关美国Cygnal公司C8051F02X系列单片机是集成在一起芯片上的混合信号系统级单片机。
该单片机具有32/64位数字I/O端口(引脚)、25MIPS高速流水线式8051微控制器内核、64KB在系统可编程Flash存储器、64KB地址的外部存储器接口、4352(4096+256)B片内RAM、各自独立的SPI、SMBUS/I2C和两个UART串行接口等特点。
其最突出的优点就是,通过设置交叉开关寄存器控制片内数字资源映射到外部I/O引脚,这就允许用户根据自己的特定应用,选择通用I/O端口和所需要数字资源。
当然,在设置数字交叉开关寄存器时,应该首先考虑EMIF的配置问题。
其配置不同,将导致单片机通过不同的端口(低或高)访问片外存储器和存储器映像的I/O部件,以及数字交叉开关是否分配外部设备给P0.7(WR)、P0.6(RD)、P0.5(ALE)引脚。
(如图EMIF设置为多路器模式。
)1 EMIF和I/O配置方法1.1 外部存储器接口(EMIF)配置C8051F02X系列MCU有4KB的RAM可以只映射在片内,也可以映射在64KB外部数据存储器地址空间,还可以同时映射到片内和片外(4KB地址以内在片内存储器空间访问,4KB以上经过EMIF访问)三种方式。
对于后两种存储器工作模式,需通过外部存储器接口使用MOVX和DPTR或MOVX和R0(R1)指令访问外部数据存储器和存储器映像的I/O设备。
但是对于高8位地址,必须由外部存储器接口寄存器(EMI0CN)提供;而EMIF可将外部数据存储器接口映射到低端口(P0~P3)(F020/2/3系列)或高端口(P4~P7)(F020/2系列),以及配置为复用模式或非复用模式等。
F020单片机的使用过程当中,有几个重点,一个是定时器和中断,一个是AD和DA,还有一个就是串口通信了。
由于当时设计的时候思想比较混乱,所以直接采用的MAX485作为通信芯片。
对于其具体的实现过程还不是十分的熟悉。
因此,做此专题专门针对与串口通信相关的寄存器做说明。
四,UART0UART0 是一个具有帧错误检测和地址识别硬件的增强型串行口。
UART0 可以工作在全双工异步方式或半双工同步方式,并且支持多处理器通信。
接收数据被暂存于一个保持寄存器中,这就允许UART0 在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。
一个接收覆盖位用于指示新的接收数据已被锁存到接收缓冲器而前一个接收数据尚未被读取。
对UART0 的控制和访问是通过相关的特殊功能寄存器即串行控制寄存器(SCON0)和串行数据缓冲器(SBUF0)来实现的。
一个SBUF0 地址可以访问发送寄存器和接收寄存器。
读操作将自动访问接收寄存器,而写操作自动访问发送寄存器。
UART0 可以工作在查询或中断方式。
UART0 有两个中断源:一个发送中断标志TI0(SCON0.1)(数据字节发送结束时置位)和一个接收中断标志RI0(SCON0.0)(接收完一个数据字节后置位)。
当CPU 转向中断服务程序时硬件不清除UART0 中断标志,中断标志必须用软件清除。
这就允许软件查询UART0 中断的原因(发送完成或接收完成)。
4.1UART0 工作方式UART0 提供四种工作方式(一种同步方式和三种异步方式),通过设置SCON0 寄存器中的配置位选择。
这四种方式提供不同的波特率和通信协议。
下面的表20.1 概述了这四种方式。
表20.1 UART0 工作方式方式同步性波特率时钟数据位起始/停止位0 同步SYSCLK/12 8 无1 异步定时器1 或定时器2 溢出8 一个起始位,一个停止位2 异步SYSCLK/32 或SYSCLK/64 9 一个起始位,一个停止位3 异步定时器1 或定时器2 溢出9 一个起始位,一个停止位方式0 的波特率是系统时钟频率/12。
C8051F020的端口配置C8051F系列单片机有4~8个输入输出端口,每个端口有8个引脚,这些端口有如下特点:1、这些引脚都可以用作通用I/O端口2、它的P0~P3口的每个管脚都通过独立编程还能作为特殊功能的输入或输出,即同一个引脚可以作为片上不同外围功能模块的信号输入输出端口。
3、端口可以通过软件设置改变引脚的输入输出状态配置。
如:弱上拉输入、推拉输出、开漏输出等。
根据端口特点,端口配置过程分为以下几步:1、配置交叉开关(功能选择开关)交叉开关寄存器共有四个分别是XBAR0、XBAR1、XBAR2、XBAR3。
通过对这四个寄存器进行配置,使IO引脚同单片机的数字和模拟片上外围设备进行连接。
2、配置外部存储器接口外部存储器接口(External Memory Interface,EMIF)用于CPU与片上和片外XRAM之间的数据传输通道,通过寄存器EMIOCF和EMIOCN选择和管理端口P0~P3或端口P4~P7实现数据传播。
配置这两个寄存器用以选择端口是否为复用方式(数据与地址线复用)、寄存器工作模式选择及外部存储器页选择。
3、配置IO端口的输入输出模式输入模式分为模拟量输入和数字量输入。
用寄存器PnMDIN配置n=0、1、2、3。
输出模式分为推拉(推挽)式和漏极开路式。
用寄存器PnMDOUT配置4、禁止模拟输入引脚的输出驱动配置模拟输入时P口并没有把输出驱动电路完全关闭,所以不管是哪种输入,推荐的做法是:将相应的输入口的输出模式配置成开漏,并将其输出寄存器置“1”,使其为高阻态,以减少串扰。
5、启动交叉开关单片机刚上电时,因为XBAR2的复位值为0,因而端口P0~P3的输出驱动器被禁止,在XBARE(XBAR2.6)位被设置为逻辑“1”之前,可防止对交叉开关(功能选择)寄存器和其他寄存器写入时,在端口引脚上产生争用。
正确配置交叉开关后,通过将XBARE设置为逻辑“1”,使功能选择开关有效。
C8051F020单片机C8051F020单片机简介单片机(Microcontroller Unit,缩写为MCU)是一种集成了中央处理器(CPU)、片内存储器(RAM和ROM)、输入/输出接口(I/O)、定时器/计数器和其他功能模块的微型计算机系统。
单片机被广泛应用于家电、汽车电子、医疗设备、电力系统等领域。
C8051F020单片机作为Silicon Labs开发的一款8位低功耗单片机,具有较高的性价比和广泛的应用领域。
本文将对C8051F020进行详细介绍。
一、C8051F020单片机的特点与功能C8051F020单片机具有以下特点和功能:1. 架构优势:C8051F020基于Silicon Labs的成熟8位CPU架构,具有高效的指令执行能力和较低的功耗。
2. 丰富的存储器:C8051F020拥有8KB的闪存(Flash)用于程序存储,可以在电源关闭后保持程序不丢失。
此外,它还配备了256字节的数据闪存(Data Flash)和256字节的电子可擦除可编程只读存储器(EPROM)。
3. 综合的外设:C8051F020单片机具有多个通用输入输出引脚(GPIO),可用于各种外设和传感器的连接。
此外,它还提供了模拟与数字转换器(ADC)、串行通信接口(UART、SPI、I2C)以及定时器/计数器等功能。
4. 低功耗设计:C8051F020采用了优化的低功耗设计,具有多种休眠模式和快速唤醒功能,可在长时间运行的场景下降低功耗。
5. 开发工具支持:Silicon Labs提供完善的开发工具套件,包括集成开发环境(IDE)、调试器和仿真器等,方便开发者进行软件开发和调试。
二、C8051F020单片机的应用领域C8051F020单片机广泛应用于以下领域:1. 家电控制:C8051F020可用于控制家电产品,如空调、洗衣机、冰箱等,通过外围电路与其他传感器和执行器进行交互。
2. 工业自动化:C8051F020提供了丰富的通用输入输出引脚和通信接口,可用于工业自动化控制系统,如PLC、工业机器人等。
C8051F020与80C51单片机的异同点C8051F系列单片机是完全集成的混合信号系统级芯片,,具有与8051兼容的CIP-51微控制器内核,采用流水线结构,单周期指令运行速度是8051的12倍,全指令集运行速度是原来的9.5倍。
熟悉NCS-51系列单片机的工程技术人员可以很容易地掌握C8051F的应用技术并能进行软件的移植。
但是不能将8051的程序完全照搬的应用于C8051F单片机中,这是因为两者的内部资源存在较大的差异,必须经过加工才能予以使用。
C8051F020的内部电路包括CIP-51微控制器内核及RAM、ROM、I/O口、定时/计数器、ADC、DAC、PCA(印制电路组装)、SPI(串行外设接口)和SMBus等部件,即把计算机的基本组成单元以及模拟和数字外设集成在一个芯片上,构成一个完整的片上系统(SoC)。
2 相同点C8051F020单片机与80C51系列单片机的指令系统完全一样。
掌握80C51单片机的人员可以很容易地接受C8051F020的应用技术并能完成相应软件的移植。
3 主要硬件不同点3.1 运行速度C8051F020的指令运行速度是一般80C51系列单片机的10倍以上。
因为其CIP-51中采用了流水线处理结构,已经没有了机器周期时序,指令执行的最小时序单位为系统时钟,大部分指令只要1~2个系统周期即可完成。
又由于其时钟系统比80C51的更加完善,有多个时钟源,且时钟源可编程,时钟频率范围为0~25 MHz,当CIP-5l工作在最大系统时钟频率25 MHz时,它的峰值速度可以达到25 MI/s,C8051F020已进入了8位高速单片机行列。
3.2 I/O端口的配置方式C8051F020拥有8个8位的I/O端口,大量减少了外部连线和器件扩展,有利于提高可靠性和抗干扰能力。
其中低4个I/O端口除可作为一般的通用I/O端口外,还可作为其他功能模块的输入或输出引脚,它是通过交叉开关配置寄存器XBR0、XBR1、XBR选择并控制的,它们控制优先权译码选择开关电路如图1所示,可将片内的计数器/定时器、串行总线、硬件中断、比较器输出及其它的数字信号配置为在端口I/O引脚出现,这样用户可以根据自己的特定需要选择所需的数字资源和通用I/O口。
C8051F020在SD卡主控制器设计中的应用1 引言飞机飞行状况监测及数据采集仪。
用于采集飞机试飞时的各种飞行数据,要求大量的存储容量。
它具有功能强、性价比高、安装和使用方便的特点。
采集仪可以根据用户的要求进行配置,对八路传感器输入信号进行调理、采样及数据处理,将测量结果实时动态显示,并通过其报警功能,实现设备故障预警。
采集仪既可以单机独立工作,也可以通过RS-485总线将多达16台采集仪与计算机联机组成在线监测系统。
应用范围包括各种不同类型的电机、风机、泵、齿轮箱、轧机、风力发电机、电站和离心机,以及各种机械设备常见故障的状态监测等。
2 硬件功能原理与设计SD卡的外形和接口。
根据SD卡与主控制器的通信协议不同,SD卡对外提供两种访问模式:SD模式和SPI模式。
所用通信模式不同,SD卡引脚的功能也不同,具体引脚功能如表1所示。
在具体通信过程中,主机只能选择其中一种通信模式。
通信模式的选择对于主控制器来说是透明的,卡会自动检测复位命令的通信协议模式,而且通信模式一旦选定,系统在通电情况下不能改变。
SD模式下,主控制器使用SD总线访问SD卡。
可通常的单片机没有硬件SD总线,尽管可以借助通用口线用软件仿真,但访问速度较低,还要大量占用CPU时间,而单片机多具有SPI总线。
注:S--电源;I--输入;O--推挽输出;PP--推挽I/O。
在SPI总线模式下。
CS为主控制器向卡发送的片选信号,SCLK为主控制器向卡发送的时钟信号。
DI(DataIn)为主控制器向卡发送的单向数据信号,DO(DataOut)为卡向主控制器发送的单向数据信号。
SD卡的内部结构,还具有卡接口控制器、寄存器以及SD和SPI两种模式的对外接口等。
外部主控制器访问卡的外部信号线并不与存储器单元直接相连,而是通过卡的接口控制器与存储器单元接口相连。
卡内存储单元的读,擦,写由卡接口控制器根据主控制器的命令自动处理完成,而主控制器无须知道卡内是如何操作、管理存储单元的。
单片机C8051F020的初始化设置单片机C8051F020的初始化设置在喧闹的世界中,能静下心来研究技术也是很有趣的事情。
好多年没作些具体的技术工作了,幸好领导给分配一个单片机任务。
现在把研究的技术写下来,与朋友们分享。
研究C8051F020编程不能离开初始化设置。
对于简单程序,读技术手册,将用到的I/O口,中断,串口,晶振等正确初试化后,已经成功一半了。
晶振需要初始化,C8051F020有内部晶振,精度不高,一般电路都使用外部晶振。
初始化晶振主要是OSCXCN和OSCICN两个寄存器的设置。
具体初始化代码可由Silicon的配置程序自动生成:void Oscillator_Init(){int i = 0;OSCXCN = 0x67;for (i = 0; i < 3000; i++);while ((OSCXCN & 0x80) == 0);OSCICN = 0x08;}上面程序包括了晶振初始化的全部过程:1、使能外部振荡器:OSCXCN = 0x67;2、等待至少1m钟,等待外部振荡器起稳:for (i = 0; i < 3000; i++);3、查询OSCXCN的第八位XTLVLD是否为1,1表明外部振荡器起稳:while ((OSCXCN & 0x80) == 0);4、关内部晶振,切换到外部晶振 OSCICN = 0x08;而同事们的设置是OSCICN= 0x88;应该是使用外部振荡器,但是内部振荡器也没关,这样MCU耗能高些。
串口0(UART0)也需要配置:void UART0_Init (void){SCON0 = 0x50; // SCON0: 模式1,可接收,8位串口TMOD = 0x20; // TMOD: 定时器1, 模式2, 8位自动重载TH1 = -(SYSCLK/BAUDRATE/16); // 设置定时器1TR1 = 1; // 开始定时CKCON |= 0x10; // 定时器用SYSCLK作基准时间PCON |= 0x80; // 禁止UART0波特率/2}SCON0是UART0控制寄存器,用来选择传输模式。
基于C8051F020的PWM输出频率分析第24卷增刊数据采集与处理V01.24No?SZ009年10⽉JournalofDataAcquisition&Processingoct.2009引⽂章编号:1004—9037(2009)增刊⼀0229⼀04基于C8051F020的PWM输出频率分析黄慧1张庆武2殷兴辉1(1.河海⼤学计算机及信息⼯程学院,南京,210098;2.南京邮电⼤学通信与信息⼯程学院,南京,210003)摘要:基于C805lF020芯⽚,研究了PCA模块的PWM信号产⽣原理以及软件实现的⽅法,并通过实验⽅法针对PCA模块,提出了PwM输出频率与PCA计数器/定时器时基的关系公式,结合计算与实验观察,分析了在不同设定下输出波形的频率范围以及频率与占空⽐的准确性问题。
实验结果表明,基于C8051F020产⽣的PWM信号具有控制精度⾼,响应快的优点,适于⽇常⽣活、⼯业⽣产和科学研究领域对控制系统的需要。
关键词:C8051F020单⽚机;PWM;可编程计数阵列中图分类号:TP368⽂献标识码:A‘FrequencyRangeandAccuracyAnalysisOfC8051F020⼀BasedPWMoutput.H“⼝挖.g.H“i1,Z^⼝挖gQi⽵g训“2,YI以Xi咒l乎^“i1(1.CollegeofComputerandlnformationEngineering,HohaiUniversity,Nanjing,210098,China;2.CollegeofCommunicationandInformationEngineering,NanjingUniVersityofPosts&Telecommunications,Nanjing,210003,China)Abstract:Theprincipleforthepulsewidthmodulation(PWM)signalofPCAmoduleisstudiedandthemethodsofsoftwaredesignonC8051F020chiparepresented.Furthermore,therela—tionshipexpressionsbetweenthePWMoutputfrequencyandthePCAcounter/timerbasefofthePCAmodulearededucedbytheexperiment.Combinedwithcomputationalandexperimen—talobservation,therangesofthewaveformfrequencyindifferentsettingareanalyzed,aswellastheaccuracyofthefrequencyandthedutycycle.ExperimentalresultsshowthattheC8051F020—basedPWMsignalhastheadvantagesofhighprecisionandfastresponse.Thus'itissuitablefordailylife,industrialproductionandscientificresearchinthecontrolsystemfieId.Keywords;C8051F020MCU;pulsewidthmodulation(PWM);PCAC805lF系列单⽚机是集成的混合信号⽚上系统(SOC),具有与MCS⼀5l内核及指令集完全兼容的微控制器,除了具有标准8051的数字外设部件外,⽚内还集成了数据采集和控制系统中常⽤的模拟部件和其他数字外设及功能部件。
收稿日期:2007-04-24作者简介:蔡晓雯(1981—),女,江西省玉山县人,助教,硕士研究生,主要研究方向为智能控制与智能信息处理;杨恢先(1963—),男,湖南省益阳市人,教授,硕士生导师,主要研究方向为数字控制技术及应用、单片机应用与开发。
基于C8051F020的外部存储器扩展蔡晓雯,杨恢先,李正义,蒋海军(湘潭大学材料与光电物理学院,湖南湘潭 411105)摘要:针对Cygnal 公司的C8051F020单片机内部数据存储器容量不足的问题,采用一种NAND 闪速存储器K9F2808UOC为C8051F020单片机扩展大容量数据存储器的设计方案,从C8051F020单片机内部结构和K9F2808UOC 的外部引脚功能出发,设计了C8051F020与K9F2808UOC 的硬件接口电路和擦除、写、读程序的编写方法及流程图,实现了大容量的外部数据扩展。
关键词:接口技术;C8051F020;K9F2808UOC 中图分类号:TP368.2 文献标识码:B 文章编号:1000-8829(2008)03-0052-03Externa l M em ory I n terface D esi gn of C 8051F 020CA I Xiao 2wen,Y ANG Hui 2xian,L I Zheng 2yi,J IANG Hai 2jun(Faculty ofMaterial,Op t oelectr onics and Physics,Xiangtan University,Xiangtan 411105,China )Abstract:Against the lack of internal data me mory capacity in C8051F020f or Cygnal Company,a new design t o supp ly high density data memory for C8051F020m icr ocontr oller by using NAND flash me mory K9F28082UOC is intr oduced .Fr om internal structure of C8051F020and external p in functi on of K9F28082UOC,the hard ware interface circuit of C8051F020and K9F28082UOC is de 2signed,the methods of p reparati on and fl ow charts of erasure,writing and reading are als o designed .The extensi on of data memory is realized .Key words:interface technol ogy;C8051F020;K9F2808UOC 在嵌入式系统低端的单片机领域,80C51系列一直扮演着一个重要角色。
C8051F的每个I/O口引脚都可以被配置为推挽或漏极开路输出。
同时引入了数字交叉开关,允许将内部数字系统资源映射到P0、P1、P2和P3 的端口引脚。
通过设置交叉开关寄存器可将片内的计数器/定时器、串行总线、硬件中断、ADC转换启动输入、比较器输出以及微控制器内部的其他数字信号配置为出现在端口I/O引脚。
必须在访问这些外设的I/O之前配置和允许交叉开关。
注意的问题:1.低端口既能按位寻址,也可以按字节寻址;高端口只能按字节寻址。
2.没有被分配到的引脚作为一般的数字通用I/O口。
3.P1口还可以用作ADC1的模拟输入。
4.P0MDOUT~P3MDOUT用于控制I/O端口每一位的输出状态。
5.EMIF(外部存储器接口)是用于CPU与片外XRAM之间的数据传输通道,通过寄存器EMI0CF 和EMI0CN选择和管理端口实现数据的传输。
6.为了能访问片外存储器空间,必须设置EMI0CN寄存器的内容为片外存储器的空间页地址。
7.如果把外部存储器接口(EMIF)设置在高端口则首先要把EMI0CF的PRTSEL位设置为1,选择高端口,同时选择地址的复用或非复用方式,在把XBR的外部寄存器的EMIFLE位设置为0。
8.复用方式配置:在复用方式下,数据总线和地址总线的第8位共用相同的引脚(AD0~AD7)。
在该方式下,要用一个外部锁存器(如 74HC373或相同功能的锁存器)保持RAM地址的低8位。
外部锁存器由ALE(地址锁存使能)信号控制,ALE信号由外部存储器接口逻辑驱动。
9.在总线复用时,需要把地址数据复用端口配置为漏极开路。
10.ALE高/低脉宽占1个SYSCLK周期,地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期,EMIF工作在地址/数据复用方式,即:EMI0CF |= 0x2c;EMI0TC |= 0x2c;配置EMIF 的步骤是:先将EMIF选到低端口或高端口;然后选择复用方式或非复用方式;再选择存储器的模式(只用片内存储器、不带块选择的分片方式、带块选择的分片方式或只用片外存储器);然后设置EMI0TC;最后通过寄存器PnMDOUT和P74OUT选择所期望的相关端口的输出方式。
C8051F020是Silicon Laboratories公司的混合信号 ISP FLASH 微控制器。
具有丰富的片内数字资源和模拟外设以及64KB可在系统编程Flash存储器。
主要数据如下:1、ƒ 最大100ksps 12位 ADC0 可多达8 个外部输入;可编程为单端输入或差分输入2、最大500ksps 8 位 ADC2 可多达8 个外部输入;可编程为单端输入或差分输入3、两个12位DAC 可以同步输出,用于产生无抖动波形4、两个模拟比较器5、内部电压基准以及精确的VDD监视器和欠压检测器6、片内JTAG 调试和边界扫描提供全速、非侵入式的在线调试(对学习单片机很重要要)−支持断点、单步、观察点、堆栈监视器;可以观察/ 修改存储器和寄存器−比使用仿真芯片、目标仿真头和仿真插座的仿真系统有更好的性能−符合IEEE1149.1 边界扫描标准−廉价而完全的开发套件7、高速8051微控制器内核−流水线指令结构;70% 的指令的执行时间为一个或两个系统时钟周期−速度可达25MIPS(时钟频率为25MHz时)− 22个矢量中断源8、存储器− 4352字节内部数据RAM(4K + 256 )− 64K 字节FLASH存储器;可以在系统编程,扇区大小为512 字节−外部64K 字节数据存储器接口(可编程为复用方式或非复用方式)9、数字外设− 8 个字节宽的端口I/O(C8051F020/2)或4 个字节宽的端口I/O (C8051F021/3);所有口线均耐5V电压−可同时使用的硬件SMBus(I2CTM兼容)、SPITM及两个UART 串口−可编程的16位计数器/ 定时器阵列,有5 个捕捉/ 比较模块//可用于产生PWM − 5 个通用16位计数器/ 定时器−专用的看门狗定时器;双向复位引脚时钟源−内部可编程振荡器:2-16MHz−外部振荡器:晶体、RC、C、或外部时钟−实时时钟方式(用定时器3 或PCA);10、供电电压…………………………2.7V - 3.6V−典型工作电流:10mA @ 20MHz−多种节电休眠和停机方式11、100 脚TQFP 封装C8051F020与STC89C52相比,C8051F020具有更丰富的片内资源,更大的FLASH程序存储空间,更加强大的功能。
三, 关于ADC0(ADC在PIC里面总算是完整的弄过一次了,但是基础还是很薄弱,尤其是转换时间的控制,而面对F020的ADC0,相关寄存器较多,所以做一个专题)C8051F020/1 的ADC0 子系统包括一个9 通道的可编程模拟多路选择器(AMUX0),一个可编程增益放大器(PGA0)和一个100ksps、12 位分辨率的逐次逼近寄存器型ADC,(F020的ADC0只有一个逐次逼近的ADC,它能实现9路输入是因为它有一个9通道的多路选择器(AMUX0)))。
片上的特殊功能寄存器(简称SFR)有11个与ADC0的控制相关,它们是:AMUX0SL-AMUX0通道选择寄存器;AMX0CF-AMUX0配置寄存器;ADC0CF-ADC0配置寄存器;ADC0CN-ADC0控制寄存器;ADC0H-ADC0数据字MSB寄存器;ADC0L-ADC0数据字LSB寄存器;ADC0GTH-ADC0下限数据高字节寄存器;ADC0GTL-ADC0下限数据低字节寄存器;ADC0LTH-ADC0上限数据高字节寄存器;ADC0LTL-ADC0上限数据低字节寄存器;REF0CN-基准电压控制寄存器。
3.1 ADC0工作方式ADC0 的最高转换速度为100ksps,其转换时钟来源于系统时钟分频,分频值保存在寄存器ADC0CF 的ADCSC 位。
3.1.1 启动转换有4 种转换启动方式,由ADC0CN 中的ADC0 启动转换方式位(AD0CM1,AD0CM0)的状态决定。
转换触发源有:1.向ADC0CN 的AD0BUSY 位写1;2.定时器3 溢出(即定时的连续转换);3.外部ADC 转换启动信号的上升沿,CNVSTR;4.定时器2 溢出(即定时的连续转换)。
备注:(关于ADC0的开始转换,1,可以在软件里面设置,直接给AD0BUSY写1,然后直接输出转换结果。
这种方式需要不断的扫描,不断的输出结果,似乎有点费劲。
如果采用第三种方式,即用一个开关来控制ADC的启动,那样,在没有按键的情况下,ADC不需要扫描,或许可以用第二种或者第四种方式,我用一个按键来启动定时器的开始计数,技术满之后再启动ADC的转换。
C8051F020单片机及其在双主机转速同步控制系统中的应用汝福兴;崔益烽;苏生;俞宾;周冠泽;龚征华【摘要】C8051F020单片机是完全集成的混合信号系统级MCU芯片.双主机转速同步控制系统利用它的内置两路串行通信接口(UART0/1),并使用双差分驱动接受器SN65C1168,完成通信数据信号电平转换,组成串行通信控制网络,在控制子系统之间以及控制子系统与主机电控单元之间进行控制数据交互,实现左右两台主机转速的远程同步控制.【期刊名称】《船舶》【年(卷),期】2016(027)006【总页数】10页(P66-75)【关键词】C8051F020单片机;双主机转速同步控制系统;串行通信;控制子系统【作者】汝福兴;崔益烽;苏生;俞宾;周冠泽;龚征华【作者单位】常州玻璃钢造船厂有限公司常州213127;陆军车船军代局驻上海地区军代室上海200083;常州玻璃钢造船厂有限公司常州213127;中国船舶及海洋工程设计研究院上海200011;中国船舶及海洋工程设计研究院上海200011;中国船舶及海洋工程设计研究院上海200011【正文语种】中文【中图分类】U665.14目前,采用双主机作为推进系统动力装置的中高速喷水推进船艇在搜救、执法、巡逻等对于快速性和操纵性具有较高要求的特种工作领域,获得日益广泛的推广和应用。
对于这类船艇,无论从总体性能还是操纵安全性以及人机操纵舒适性,都要求对主机和喷水推进装置方向舵及倒航斗角度进行联合控制,因此对于双主机转速的同步控制具有很高的要求。
本文所述高速执法工作艇平台,动力装置采用两台上柴D683ZLCA8B柴油机,单台持续功率转速为2 330 r/min(234.5 kW),通过带动两台喷水推进器叶轮高速转动(本船喷水推进器采用通气阀实现主机动力结合,故未设置齿轮箱),产生喷射水流,实现船艇高速航行。
该主机配有MT-923型电控单元,可以通过RS-422数字通信接口接收/发送转速控制/反馈数据,并输出直流电机控制信号驱动主机机械调速器实现转速调整。
三, 关于ADC0(ADC在PIC里面总算是完整的弄过一次了,但是基础还是很薄弱,尤其是转换时间的控制,而面对F020的ADC0,相关寄存器较多,所以做一个专题)C8051F020/1 的ADC0 子系统包括一个9 通道的可编程模拟多路选择器(AMUX0),一个可编程增益放大器(PGA0)和一个100ksps、12 位分辨率的逐次逼近寄存器型ADC,(F020的ADC0只有一个逐次逼近的ADC,它能实现9路输入是因为它有一个9通道的多路选择器(AMUX0)))。
片上的特殊功能寄存器(简称SFR)有11个与ADC0的控制相关,它们是:AMUX0SL-AMUX0通道选择寄存器;AMX0CF-AMUX0配置寄存器;ADC0CF-ADC0配置寄存器;ADC0CN-ADC0控制寄存器;ADC0H-ADC0数据字MSB寄存器;ADC0L-ADC0数据字LSB寄存器;ADC0GTH-ADC0下限数据高字节寄存器;ADC0GTL-ADC0下限数据低字节寄存器;ADC0LTH-ADC0上限数据高字节寄存器;ADC0LTL-ADC0上限数据低字节寄存器;REF0CN-基准电压控制寄存器。
3.1 ADC0工作方式ADC0 的最高转换速度为100ksps,其转换时钟来源于系统时钟分频,分频值保存在寄存器ADC0CF 的ADCSC 位。
3.1.1 启动转换有4 种转换启动方式,由ADC0CN 中的ADC0 启动转换方式位(AD0CM1,AD0CM0)的状态决定。
转换触发源有:1.向ADC0CN 的AD0BUSY 位写1;2.定时器3 溢出(即定时的连续转换);3.外部ADC 转换启动信号的上升沿,CNVSTR;4.定时器2 溢出(即定时的连续转换)。
备注:(关于ADC0的开始转换,1,可以在软件里面设置,直接给AD0BUSY写1,然后直接输出转换结果。
这种方式需要不断的扫描,不断的输出结果,似乎有点费劲。
如果采用第三种方式,即用一个开关来控制ADC的启动,那样,在没有按键的情况下,ADC不需要扫描,或许可以用第二种或者第四种方式,我用一个按键来启动定时器的开始计数,技术满之后再启动ADC的转换。
此程序实验板已调试通过/*此程序接收UR0寄存器地址读取此寄存器内容并从UR0口发出,以数组方式进行(按寄存器读发)*//*主意事项:1、作为输入脚一定要设置成推挽方式2、SPI只有发时才有时钟,所以读数据时一定要先发0以激发时钟信号。
/**********************************************文件描述:三相电测量上报功能说明:测量A TT7022B完成PCF8563上报定时(需校时)FM24C256转换数据存储UART0口用于RS232读数据UART1控制无线模块上报数据创建:2006年12月5日/**********************************函数:main.*入口:无*出口:无*功能说明:接收UART端口命令执行读A TT7022B的数据进行处理、存储和回发数据********************************///*****************************//包含的文件//******************************#include <c8051f020.h>#include <main.h>#include <intrins.h>//*************************************************//函数:init_sysclk(void)//功能:时钟初始化//入口:无//出口:无//说明:使用外部时钟12M//*************************************************void init_sysclk (void){uint i=0;OSCXCN=0x67; //external oscillator with 12MHz crystalfor(i=0;i<256;i++); // XTLVLD blankingwhile(!(OSCXCN & 0x80)); // Wait for crystal osc. to settleOSCICN=0x88; //时钟丢失检测,选择外部时钟CKCON = 0x00; //时钟分频}/*********************************函数:void enable_wdog(void)void disable_wdog(void)功能:使能、禁止wdog入口:无出口:无说明:********************************/void enable_wdog(void){WDTCN=0xA5;//允许看门狗定时器工作}void disable_wdog(void) //禁止看门狗定时器工作{WDTCN=0xDE;WDTCN=0xAD;}/***********************************函数:void init_ioport()功能:端口配置及端口位定义入口:无出口:无说明:*************************************/void init_ioport(){XBR0=0x07; //TXD0-P0.0 RXD0-P0.1,SPI_SCK-P0.2,SPI_MISO-P0.3//SPI_MOSI-P0.4,SPI_NSS-P0.5,SDA-P0.6,SCL-P0.7, XBR1=0X10; //INT1使能INT1--P1.2XBR2=0x44; //端口I/O弱上拉允许,TX1-P1.0,RXD-P1.1交叉开关允许P0MDOUT=0x08; //端口0输出方式寄存器:0--漏极开路P1MDIN=0XFF; //端口1输入方式寄存器:0--配置为数字输入P1MDOUT=0x00; //端口1输出方式寄存器,0--漏极开路P1=0xff;P2MDOUT=0x00; //端口2输出方式寄存器:0--漏极开路P2=0xff;P3MDOUT=0X00; //端口3输出方式寄存器:0--漏极开路P3=0xff;P74OUT=0x00; //端口7-4输出方式寄存器:0--漏极开路P4=0xff;P5=0xff;P6=0xff;P7=0xff;}//--------------------------------------------------------------//函数:void Delay_ms (unsigned ms)//功能:实现延时功能Timer0_ms//---------------------------------------------------------------///* Configure Timer0 to delay <ms> */void Delay_ms (unsigned ms){uchar i; // millisecond counterTCON &= ~0x30; // STOP Timer0 and clear overflow flag TMOD |= 0x01; // configure Timer0 to 16-bit mode CKCON |= 0x08; // Timer0 counts SYSCLKsfor (i = 0; i < ms; i++) // count milliseconds{TR0 = 0; // STOP Timer0TH0 = (-SYSCLK/1000) >> 8; // set Timer0 to overflow in 1msTL0 = -SYSCLK/1000;TR0 = 1; // START Timer0while (TF0 == 0); // wait for overflowTF0 = 0; // clear overflow indicator }}//-------------------------------------------------------//函数:void Delay_us (unsigned us)//功能:实现延时功能Timer0_us//-------------------------------------------------------///* Configure Timer0 to delay <us>*/void Delay_us (unsigned us){uchar i; // microseconds counterTCON &= ~0x30; // STOP Timer0 and clear overflow flagTMOD |= 0x01; // configure Timer0 to 16-bit modeCKCON |= 0x08; // Timer0 counts SYSCLKs for (i = 0; i < us; i++) // count microseconds{TR0 = 0; // STOP Timer0TH0 = (-SYSCLK/1000000) >> 8; // set Timer0 to overflow in 1usTL0 = -SYSCLK/1000000;TR0 = 1; // START Timer0while (TF0 == 0); // wait for overflowTF0 = 0; // clear overflow indicator}}//***************************************//函数:unsigned char my_add(uchar my_add)//功能:读开关状态确定子地址//入口:无//出口:子地址//说明:子地址存于myadd中(即设备号)//****************************************void my_add(void){P74OUT |=0XD0;myadd =P5;}//******************************************//函数:void jiaob(A TT_JB[])//功能:写校表寄存器//说明:UART口接收校表时间并存于FM24C256中//*****************************************void jiaob (void){}main()disable_wdog(); //关看门狗init_sysclk (); //时钟初始化init_ioport(); //交叉开关配置my_add(); //读设备子地址设置UART0_Init(); //UART0初始化SPI0_Init ();EX1= 1; //开INT1EA = 1; //开中断SPIEN=1;uart0_flag=0;while(1){if(uart0_flag){uart0_flag=0;A TT_Read (ur0_rxd[0]);m=&ur0_rxd[0];txd_string(m,3);}}}//---------判断本设备命令及命令内容执行命令-------//-----------------------------------------------------------------------------// SPI0_Init//-----------------------------------------------------------------------------//// Configure SPI0 for 8-bit, 200K SCK, Master mode, data// sampled on SCK 2st edge.//void SPI0_Init (void){SPI0CFG = 0x87; // data sampled on SCK 2st edge// 8-bit data words,MSB 1st SPI0CN = 0x02; // Master mode; SPI enabled; flags// clearedSPI0CKR = 0x2F; // SPI clock <= 200kHz (limited by// EEPROM spec.)EIE1 &= 0XFE; // spi关//开漏}//-----------------------------------------------------------------------------// A TT_Read//-----------------------------------------------------------------------------//// This routine reads and returns a single A TT7022 byte whose address is// given in <Addr>.//void A TT_Read (uchar x){uchar n=0;A TT_CS = 0; // select att7022SPIF = 0;Delay_us (1); // wait at least 250ns (CS setup time) SPI0DA T = x;while (SPIF==0);Delay_us (3);SPIF = 0;for(n=0;n<=3;n++){SPI0DA T = 0;while (SPIF==0);SPIF = 0;ur0_rxd[n]= SPI0DA T; // read data from SPI} // read data from SPIDelay_us (1); // wait at least 250ns (CS hold time)A TT_CS = 1; // de-select EEPROMDelay_us (1); // wait at least 500ns (CS disable time) }//-----------------------------------------------------------------------------// A TT_Write//-----------------------------------------------------------------------------//void A TT_Write (uchar A TT_W ADD, uchar att_wd[]){uchar n;A TT_WADD = A TT_W|A TT_W_ADD;A TT_CS = 0; // select att7022Delay_us (1); // wait at least 250ns (CS setup time)// transmit Write opcodeSPIF = 0;SPI0DA T = A TT_W|A TT_W_ADD;while (SPIF == 0);SPIF = 0;SPI0DA T = att_wd[n];while (SPIF == 0);n = ++n;SPIF = 0;SPI0DA T = att_wd[n];while (SPIF == 0);n = ++n;SPIF = 0;SPI0DA T = att_wd[n];while (SPIF == 0);Delay_us (1); // wait at least 250ns (CS hold time)A TT_CS = 1;}//-----------------------------------------------------//串口初始化//--------------------------------------------------------void UART0_Init(void){SCON0 = 0x50; //串口方式1,波特率可变PCON |= 0x00; //SMOD = 0TMOD = 0x20; //选择T1方式2,TH1 = 0xe8; //T1初值,TL1 = 0xe8;ES0 = 1; //UART0中断开启TR1 = 1; //启动定时器T1}//----------------------------------------------------------//发送单个字符//---------------------------------------------------------void txd_char(unsigned char ch){SBUF0 = ch; //送入缓冲区while(TI0 == 0); //等待发送完毕TI0 = 0; //软件清零}//-----------------------------------------------------//发送字符串,调用Send_Char() len字符串长度//----------------------------------------------------void txd_string(unsigned char * str,unsigned char len){unsigned char k = 0;do{txd_char(*(str+k) );k++;} while(k < len);}//--------------------------------------------------------//UART0中断服务程序. 接收字符//--------------------------------------------------------void uart0_isr(void) interrupt 4 using 1{unsigned char rxch;rxd_str=0;if(RI0) //中断标志RI0=1 数据完整接收{RI0 = 0;uart0_flag=1;//软件清零rxch = SBUF0; //读缓冲ur0_rxd[rxd_str] = rxch; //存入数组,供发送}}。