《C8051F020训练项目指导书.doc》由会员分享,可在线阅读,更多相关《C8051F020训练项目指导书.doc(95页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 长沙理工大学创新实验室1C8051F020实验指导书实验指导书电气与信息工程学院电工电子实验中心电气与信息工程学院电工电子实验中心(2007 年年 7 月月 5 日)日)长沙理工大学创新实验室2目录目录- 2 前言 -3 第一章 训练训练板组成与结构-4 1.1 训练设备的组成 -4 1.2 Silicon Labs C8051F 单片机开发工具简-4 1.2.1 开发工具概述-4 1.2.2 开发工具主要技术指标-5 1.2.3 IDE 软件运行环境-5 1.2.4 开发工具与 PC 机硬 件连接-5 1.3 C8051F020 CPU 板简介-5 1.3.1 C8051F020 CPU
2、板概述 - 5 1.3.2 C8051F020 片上系统单片机片内资源 -5 1.4.1 训练资源介绍: - 6 1.4 训练板组成与结构 -6 1.4.2 训练板原理图: -6 1.4.3 训练板上 IO 口分布图:-7 第 二章 C8051F020 基本训练-10 训练一: 读写片内 4KXRAM - 10 训练二 IO 口输入输出训练 -10 训练三 I/O 口演奏电子音乐 - 11 训练四 定时器 T3 训练 - 17 训练五 比较器训练 -19 训练六 中断 INT6 与中断 INT7 训练 - 21 训练七 PCA0 测量方波的周期 - 22 训练八 PCA1 输出 8 位 PWM
3、- 27 训练九 12 位 ADC0 训练 - 29 训练十 UART0 方式 0 实现同步串行移位通信-32 训练十一 DAC0 输出方波锯齿波正弦波 -34 第 三章 C8051F 扩展训练 -37 训练十二 RS-232 异步串行通信 -37 训练十三 RS-RS-485 异步串行通信 -40 训练十四 SPI 总线- SST25VF16 存储芯片读写 - 43 实验十五 SMBUS 总线-AT24C02 训练-50 训练十六 ZLG7290 键盘显示 -56长沙理工大学创新实验室3训练十七 LCD 显示 -63 训练十八 实时时钟 PCF8563 -69 训练十九 PS2 键盘 -76
4、 训练二十 红外遥控-82前言前言MCS-51 单片机及其衍生产品在我国乃至世界范围获得了非常广泛的应用,尤其是在我国,大部分大专院校都采用 MCS-51 单片机作为教学机型,大部分单片机系统工程师都熟悉 MCS-51 单片机。随着一些高集成度、高性能的 8 位和 16 位 RISC 单片机的推出,基于标准 8051 内核的单片机正面临着退出市场的境地。因此一些半导体公司开始对传统 8051 内核进行大的改造,主要是提高速度和增加片内模拟和数字外设,以期大幅提高单片机的整体性能。Silicon Labs 集成产品公司推出的 C8051F 单片机的出现令业界人士耳目一新,使广大单片机系统设计人员
5、看到了 51 单片机新的曙光。MCS-51 单片机引入教学已达 10 年之久,大家一直期盼着有更先进的单片机引入教学,C8051F 已成为事实上 51 的升级换代产品,那么必然会成为经典单片机教学的方向,做设备可为大专院校教学训练课提供多项训练,使得学生和单片机的初学者建立单片机系统概念,并可完成基础应用的培训,使学生掌握 C8051F 的基本应用。本训练设备充分利用了 C8051F 的片内资源,可做为研究生教学选修课。也可起到为本科生提供了解当前测控领域前沿技术的引导作用。长沙理工大学创新实验室4第一章:训练设备简介第一章:训练设备简介1.1 训练设备的组成训练设备的组成训练箱由 C8051
6、F020 CPU 板和系统训练板二部分组成,应用该设备可进 行片上系统单片机较典型应用的训练,请参见以下介绍。1.2 Silicon Labs C8051F 单片机开发工具简介单片机开发工具简介1.2.1 开发工具概述开发工具概述Silicon Labs 的开发工具实质上就是计算机 IDE 调试环境软件及计算机核心板核心板电源电源串口串口跑马灯模块跑马灯模块液晶模块液晶模块61LV256PCF8563AT24C0225VF16数码管模块数码管模块ZLG7290IO 口口4X5 键盘键盘扬声器扬声器PS2长沙理工大学创新实验室5USB 到 C8051F 单片机 JTAG 口的协议转换器(UEC5
7、)的组合(此部分电路已经 集成到系统训练板上)。SiliconLabs C8051F 系列所有的单片机片内均设计有调 试电路,该调试电路通过边界扫描方式获取单片机片内信息,通过 4 线的 JTAG 接口与开发工具连接以便于进行对单片机在片编程调试。训练板中的 C8051F020 CPU 板上的单片机为 C8051F 系列中的 F020。适配器(UEC5)一端 与计算机相连,另一端与 C8051F 单片机 JTAG 口相连,应用 SiliconLabs 提 供的 IDE 调试环境或 Keil 的 uVision2 调试环境就可以进行非侵入式、全速的 在系统编程(ISP)和调试。Silicon L
8、abs 开发工具支持观察和修改存储器和寄存 器支持断点、观察点、堆栈指示器、单步、运行和停止命令。调试时不需要额 外的目标 RAM、程序存储器、定时器或通信通道,并且所有的模拟和数字外设 都正常工作。1.2.2 开发工具主要技术指标开发工具主要技术指标 支持的目标系统:所有 C8051Fxxx 系列单片机。 系统时钟:最大可达 25Mhz。 通过 USB 接口与 PC 机连接。 支持汇编语言和 C51 源代码级调试。 第三方工具支持(Keil C) 。1.2.3 IDE 软件运行环境软件运行环境 要求 PC 机能够运行开发工具软件并能与串行适配器通信。对 PC 机有 如 下系统要求: Wind
9、ows 95/98/Me/NT/2000/XP 操作系统 32Mb RAM 40Mb 自由硬盘空间 空闲的 USB 口 1.2.4 开发工具与开发工具与 PC 机硬件连接机硬件连接 将 USB 串行电缆的一端与训练箱的 USB 连接; 连接 USB 串行电缆的另一端到 PC; 给目标系统上电; 插入 CD 并运行“SETUP.EXE” ,将 IDE 软件安装到您的 PC 机; 在 PC 机的开始菜单的“程序”项中选择 Silicon Labs IDE 点击 Silicon Labs 图标,运行 IDE 软件。1.3 C8051F020 CPU 板简介板简介1.3.1 C8051F020 CPU
10、 板概述板概述C8051F020 CPU 板是为了便于安装而设计的;C8051F020 CPU 板是将 C8051F020 的所有引脚(100 个引脚)引到五个单排针;该五组单排针可与不 同用户设计的应用系统连接,如在该训练系统上将和系统训练板连接。1.3.2 C8051F020 片上系统单片机片内资源片上系统单片机片内资源、模拟外设长沙理工大学创新实验室6(1) 逐次逼近型 8 路 12 位 ADC0 转换速率最大 100ksps 可编程增益放大器 PGA温度传感器 (2) 8 路 8 位 ADC1 输入与 P1 口复用转换速率 500ksps 可编程增益放大器 PGA (3) 两个 12
11、位 DAC (4) 两个模拟电压比较器 (5) 电压基准内部提供 2.43V 外部基准可输入 (6) 精确的 VDD 监视器、高速 8051 微控制器内核流水线式指令结构速度可达 25MIPS22 个矢量中 断源 、存储器片内 4352 字节数据 RAM64KB Flash 程序存储器可作非易失性存储 外部可扩展的 64KB 数据存储器接口 、数字外设 8 个 8 位的端口 I/OI2C、SPI、2 个增强型 UART 串口可编程的 16 位计数器/定时器阵列(PCA)5 个通用 16 位计数器/定时器专用的看门狗 WDT 更详细资料可参见 Silicon Labs C8051F02x dat
12、asheet1.4 训练板组成与结构训练板组成与结构1.4.1 训练资源介绍:训练资源介绍:本训练板由电源.串口通信.跑马灯. 红外通信.126X64 的液晶显示.PS/2 键盘. 实时时钟.外部存储器扩展.ZLG7290 键盘显示.IIC 总线.SPI 总线.蜂鸣器. AD.DA.以及外部 IO 扩展口等 15 个基本模块组成.训练所用的芯片资料见 随本指导书资料.1.4.2 训练板原理图:训练板原理图:长沙理工大学创新实验室71.4.3 训练板上训练板上 IO 口分布图:口分布图:长沙理工大学创新实验室8第第 二章二章 C8051F020 基本训练基本训练训练一:训练一: 读写片内读写片内
13、 4KXRAM1 训练目的训练目的:(1)学习使用 Silicon Labs 集成开发环境 IDE,包括 IED 安装,菜单功能及 单步调试程序的方法(2)学会配置与片内 XRAM 相关的寄存器,编程读写片内 4K XRAM;(3)学习使用数字交叉开关配置可编程 IO 口的方法。2 训练设备训练设备C8051F 开发平台一台,USB 电缆一条 ,在线调试 PC 机一台。3 训练内容训练内容(1)学习使用 Silicon Labs 集成开发环境 IDE,包括 IED 安装,菜单功能及单 步调试程序的方法 (2)熟悉与片上 XRAM 数据存储器配置有关的寄存器: EMIOCF,EMIOTC,EMI
14、OCN; (3)熟悉交叉开关配置(XBR2=0x40) ; (4)看懂程序实例; (5)练习查看外部存储器窗口;4 训练步骤训练步骤长沙理工大学创新实验室9(1)程序对片上数据存储器(4KB)操作,程序运行时先丛片内外部 4KB XRAM 的首地址(0000H)开始依次写入 256 个数据,然后再从片内数据 存储器的首地址读出并与写入的 256 个数据比较看是否一致,不一致蜂鸣 器响一声。 (2)打开 IDE 的 EXTERNAL RAM 窗口,观测片内数据是否正确。5 参考程序:参考程序:/参考程序 B:/WXRAMB.C 程序对片内数据存储器(4K RAM)实现读/写操作, 先在地址/00
15、00-00FFH 写入数据,再读出进行比较是否正确,若不正确蜂鸣器 响一声 #include / SFR declarations #include sbit BUZ = P35 ; / P35 位管理蜂鸣器 unsigned char xdata *point; void PORT_Init (void); void sleep_ms(unsigned char count) /延时 unsigned char ii,jj;for(ii=0;ii #include void delay_us(int timer)/us 沿时 timer*=20;/时钟周期调整for(;timer0;time
16、r-)_nop_(); /*函数功能:ms 延时输入参数:延时时间 timer输出参数:无 */ void delay_ms(unsigned int i)/ms 沿时 while(-i)delay_us(10); void main () unsigned char a=0,i=1,j=1;WDTCN=0xde;WDTCN=0xad;/关看门狗while (1) if (P5=0x00)P5=0xff;if(a%2=0)if(i8)a+;i=0;delay_ms(100);P5=1;i+;if(a%2!=0) if(j8)a+;j=0;P5 #include #pragma ot(0) #d
17、efine uint unsigned int #define uchar unsigned char #define OSFREQ 6000000l /*所使用的晶振频率*/ /*音符频率表*/ uint code notefreq= 523, 587, 659, 698, 784, 880, 988, 1047,1175,1319,1396,1568,1760,1976, 2093,2349,2637,2793,3136,3520,3961; /uint code timreg= 65058, 65110, 65157, 65178, 65217, 65252, 65283, /65297
18、,65323,65347,65357,65377,65394,65410, /65417,65430,65441,65447,65456,65465,65473; /*音名*/uchar code notename= c,d,e,f,g,a,b, 1,2,3,4,5,6,7, C,D,E,F,G,A,B,0; /*半音频率表*/ uint code halfnotefreq= 554, 622, 740, 831, 933, 1109,1245,1480,1161,1865, 2218,2489,2960,3322,3729; /uint code halftimreg= 65085, 651
19、34, 65198, 65235, 65268, /65311,65335,65367,65321,65402, /65423,65436,65452,65461,65469; /*音名*/ uchar code halfnotename= c,d,f,g,a, 1,2,4,5,6,长沙理工大学创新实验室13C,D,F,G,A,0; /sbit BEEP_PWR=P10; uchar FreqSandH,FreqSandL; /*产生方波的定时器的初值*/ uchar timer1cnt; /*定时器延时计数 */ uchar timer1cntflg; /*定时器定时完成标志 */ /* 函
20、数名称: void timer0int() interrupt 1 功能描述: 定时器 0 中断用来产生方波 输入:无 输出:无 全局变量: TH0,TL0,P5 调用模块: 无 */ void timer0int () interrupt 1 TH0=FreqSandH; TL0=FreqSandL; P5 = P5 0x10;/ change state of P5.4 /* 函数名称: void delay(uchar time) 功能描述: 延时 输入:uchar time: 延时时间长度 输出:无 全局变量: 无 调用模块: 无 */ void delay(uchar time) u
21、char i; uint j; for(i=0;i / SFR declarations / 16-bit SFR Definitions for F02x sfr16 DP = 0x82; / data pointer sfr16 TMR3RL = 0x92; / Timer3 reload value sfr16 TMR3 = 0x94; / Timer3 counter sfr16 ADC0 = 0xbe; / ADC0 data sfr16 ADC0GT = 0xc4; / ADC0 greater than window sfr16 ADC0LT = 0xc6; / ADC0 les
22、s than window sfr16 RCAP2 = 0xca; / Timer2 capture/reload sfr16 T2 = 0xcc; / Timer2长沙理工大学创新实验室18sfr16 RCAP4 = 0xe4; / Timer4 capture/reload sfr16 T4 = 0xf4; / Timer4 sfr16 DAC0 = 0xd2; / DAC0 data sfr16 DAC1 = 0xd5; / DAC1 data / Global CONSTANTS #define SYSCLK 2000000 void PORT_Init (void); void Ti
23、mer3_Init (int counts); void Timer3_ISR (void); unsigned int xdata p2led=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe; / MAIN Routine void main (void) / disable watchdog timerWDTCN = 0xde;WDTCN = 0xad;PORT_Init ();Timer3_Init (SYSCLK / 12 / 10); / Init Timer3 to generate interrupts/ at a 10Hz rate./LED1=
24、1;EA = 1;/ enable global interruptswhile (1) / spin forever / PORT_Init / Configure the Crossbar and GPIO ports void PORT_Init (void) XBR2 = 0x40; / Timer3_Init void Timer3_Init (int counts) TMR3CN = 0x00; / Stop Timer3; Clear TF3;/ use SYSCLK/12 as timebaseTMR3RL = -counts; / Init reload valuesTMR3
25、 = 0xffff; / set to reload immediatelyEIE2 |= 0x01; / enable Timer3 interruptsTMR3CN |= 0x04; / start Timer3 / Interrupt Service Routines / Timer3_ISR / This routine changes the state of the LED whenever Timer3 overflows. void Timer3_ISR (void) interrupt 14 长沙理工大学创新实验室19static int count;static int i
26、=9,j=0;static int led=0xff;TMR3CN / clear TF3count+;if(count=5)count=0; P5=p2ledj; led=led #include sbit BUZ = P35; /函数定义 void PORT_Init (void); void CPT1_Init (void);长沙理工大学创新实验室20void CPT1_ISR (void); /主程序 void main (void)WDTCN = 0xde; WDTCN = 0xad; /禁止看门狗定时器PORT_Init ();CPT1_Init ();EA=1;/*开总中断标志*
27、/BUZ = 1;while (1) /函数名称: CPT1_Init() /函数功能: 比较器 1 初始化 /入口参数: 无 /出口参数: 无 /全局变量引用: 无 /调用模块: 无 void CPT1_Init (void)EIE1 |=0x40;/*允许 CP1FIF 标志位(CPT1CN.4)的中断请求*/CPT1CN =0x8F;REF0CN |= 0x03; /用基准电压作为比较信号基准,CP1N 接 VREF/*内部电压基准提供从 VREF 脚输出,ADC0 电压基准取自 VREF0*/ /函数名称: PORT_Init () /函数功能: 通用 I/O 口及交叉开关初始化 /入
28、口参数: 无 /出口参数: 无 /全局变量引用: 无 /调用模块: 无 void PORT_Init (void) XBR2 = 0x40; /*交叉开关使能*/ P74OUT |= 0xc0;/P3MDOUT /*使能 P3.5 推挽输出*/ /* 函数名称: void sleep_ms(WORD count) 功能描述: 延时长沙理工大学创新实验室21输入:WORD count(所要延时的长度) 输出:无 全局变量: 无 调用模块: _nop_() */ void sleep_ms(unsigned int count) unsigned char ii,jj;for(ii=0;ii vo
29、id PORT_Init (void); void INT67_Init(void); void INT6_ISR (void); void INT7_ISR (void); void PORT_Init (void) XBR2 = 0x40; /*使能交叉开关*/ P74OUT |= 0x0f;/*P4,P5 口推挽输出*/ void INT67_Init(void) EIE2 |=0x30;/*允许外部中断 6/7 的请求*/P3IF |=0xc0;/*当检测到 P3.6/P3.7 引脚的下降沿时该标志位由硬件置位*/ void INT6_ISR (void) interrupt 18 P
30、3IF /*关外部中断 6 标志*/ P4 =P4; /*发光二极管状态改变*/ void INT7_ISR(void) interrupt 19 P3IF /*关外部中断 7 标志*/P4 =P4;/*发光二极管状态改变*/ / 主程序 void main (void) WDTCN = 0xde;/*禁止看门狗定时器*/WDTCN = 0xad;PORT_Init ();INT67_Init();EA = 1;/*使能中断总控制位*/while(1) /*等待中断*/ 训练七训练七 PCA0 测量方波的周期测量方波的周期1 实验目的:实验目的:(1)熟悉与 PCA 和震荡器相关的寄存器和编程
31、方法;长沙理工大学创新实验室23(2)采用 PCA 下降沿触发的捕获方式,测量方波的频率和周期。2 训练设备训练设备C8051F 开发平台一台,USB 电缆一条 ,在线调试 PC 机一台。3 训练内容训练内容(1)在开发平台上练习和编程,PCA0 及震荡器有关的特殊功能寄存器功能。 (2)学会使用 PCA 控制器 PCA0CN PCA0MD PCA0L PCA0H PCA0CPLn PCA0CPHn (3)看懂程序实例并能修改。4 训练步骤训练步骤(1)按原理图接好电路图(2)运行参训练序(3)用示波器检验方波的周期5 参考程序:参考程序:/参考程序::WPCACAPTURE.C 用 PCA
32、模块 0 负边沿触发的捕捉方式测量 方波的频 /率.测量固定频率方波的 100 个周期的时间宽度,再求平均,可得方波的频率和 /周期.测量结果用 LCD 显示. 打开 VIEW/DEBUG WINDOW/SFRS/PCA 窗口, / 可直接从 PCA0CPH0 和 PCA0CPL0 中看到十六进制表达的测量结果.#include / SFR declarations #include #define uchar unsigned char #define uint unsigned int sbit BELL=P35; unsigned char *lcdpoint; /*指向 lcddata
33、 数组的指针*/ void SYSCLK_Init (void); /*时钟初始化*/ void LCD_Init(void); /*LCD 初始化*/ void LCD_disp_line1(void); /*显示第一行数据*/ void LCD_disp_line2(void); /*显示第二行数据*/ void handle(void); /*处理数据*/ void delay(uchar time);/延时 void PORT_Init (void); /I/O 口初始化 void PCA_Init (void); /PCA 初始化 void PCA_ISR (void); /PCA
34、中断服务子程序 float freq,data0; unsigned int i,j,data2; unsigned char FRE8=“ FREQ: “,KHZ10=0x0,0x00,0x0,0x0,“Khz“; signed char T8=“ TIME: “,TIME010=0x0,0x00,0x0,0x0,0x0,“us“; unsigned char aa,bb,cc,ee; void main (void) 长沙理工大学创新实验室24BELL=1;/*关看门狗*/WDTCN = 0xde;WDTCN = 0xad;LCD_Init(); /*LCD 初始化*/ SYSCLK_In
35、it (); /*时钟初始化*/PORT_Init ();/*IO 口初始化*/BELL = 0; /*响蜂鸣器*/ delay(100); /* 延时*/BELL =1; /*关闭蜂鸣器*/ while (1) j=0;EA = 1; /*开中断*/PCA_Init (); /*PCA 初始化*/ while (jP0.0XBR2 = 0x40; / Enable crossbar and weak pull-upsP74OUT = 0xf0; /*P6,P7 为推挽输出*/ void PCA_Init (void) /PCA 初始化 EIE1 = 0x08;/*使能 PCA0 中断*/ PCA0MD = 0x09; /*PCA 定时器时钟源 SYSCLK 选择:01(1/12),03(1/4), 09(1)*/ PCA0L = 0x00; PCA0H = 0x00; PCA0CPM0 = 0x11;/*PCA0 负边沿捕捉方式,CCF0=1,允许辅捉/比较标志的中 断申请*/ PCA0CPL0 = 0x00; PCA0CPH0 = 0x00;PCA0CN=0x40;/*允许 PCA 定时器/计数器*/ /*PCA 中断服务子程序*/ void PCA_ISR (void) interrupt 9 j+;/*计中断次数*/ CCF0 =
限制150内