C8051F020实验指导书

合集下载

C8051F021单片机实验指导

C8051F021单片机实验指导

提要:实验项目1、单片机的IO编程实验1 IO开关量输入实验实验2 IO输出驱动继电器(或光电隔离器)实验实验3 IO输入/输出------半导体温度传感器DS18B20实验2、单片机的中断系统实验1 外部外部中断----脉冲计数实验3、单片机的定时器/计数器实验1 计数器实验实验2 秒时钟发生器实验4、单片机的串口特点和编程实验1 P C机串口通讯实验实验2 R S485通讯实验5、存储器实验1 RAM存储器读写实验6、PWM发生器实验1 PWM发生器(模拟)实验实验1 PWM发生器(内部)实验7、WDG看门狗实验1 外扩WDG(MAX813)实验实验2 WDG(内部)实验8、SPI总线实验1 SPI(模拟)实验-----TLC2543 AD转换实验实验2 SPI(模拟)实验-----TLV5616 DA转换实验9、I2C总线实验1 I2C(模拟)实验-----AT24C01读写实验实验2 I2C(内部)实验-----AT24C01读写实验10、综合实验实验1 HD7279LED数码管显示实验实验2 HD7279键盘实验实验3 外部中断---电机转速显示实验11、步进电机正反转实验12、TFT液晶显示彩色条纹实验13、16X16LED点阵显示汉字实验一、单片机的IO编程实验1 IO开关量输入实验目的:学习单片机读取IO引脚状态的的方法。

内容:编程读取IO引脚状态。

设备:EL-EMCU-I试验箱、EXP-C8051F021 CPU板。

编程:首先要把相关的引脚设置在IO的输入状态,然后写一个循环,不停地检测引脚的状态。

步骤:1、将CPU板正确安放在CPU接口插座上,2、连线:用导线将试验箱上MCU部分的IO1--- IO8分别连接到SWITCH 的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。

3、试验箱上电,在PC机上打开Keil C环境,打开试验程序文件夹IO_INPUT 下的工程文件IO_INPUT.Uv2编译程序,上电,在函数main()的最后一句设置断点,进入调试状态,打开窗口Peripherals-->IO-Port-->P3,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。

c8051f020信号发生器设计报告

c8051f020信号发生器设计报告

目录◆ 实验目的 ....................................................................................................................................................................... - 2 - ◆ 软件设计 ....................................................................................................................................................................... - 4 -第一节软件总体设计 .......................................................................................................................................... - 4 - 第二节软件功能设计 .......................................................................................................................................... - 4 -一、系统初始化程序设计 ......................................................................................................................... - 4 -二、键盘扫描及处理程序设计 ............................................................................................................... - 5 -三、中断服务程序设计 ............................................................................................................................- 12 -四、数据显示部分......................................................................................................................................- 14 -五、DAC0部分.............................................................................................................................................- 15 -六、附加模块................................................................................................................................................- 16 - ◆ 电路设计 .....................................................................................................................................................................- 20 -第一节电路总体设计 ........................................................................................................................................- 20 - 第二节电路功能设计 ........................................................................................................................................- 21 -一、总体电路模块......................................................................................................................................- 21 -二、电源模块................................................................................................................................................- 22 -三、开关电容滤波器模块 .......................................................................................................................- 22 -四、四象限乘法器模块 ............................................................................................................................- 23 -五、负载驱动模块......................................................................................................................................- 25 -六、负载模块................................................................................................................................................- 25 - ◆ 实验调试 .....................................................................................................................................................................- 26 -第一节程序调试..................................................................................................................................................- 26 -一、初始化程序...........................................................................................................................................- 26 -二、键盘扫描及处理程序设计 .............................................................................................................- 26 -三、显示程序................................................................................................................................................- 27 -四、定时器2、3服务程序及正弦波发生程序 .............................................................................- 28 -第二节电路调试..................................................................................................................................................- 28 -一、电源模块调试......................................................................................................................................- 28 -二、开关电容滤波器模块调试 .............................................................................................................- 29 -三、四象限乘法器模块调试 ..................................................................................................................- 30 -四、负载驱动及负载模块调试 .............................................................................................................- 30 - ◆ 实验结果 .....................................................................................................................................................................- 31 - ◆ 实验数据及分析.......................................................................................................................................................- 34 -第一节数/模转换MCU DAC输出................................................................................................................- 34 - 第二节低通滤波器输出 ...................................................................................................................................- 34 - 第三节低通滤波器时钟信号..........................................................................................................................- 35 - 第四节系统最终输出信号...............................................................................................................................- 35 - ◆ 实践总结、心得.......................................................................................................................................................- 36 - ◆ 附录一源程序.......................................................................................................................................................- 37 - ◆ 附录二电路原理图 .............................................................................................................................................- 52 -实验目的(1) 系统框图(2) 平台实验板实验室提供“电子系统设计实验平台板”,板上集成C8051F020处理器,该处理器内置DAC 等资源,合成信号即由该DAC 输出(电压信号)。

C8051F020实验

C8051F020实验

目 录说明 (3)MT020学习开发板/MT-UDA仿真器说明 (4)一 C8051F020/120单片机学习开发板(MT020)简介 (5)1.1 MT020单片机学习开发板特色 (5)1.2 MT020与国内同类产品比较 (5)1.3 MT020与同类产品实物图比较 (7)二 电路原理图 (8)2.1 MT020电路原理图 (8)2.2 MT020学习开发板TopLayer图 (13)三 快速运行第一个程序 (15)3.1 Keil C51 的安装 (15)3.1.1 系统要求 (15)3.1.2 软件的安装 (15)3.2 MT-UDA调试仿真器驱动程序的安装 (17)3.3 μVision2 集成开发环境 (18)3.3.1 μVision2 集成工具 (18)3.3.2 菜单栏命令、工具栏和快捷方式 (18)3.4 Keil C51使用及与仿真器连调 (23)3.4.1 创建第一个Keil C51 应用程序 (23)3.4.2 程序文件的编译、链接 (29)3.4.3 程序调试 (32)四 MT020学习开发板基础实验 (37)4.1 I/O口控制实验(蜂鸣器驱动实验) (37)4.2 精确延时程序实现 (38)4.3 数码管显示实验 (39)4.4 键盘扫描实验 (40)4.5 中断按键实验 (41)4.6 软件模拟I2C总线实验(EEPROM AT24C01) (42)4.7 利用SMBUS实现基于I2C器件操作实验(读写EEPROM AT24C01) (43)4.8 字符型液晶1602显示实验 (44)4.9 图型液晶12864显示实验 (45)4.10 串口通信实验 (46)4.11 数字温度传感器DS18B20实验 (47)4.12 ADC0片上温度采集实验 (48)4.13 ADC0电压采集实验 (49)4.14 DAC0输出正弦实验 (50)4.15 DAC0输出DTMF信号实验 (51)4.16 比较器(CP)实验 (52)4.17 硬件SPI接口控制跑马灯实验 (53)4.18 用PCA硬件单元实现PWM实验 (54)4.19 用PCA硬件单元实现边沿捕捉实验 (55)4.20 红外数据收发实验 (56)说 明本电子文档是MT020学习开发板实验手册,本文档为作者劳动成果,未经作者同意,请忽用于商业目的。

C8051F020单片机实验接线表.

C8051F020单片机实验接线表.

一、C8051F020单片机实验接线表(注:黑体部分已调试通过)3.8 WDT看门狗实验一、实验目的熟悉汇编语言编程,掌握C8051F020内部WDT的应用。

二、实验内容通过改变延时程序的延时值,使延时值分别小于和大于WDT设置的定时间隔,运行程序,观察P0.0控制的发光二极管L8的变化。

三、实验原理介绍MCU内部有一个使用系统时钟的可编程看门狗定时器(WDT)。

当看门狗定时器溢出时,WDT将强制CPU进入复位状态。

为了防止复位,必须在溢出发生前由应用软件重新触发WDT。

如果系统出现了软件/硬件错误,使应用软件不能重新触发WDT,则WDT将溢出并产生复位,这样可以防止系统失控。

WDT是一个使用系统时钟的21位定时器。

该定时器检测对其控制寄存器的两次写操作的时间间隔。

如果这个时间间隔超过了编程的极限值,将产生WDT复位。

可以根据需要用软件允许和禁止WDT,或根据需要将其设置为永久性允许状态。

可以通过看门狗定时器控制寄存器(WDTCN)控制看门狗的功能。

(1)允许/复位WDT看门狗定时器的允许和复位是通过向WDTCN寄存器写入0xA5来实现的。

用户的应用软件应周期性地向WDTCN写入0xA5,以防止看门狗定时器溢出。

每次系统复位都将允许并启动WDT。

(2)禁止WDT向WDTCN寄存器写入0xDE后再写入 0xAD将禁止WDT。

下面的代码说明禁止WDT的过程:CLR EA ;禁止所有中断MOV WDTCN,#0DEh ;禁止看门狗定时器MOV WDTCN,#0ADhSETB EA ;重新允许中断必须在4个时钟周期之内写0xDE和写0xAD,否则禁止操作将被忽略。

在这个过程期间应禁止中断,以避免两次写操作之间延时。

(3)锁定WDT向WDTCN写入0xFF将使禁止功能无效。

WDT一旦被锁定,在下一次复位之前禁止操作将被忽略,写0xFF并不允许或复位看门狗定时器。

如果应用程序想一直使用看门狗,则应在初始化代码中向WDTCN写入0Xff.(4)设置WDT定时间隔WDTCN.[2~0]控制看门狗的超时间隔。

C8051F系列实验指导书

C8051F系列实验指导书

第二章 C8051单片机实验内容
三 实验硬件电路,LED电路见图2-1,开关电 路见图2-2,
图2-1 八位LED灯电路图
第二章 C8051单片机实验内容
图2-2 拨档开关电路图
第二章 C8051单片机实验内容
C8051F020/1/2/3 内部有5 个计数器/定时器:其中三个16 位 计数器/定时器与标准8051 中的计数器/定时器兼容,还有两个 16 位自动重装载定时器可用于ADC、SMBus、UART1 或作为 通用定时器使用。
第一章:单片机实验设备简介
(5)、下载代码到FLASH: • 简单地按下生成工具栏中的下载按钮 或 使用Debug 菜单中的“Download”命令,就可 以下载程序到目标处理器的flash 中(注意: 只有在执行“Connect”命令后才能下载代码 到目标硬件)。 • 下载成功之后,点击运行/终止键(绿色圆点/ 红色)运行程序,再点即终止运行,终止后可 修改程序。
单片机与PLC技术实验指导书
实验地点: 一区主楼623房间 指导教师:胡振坤
进实验室领取C8051及PLC实验报告 带相关数据手册或课件,需要查阅。 不用带鞋套。
第一章:单片机实验设备简介
1.1 C8051F系统实验设备的组成 • NCD-CIP51F020 综合实验设备由 C8051F020 CPU 板和系统实验板二部分组 成,见图1-1,应用该设备可进行片上系统 单片机较典型应用的实验。
图2-3 定时器列表
第二章 C8051单片机实验内容
定时器3 是一个16 位的计数器/定时器,由两个8位的SFR组成, TMR3L(低字节)和TMR3H (高字节)。
图2-4 定时器3的工作方式
第二章
1 6 2 10

c8051f020SPI-ATT7022通信

c8051f020SPI-ATT7022通信

此程序实验板已调试通过/*此程序接收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; //存入数组,供发送}}。

C8051F020入门指导解读

C8051F020入门指导解读

MCU 的程序存储器包含64K 字节的FLASH。该存储器 以512 字节为一个扇区,可以在系统编程,且不需特别的 外部编程电压。
1.3 JTAG 调试和边界扫描
C8051F020系列具有片内JTAG边界扫描和调试电路, 通过4脚JTAG接口并使用安装在最终应用系统中的产品器 件就可以进行非侵入式、全速的在系统调试。 该JTAG接口完全符合IEEE1149.1规范,为生产和测试 提供完全的边界扫描功能。 Silicon Labs的调试系统支持观察和修改存储器和寄 存器,支持断点、观察点、堆栈指示器和单步执行。
在一个标准的8051 中,除MUL 和DIV 以外所有指令 都需要12 或24 个系统时钟周期,最大系统时钟频率为 12-24MHz。 而对于CIP-51 内核,70%的指令的执行时间为1 或2 个系统时钟周期,只有4 条指令的执行时间大于4 个系统 时钟周期。
1.1.3 增加的功能
扩展的中断系统向CIP-51 提供22 个中断源(标准8051 只有7 个中断源),允许大量的模拟和数字外设中断微控 制器。 MCU 可有多达7 个复位源:一个片内VDD 监视器、一 个看门狗定时器、一个时钟丢失检测器、一个由比较器0 提供的电压检测器、一个软件强制复位、CNVSTR 引脚 及/RST 引脚。 MCU 内部有一个独立运行的时钟发生器,在复位后被默 认为系统时钟。如果需要,时钟源可以在运行时切换到外 部振荡器,外部振荡器可以使用晶体、陶瓷谐振器、电容、 RC 或外部时钟源产生系统时钟。
1.4 可编程数字I/O 和交叉开关
该系列MCU具有标准8051的端口(0、1、2和3)。在 F020/2中有4个附加的端口(4、5、6和7),因此共有64 个通用端口I/O。 每个端口I/O引脚都可以被配置为推挽或漏极开路输出。 数字交叉开关。

C8051F020例程

C8051F020例程

/***************************************************************************** 本测试程序用来测试板上所以I/O连接状况外接LED共阳数码管实验时将跳线帽接至+3V淘宝地址/*****************************************************************************/#include <c8051f020.h>#define uchar unsigned char#define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P0MDOUT =0xff;P1MDOUT =0xff;P2MDOUT =0xff;P3MDOUT =0xff;P74OUT =0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/void main (void){uchar i;WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();while(1){for(i=0;i<10;i++){P0=tab[i];P1=tab[i];P2=tab[i];P3=tab[i];P4=tab[i];P5=tab[i];P6=tab[i];P7=tab[i];delay(500);}}}/***************************************************************************** 闪烁灯实验本实验采用P3.4口输出短接J11 实验时将跳线帽接至+3V淘宝地址/*****************************************************************************/ #include <c8051f020.h>#define uchar unsigned char#define uint unsigned intsbit LED=P3^4;void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P3MDOUT =0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/void main (void){WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();while (1){LED=0;delay(500);LED=1;delay(500);}}/***************************************************************************** 流水灯实验本实验采用P0口输出外接LED 实验时将跳线帽接至+3V淘宝地址/*****************************************************************************/#include <c8051f020.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intvoid PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P0MDOUT =0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/void main (void){uchar i;WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器i=0xfe;PORT_Init ();P0=i;while(1){delay(500);i = _crol_(i,1); //循环右移1位,点亮下一个LEDP0 = i;}}/***************************************************************************** 数码管实验本实验采用P0口输出外接LED共阳数码管实验时将跳线帽接至+3V淘宝地址/*****************************************************************************/#include <c8051f020.h>#define uchar unsigned char#define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P0MDOUT =0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/void main (void){uchar i;WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();while(1){for(i=0;i<10;i++){P0=tab[i];delay(500);}}}/****************************************************************************** **********按键实验本实验采用P2.0和P2.1作为输入P0外接LED共阳数码管输出实验时将跳线帽接至+3V淘宝地址/******************************************************************************* *********/#include <c8051f020.h>#define uchar unsigned char#define uint unsigned intsbit K1 = P2^0;sbit K2 = P2^1;uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P0MDOUT = 0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/void main (void){uchar i;WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();while(1){if(K1==0){delay(10);if(K1==0){if(i==9)i=9;elsei++;while(!K1);}}if(K2==0){delay(10);if(K2==0){if(i==0)i=0;elsei--;while(!K2);}}P0=tab[i];}}/***************************************************************************** 串口通讯实验本实验采用UART0输出数据到PC机实验时将跳线帽接至+3V复位一次,单片机发送256个数据波特率为9600淘宝地址/*****************************************************************************/#include <c8051f020.h>#define uchar unsigned char#define uint unsigned intvoid SYSCLK_Init();void PORT_Init();void UART0_Init();void SYSCLK_Init(){unsigned int i;OSCXCN=0X67; //0X67=0110,0111for(i=0;i<256;i++); //等待>1mswhile(!(OSCXCN&0X80)); //等待XTLVLD变为1OSCICN=0X88; //时钟失效监测器,选择外部时钟源作为系统时钟}void PORT_Init(){XBR0 = 0x04;XBR2 = 0x40;}void UART0_Init(){SCON0=0x50; //串口方式1TMOD=0X20; //选用定时器1作为波特率发生器TH1=0xF4;TL1=0xF4;PCON=0x80; //波特率为9600TR1=1; //定时器启动}void main(){unsigned int i;WDTCN=0XDE;WDTCN=0XAD;SYSCLK_Init();PORT_Init();UART0_Init();for(i=0;i<256;i++){SBUF0=i;while(!TI0);TI0=0;}while(1);}/***************************************************************************** LCD1602并口显示实验本实验采用P6为数据口和P1为控制口实验时将跳线帽接至+5V淘宝地址/*****************************************************************************/ #include <c8051f020.h>#define uchar unsigned char#define uint unsigned int#define DataPort P6sbit LCM_VO=P1^7;sbit LCM_RS=P1^6;sbit LCM_RW=P1^5;sbit LCM_EN=P1^4;sbit LED=P3^4;uchar code TAB1[] = "C8051F-020";uchar code TAB2[] = "QQ:123514611";uchar aa,bb;/*******************************/void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P1MDOUT =0xff;P3MDOUT =0xff;P74OUT |= 0xff; /*推挽输出*/}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************//*******************************///写指令void WriteCommandLCM(uchar CMD){LCM_RS=0;LCM_RW=0;DataPort=CMD;LCM_EN=1;delay(50);LCM_EN=0;}/*******************************///写数据void WriteDataLCM(uchar dataW){LCM_RS=1;LCM_RW=0;DataPort=dataW;LCM_EN=1;delay(50);LCM_EN=0;}/***********************************/void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) {Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1if (Y) X |= 0x40; //当要显示第二行时地址码0x40;X |= 0x80; // 算出指令码WriteCommandLCM(X); //这里不检测忙信号,发送地址码WriteDataLCM(DData);}//-----------------------------------------------------------------------------//按指定位置显示一串字符//-----------------------------------------------------------------------------void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) {unsigned char ListLength;ListLength = 0;Y &= 0x1;X &= 0xF; //限制X不能大于15,Y不能大于1 while (DData[ListLength]>0x20) //若到达字串尾则退出{if (X <= 0xF) //X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符ListLength++;X++;}}}/***********************************/void InitLcd(){WriteCommandLCM(0x38); //8位数据,双行显示,5X7字型WriteCommandLCM(0x08); //WriteCommandLCM(0x01); //WriteCommandLCM(0x06); //WriteCommandLCM(0x0c); //}/***********************************/void main (void){WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();OSCICN |= 0x01;delay(5000);LCM_VO=0;InitLcd ();aa=0x41;for(bb=0;bb<26;bb++){LED=0;delay(500);WriteDataLCM(aa);aa++;if(aa==0x51){WriteCommandLCM(0xc0);}if(aa==0x5b){break;}LED=1;delay(500);}delay(2000);WriteCommandLCM(0x01);for(bb=0;bb<10;bb++){LED=0;delay(500);DisplayListChar(3, 0, TAB1);DisplayListChar(2, 1, TAB2);LED=1;delay(500);}delay(5000);}/****************************************************************************** **********LCD12864 ST7920控制芯片测试程序本实验采用P3口和P0口驱动实验时将跳线帽接至+3V淘宝地址/******************************************************************************* *********/#include <c8051f020.h>#define uchar unsigned char#define uint unsigned int#include <intrins.h>#include <string.h>#include <stdio.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long//------------------------------------void PORT_Init (void);void delay(uint z);//-----------------------------------#define LCDBUS P3sbit RS = P0^0;sbit RW = P0^1;sbit E = P0^2;sbit PSB = P0^3;sbit RST = P0^4;void PORT_Init (void){XBR2 = 0x40; /*使能交叉开关*/P3MDOUT =0xff;P0MDOUT =0xff;}/*******************************/void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}/*******************************/uchar code symbo[]={/*-- 调入了一幅图像:D:\guoq files\technic support\pic\128x32 Symbo.bmp --*//*-- 宽度x高度=128x32 --*/0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,0x1F,0xC0,0x03,0xE0,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x20,0x40,0x04,0x10,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x40,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x80,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x02,0x02,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x04,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x88,0x00,0x80,0x04,0x10,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x50,0x01,0x00,0x03,0xE0,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0x00,0x00, 0x1F,0xFC,0x01,0xFF,0xDF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x04,0x00,0x00,0x00,0x00, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x80,0x00,0x08,0x1F,0xFF,0xFF,0xF8, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x40,0x00,0x10,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x20,0x00,0x20,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x10,0x00,0x40,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x08,0x00,0x80,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x10,0x00,0x40,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x20,0x00,0x20,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x40,0x00,0x10,0x10,0x00,0x00,0x08, 0x10,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x40,0x80,0x00,0x08,0x1F,0xFF,0xFF,0xF8, 0x1F,0xFC,0x01,0xFF,0xDF,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x04,0x00,0x00,0x00,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0x02,0x00,0x00,0x00,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x50,0x01,0x00,0x03,0xE0,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x88,0x00,0x80,0x04,0x10,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x04,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x02,0x02,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x01,0x00,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x08,0x00,0x80,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x40,0x40,0x08,0x08,0x00, 0x00,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x00,0x20,0x40,0x04,0x10,0x00, 0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,0x1F,0xC0,0x03,0xE0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };//-----------------------------------// Delay Routine//-----------------------------------void delay100us(void) //delay TIMER1*1 ms for 12MHz{uchar data i;for(i=0;i<=10;i++){_nop_();_nop_();}}void delayms( uint m ) // 12MHz Xtal, close to ms value {uint j;uint i;for(i=0; i<m; i++)for(j=0; j<109; j++)_nop_();}void SdCmd(uchar Command) //send command{RS = 0;RW=0;LCDBUS = Command;E = 1;E = 0;delay100us();}void SdData(uchar DData) //send display data{RS = 0;RS=1;RW=0;LCDBUS = DData;E = 1;E = 0;delay100us();}uchar RdData(){uchar DData;RS = 0;RW = 1;RS=1;LCDBUS=0xff;E=1;DData = LCDBUS;E = 0;return(DData);}//-----西文写入函数----------------void PrintASCII(uint x,y,uchar *pstr) //通用函数{uint addr;y=y<<4;addr=y|0x80+x;SdCmd(addr);while(*pstr>0){SdData(*pstr++);}}//----中文写入函数-----------------void PrintGB(uchar x,y,uchar *pstr){uint addr;y=y<<4;addr=y|0x80+x;SdCmd(addr);while(*pstr>0){SdData(*pstr++);delayms(300); //演示用}}//----初始化函数-----------------void initLCM(){RST=0;delayms(5);RST=1;delayms(800);SdCmd(0x30); /* 设置工作方式(8位总线) */ SdCmd(0x06); /* 设置输入方式*/SdCmd(0x0f); /* 设置显示方式*/SdCmd(0x01); /* 清屏*/delayms(2);}//----清屏函数------------------void ClearRAM(){uchar i,j;SdCmd(0x34);for(i=0;i<32;i++){SdCmd(i|0x80);SdCmd(0x80);for(j=0;j<16;j++){SdData(0x00);//SdData(0x00);}}SdCmd(0x30);}//---- 画图函数-----------------------------void ShowBmp(uchar x,y, width,high,uchar *bmp) {uchar i,j;SdCmd(0x34);SdCmd(0x36);for(i=y;i<(y+high);i++){if (i<32){SdCmd(0x80|i);SdCmd(0x80|x);}else{SdCmd(0x80|(i-32));SdCmd(0x80|(x+8));}for(j=0;j<width;j++){SdData(*bmp++);SdData(*bmp++); //}}SdCmd(0x30);}//---画点函数----------------void Draw_Dot(uint x,y){uchar m,n;uint k;if(y>=32){y=y-32;x=x+128;}SdCmd(y|0x80);k=x/16;SdCmd(k|0x80);k=0x8000;k=k>>x%16;m=RdData();m=RdData()|k>>8;n=RdData()|k;k=x/16;SdCmd(y|0x80);SdCmd(k|0x80);SdData(m);SdData(n);}//--- 画线函数---------------void Draw_Line(uint x1,y1,x2,y2) {uint temp;int dalt_x,dalt_y,err=0;if (y1>y2){temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}Draw_Dot(x1,y1);dalt_x=x2-x1;dalt_y=y2-y1;if(dalt_x>=0){if(dalt_y>dalt_x)//k>1{while(y1<y2){if(err<0){x1=x1+1;y1=y1+1;err=err+dalt_y-dalt_x;}else{y1=y1+1;err=err-dalt_x;}Draw_Dot(x1,y1);}}else // 0<=k=<1{if (dalt_y==0)y1=y1-1;while(x1<x2){if(err<0){x1=x1+1;err=err+dalt_y;}else{y1=y1+1;x1=x1+1;err=err+dalt_y-dalt_x;}Draw_Dot(x1,y1);}}}else{dalt_x=x1-x2;if(dalt_y>dalt_x)//k<-1{while(y1<y2){if(err<0){x1=x1-1;y1=y1+1;err=err+dalt_y-dalt_x;}else{y1=y1+1;err=err-dalt_x;}Draw_Dot(x1,y1);}}else //0>k>=-1{if (dalt_y==0)y1=y1-1;while(x1>x2){if(err<0){x1=x1-1;err=err+dalt_y;}else{x1=x1-1;y1=y1+1;err=err+dalt_y-dalt_x;}Draw_Dot(x1,y1);}}}}//--功能演示函数-------------------------void quxian1(){SdCmd(0x06);PrintGB( 0,0,"画面不动光标地址加1 指令代码为06");delayms(3000);SdCmd(0x01);delayms(2);SdCmd(0x04);PrintGB( 15,0,"画面不动光标地址减1 指令代码为04");delayms(3000);SdCmd(0x01);delayms(2);SdCmd(0x07);PrintGB( 0,0,"画面整体左移1 位指令代码为07");delayms(3000);SdCmd(0x01);delayms(2);SdCmd(0x05);PrintGB( 15,0,"画面整体右移1 位指令代码为05");delayms(3000);SdCmd(0x06);}//----做图演示函数------------------------------------void quxian2(){uint code data1[48]={88,89,85,87,89,90,89,89,88,86,87,86,88,89,90,94,95,96,96,97,99,99,101,103,101,101,100,103,105,113,113,117,117,116,114,107,110,114,113,112,115,112,113,119,120,125,124,128};uint a1,b1,a2,b2,i;SdCmd(0x01);delayms(2);SdCmd(0x0c);PrintASCII(0,0," Time");PrintASCII(14,1,"Temp");SdCmd(0x34);SdCmd(0x36);Draw_Line(1, 60, 125,60);// 设置坐标X coordinate Draw_Line(1, 15, 1, 60);// 设置坐标Y coordinatedelayms(1000);a1=1;for ( i=0;i<40;i++){b1=data1[i]-70;Draw_Dot(a1,b1);//画点a1=a1+3;}delayms(3000);a1=1;for ( i=0;i<40;i++){b1=data1[i]-70;b2=data1[i+1]-70;a2=a1+3;Draw_Line(a1,b1,a2,b2);//画线a1=a2;}SdCmd(0x32);}//-----------------------------------// Main Program//-----------------------------------void main(){WDTCN = 0xde;WDTCN = 0xad; //禁止看门狗定时器PORT_Init ();SP=0x60;EA=0;PSB=1; //并行接口选择LCDBUS=0xff; // 初始化接口RW=1;E =0;initLCM();while(1){SdCmd(0x01); /* 清屏*/delayms(2);ClearRAM();//-- 字库字符显示PrintASCII(8,0," ST7920 演示程序");delayms(3000);//-- 图画显示SdCmd(0x01); /* 清屏*/delayms(2);ClearRAM();ShowBmp(0,0,8,32,symbo);ShowBmp(0,32,8,32,symbo);delayms(3000);//-- 写入功能展示SdCmd(0x01);delayms(2);quxian1();delayms(3000);//-- 做图功能展示ClearRAM();quxian2(); // 仅在并行接口使用delayms(3000);}}/****************************************************************************** **********LCD12864 ST7565控制芯片AD转换测试程序本实验采用P0串口驱动实验时将跳线帽接至+3V淘宝地址/******************************************************************************* *********/#include <c8051f020.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned long#define SYSCLK 22118400bit aa;uchar count=0;ulong AD;ulong mm;uchar temp_l;uchar temp_h;uchar xdata dispbuf[4];uchar ContrastLevel; // for contrast setting level// 串行通讯方式驱动程序uchar bdata transdata; //该变量可为位操作之变量sbit transbit = transdata^7;sbit _CS = P0^0;sbit _RES = P0^1;sbit A0 = P0^2;sbit SCLK = P0^6;sbit SDA = P0^7;/*******************************/void delayms(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<121;y++);}void OSCILLATOR_Init (void){int i; /*延时计数器*/OSCXCN = 0x67; /*打开外部晶体振荡器*/for (i=0; i < 256; i++) ; /*延时*/while (!(OSCXCN & 0x80)) ; /*查询外部晶体是否稳定起振*/OSCICN = 0x88; /*用外部晶体作为系统时钟,并使能时钟丢失检测*/}void PORT_Init (void){P0MDOUT = 0xff;XBR2 = 0x40;}//------------- ASCII字符库----------------------------------------------------------------//说明:该字库为5*7点阵字符字模库,但字库格式为8*8点阵字模数据,第8行为行间距,// 第6-8列为字间距。

C8051F020入门指导

C8051F020入门指导
接到端口I/O引脚。
DAC为电压输出方式,有灵活的输出更新机制。这一机制允许
用软件写和定时器2、定时器3及定时器4的溢出信号更新DAC输出。
C8051F020/2的DAC之电压基准由专用的VREFD输入引脚提供,而
C8051F021/3的DAC之电压基准由器件内部的电压基准提供。DAC在
作为比较器的参考电压或为ADC差分输入提供偏移电压时非常有用。

真正8 位500 ksps 的ADC,带PGA 和8 通道模拟多路开关

两个12 位DAC,具有可编程数据更新方式

64K 字节可在系统编程的FLASH 存储器

4352(4096+256)字节的片内RAM


可寻址64K 字节地址空间的外部数据存储器接口
硬件实现的SPI、SMBus/ I2C 和两个UART 串行接
I/O 引脚(C8051F021/3)。下面列出了一些主要特性:

高速、流水线结构的8051 兼容的CIP-51 内核(可达25MIPS)

全速、非侵入式的在系统调试接口(片内)

真正12 位(C8051F020/1)或10 位(C8051F022/3)、 100
ksps 的8 通道ADC,带PGA和模拟多路开关

端口0–3中所有未被交叉开关分配的引脚都可以作为通用I/O
(GPI/O)引脚,通过读或写相应的端口数据寄存器访问。

被交叉开关分配的那些端口引脚的输出状态受使用这些引脚
的数字外设的控制。

不管交叉开关是否将引脚分配给外设,读一个端口数据寄存器
(或端口位)将总是返回引脚本身的逻辑状态。

基于C8051F020的多路无线温度采集系统的设计方案

基于C8051F020的多路无线温度采集系统的设计方案

基于C8051F020的多路无线温度采集系统的设计方案随着科技的不断进步,在多数领域中有线连接的方式已经不能满足科技高速开展的要求,无线通信正进入到我们生活中的各个领域,它与有线连接方式相比,具有携带方便、使用灵活、不必考虑走线等优点。

在无线报警、工业数据采集、遥控、遥测射频IC 卡、手持PDA、无线图像传输、不停车收费、无线抄表等各个方面有着极其广泛的应用。

本文所介绍的测温系统也是无线通讯系统的应用之一。

它以SOC单片机C8051F020为中央控制器,以CC1000为无线传送模块和温度测量电路构成了多路无线温度采集系统。

将8路的温度数据进展采集,通过无线方式送给主机C8051F020进展处理。

调制解调由CC1000完成,系统采用频移键控调制〔FSK〕,载波频率为433MHz,带宽64kHz,数据采用差分曼彻斯特编码发送,空中发送数据速率可以根据需要设置。

在发送时控制器C8051F020单片机从用户接口接收采集命令,进展8路温度信号的采集,并将采集到的温度数据进展打包转换成数据帧传送给CC1000,控制CC1000进展数据发送。

在接收时,控制器C8051F020接收从CC1000传送过来的温度数据,进展简单处理后把这些数据传送给上位机进展详细的分析处理。

1 无线收发模块本设计的无线收发模块采用了ChipconComponent公司的高性能RF收发芯片CC1000,它是一种单片高频无线收发IC,电流损耗低,通信速率可调,最高可达72.8kbit/s,接收灵敏度为-109dB.m,发射信号功率在-20~10dB.m内可调,设计时电路简单,所用的外围器件较少,编码简单,改变电路和器件参数可以使其工作的频率范围在300~1000MHz内变化。

同时该器件内部集成了发射功率放大器、FSK调制/解调、低噪声接收放大器、混频器、压控振荡器、鉴相器等电路,是一款集成度极高的芯片,可直接与单片机进展通信。

该IC极适合嵌入到各种低功耗要求较高的测量或控制系统中,我们在该系统中选那么433MHz的频段。

C8051F021单片机实验指导

C8051F021单片机实验指导

提要:实验项目1、单片机的IO编程实验1 IO开关量输入实验实验2 IO输出驱动继电器(或光电隔离器)实验实验3 IO输入/输出------半导体温度传感器DS18B20实验2、单片机的中断系统实验1 外部外部中断----脉冲计数实验3、单片机的定时器/计数器实验1 计数器实验实验2 秒时钟发生器实验4、单片机的串口特点和编程实验1 P C机串口通讯实验实验2 R S485通讯实验5、存储器实验1 RAM存储器读写实验6、PWM发生器实验1 PWM发生器(模拟)实验实验1 PWM发生器(内部)实验7、WDG看门狗实验1 外扩WDG(MAX813)实验实验2 WDG(内部)实验8、SPI总线实验1 SPI(模拟)实验-----TLC2543 AD转换实验实验2 SPI(模拟)实验-----TLV5616 DA转换实验9、I2C总线实验1 I2C(模拟)实验-----AT24C01读写实验实验2 I2C(内部)实验-----AT24C01读写实验10、综合实验实验1 HD7279LED数码管显示实验实验2 HD7279键盘实验实验3 外部中断---电机转速显示实验11、步进电机正反转实验12、TFT液晶显示彩色条纹实验13、16X16LED点阵显示汉字实验一、单片机的IO编程实验1 IO开关量输入实验目的:学习单片机读取IO引脚状态的的方法。

内容:编程读取IO引脚状态。

设备:EL-EMCU-I试验箱、EXP-C8051F021 CPU板。

编程:首先要把相关的引脚设置在IO的输入状态,然后写一个循环,不停地检测引脚的状态。

步骤:1、将CPU板正确安放在CPU接口插座上,2、连线:用导线将试验箱上MCU部分的IO1--- IO8分别连接到SWITCH 的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。

3、试验箱上电,在PC机上打开Keil C环境,打开试验程序文件夹IO_INPUT 下的工程文件IO_INPUT.Uv2编译程序,上电,在函数main()的最后一句设置断点,进入调试状态,打开窗口Peripherals-->IO-Port-->P3,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。

C8051F020入门指导

C8051F020入门指导


端口0–3中所有未被交叉开关分配的引脚都可以作为通用I/O
(GPI/O)引脚,通过读或写相应的端口数据寄存器访问。

被交叉开关分配的那些端口引脚的输出状态受使用这些引脚
的数字外设的控制。

不管交叉开关是否将引脚分配给外设,读一个端口数据寄存器
(或端口位)将总是返回引脚本身的逻辑状态。

交叉开关寄存器被正确配置后,通过将XBARE(XBR2.6)设
上 的 一 方 水 泥块。 水泥块 被黑色 的漆涂 成了黑 色,便 是黑板 了。和 同是学 生的小
伙 伴 们 一 有 时间就 围着黑 板或演 算书写 ,或唱 歌嬉戏 。
学 生 时 代 的快 乐飘飘
荡 荡 结 束 于 一次竞 赛考试 。县城 的中学 是考点 ,进入 考场经 过黑板 时,意 外发现
那 面 黑 色 的 长方形 竟然和 我们教 室的长 方形不 一样——它 的 四围有 木棱子 围着,
捕捉/比较模块。
时间基准的时钟可以是下面的六个时钟源之一:系统时钟/12、系
统时钟/4、定时器0溢出、外部时钟输入(ECI)、系统时钟和外部振
荡源频率/8。
每个捕捉/比较模块都有六种工作方式:边沿触发捕捉、软件定时
器、高速输出、频率输出、8位脉冲宽度调制器和16位脉冲宽度调制
器。
PCA捕捉/比较模块的I/O和外部时钟输入可以通过数字交叉开关
面 不 是 水 泥 的;摸 起来不 是很光 滑,却 也不蹭 手。坐 在教室 靠边的 位置上 ,看黑
板 角 落 的 几 个粉笔 字,竟 然不反 光。考 试结束 了,几 多不解 却没有 消散。 后来终
于 知 道 了 那 长方形 的黑板 叫毛玻 璃。从 此因为 反光而 看不清 楚黑色 水泥黑 板上的

C8051F实验指导书

C8051F实验指导书
第四章 总线操作...........................................................................................................................27 4.1 SMBUS 总线 ....................................................................................................................27 4.2 SMBUS 协议 ....................................................................................................................27 4.2.1 SMBUS 时序 .........................................................................................................27 4.2.2 SMBUS 仲裁 .........................................................................................................28 4.3 AT24C02 操作 ..................................................................................................................29
第五章 Keil c 编程 ........................................................................................................................37 5.1 Keil C 快速入门 ....................................................................................37 5.1.1 文件载入...............................................................................................................37 5.1.2 端口硬件操作.......................................................................................................40 5.1.3 中断操作...............................................................................................................43 5.1.4 存储空间分配.......................................................................................................46 5.1.5 指针.......................................................................................................................48 5.2 keilc 库函数......................................................................................................................54 5.2.1 CTYPE.H 字符函数 ..............................................................................................54

C8051F020单片机实验接线表

C8051F020单片机实验接线表

一、C8051F020单片机实验接线表(注:黑体部分已调试通过)3.8 WDT看门狗实验一、实验目的熟悉汇编语言编程,掌握C8051F020内部WDT的使用。

二、实验内容通过改变延时程序的延时值,使延时值分别小于和大于WDT设置的定时间隔,运行程序,观察P0.0控制的发光二极管L8的变化。

三、实验原理介绍MCU内部有一个使用系统时钟的可编程看门狗定时器(WDT)。

当看门狗定时器溢出时,WDT将强制CPU进入复位状态。

为了防止复位,必须在溢出发生前由使用软件重新触发WDT。

如果系统出现了软件/硬件错误,使使用软件不能重新触发WDT,则WDT将溢出并产生复位,这样可以防止系统失控。

WDT是一个使用系统时钟的21位定时器。

该定时器检测对其控制寄存器的两次写操作的时间间隔。

如果这个时间间隔超过了编程的极限值,将产生WDT复位。

可以根据需要用软件允许和禁止WDT,或根据需要将其设置为永久性允许状态。

可以通过看门狗定时器控制寄存器(WDTCN)控制看门狗的功能。

(1)允许/复位WDT看门狗定时器的允许和复位是通过向WDTCN寄存器写入0xA5来实现的。

用户的使用软件应周期性地向WDTCN写入0xA5,以防止看门狗定时器溢出。

每次系统复位都将允许并启动WDT。

(2)禁止WDT向WDTCN寄存器写入0xDE后再写入 0xAD将禁止WDT。

下面的代码说明禁止WDT的过程:CLR EA ;禁止所有中断MOV WDTCN,#0DEh ;禁止看门狗定时器MOV WDTCN,#0ADhSETB EA ;重新允许中断必须在4个时钟周期之内写0xDE和写0xAD,否则禁止操作将被忽略。

在这个过程期间应禁止中断,以避免两次写操作之间延时。

(3)锁定WDT向WDTCN写入0xFF将使禁止功能无效。

WDT一旦被锁定,在下一次复位之前禁止操作将被忽略,写0xFF并不允许或复位看门狗定时器。

如果使用程序想一直使用看门狗,则应在初始化代码中向WDTCN写入0Xff.(4)设置WDT定时间隔WDTCN.[2~0]控制看门狗的超时间隔。

C8051F020实验板使用要领.

C8051F020实验板使用要领.

C8051F020实验板使用要领
1.上电顺序:
注意电脑关机并将实验板上拨动开关打在关闭状态
接上电脑串口电缆(如电脑没有串口可使用高质量的USB→串口线)
连接EC5仿真器到板上的JTAG接口和电脑的空闲USB接口
连接自制的小板到对应模拟或数字端口,检查连接和电源的正确性
打开电脑,连接9v电源到实验板并打开实验板电源开关
电脑运行Keil UV2,编译自己的程序并进入调试状态
(此时可以看到EC5上的对应指示灯亮和程序在板上的执行)
运行串口调试精灵监控串口状态
2.关机顺序:
关闭串口调试精灵
停止并关闭UV2调试
关闭实验板电源
插拔自制小板
关闭电脑或断开USB虚拟串口
插拔串口电缆
3.注意事项
建议设置uv2调试结束断开仿真器EC5电源
没有关闭串口精灵的情况下切断通讯容易引起电脑串口被误占用
没有关闭uv2调试的情况下直接实验板断电会使uv2进入假死机
串口带电且无热插拔功能,串口在没有断开供电的情况下不允许插拔!
自制小板在接上实验板前后未通电情况下必须仔细检查有无短路或接错!
实验板GPIO引脚间在无特殊要求下不要短接,也不允许通过自制小板短接!
自制小板不能将电源(高压、大电流)通过连线直接接上实验板的GPIO端口!
以上2条也适合于实验板上引出的C8051F020的其他引脚(特别是模拟引脚)!
C8051F020的GPIO引脚建议禁止内部弱上拉,禁止推挽,通过510电阻连接小板。

C8051F020单片机的RS485串行通信设计

C8051F020单片机的RS485串行通信设计

C8051F020单片机的RS485串行通信设计关键字:单片机串行通信RS485l 引言随着计算机技术和测控技术的不断发展,在以单片机为核心的数据采集系统中,需要实现单片机和计算机之间的数据交换,并以此来发挥单片机和计算机各自的长处,提升整个系统的性能价格比。

在计算机网络和工业控制系统中,经常需要采用串行通信来实现远程数据传输。

目前,有多种接口标准可用于串行通信,包括RS232、RS422、RS485等。

RS232是最早的串行接口标准,在短距离、较低波特率串行通信中得到了广泛应用。

但是,RS232通信存在着传输速度慢、传输距离短、信号容易受到干扰等不足,其应用局限性已日益突出。

而RS485通信采用差分方式来消除噪声,即信号在发送前会分解为正负2条线路,当到达接收端时将信号相减,使噪声相互抵消,还原成原来的信号,这种方式对共模干扰抑制能力较强,已广泛应用于工业控制等领域。

要实现单片机与计算机之间的RS485通信,一般可以采用2种方法:一种方法是在单片机与计算机两端分别采用RS232与RS485电平转换装置;另一种方法是采用RS485通信卡,并将其插在计算机主板上。

采用前一种方法的优点是硬件装置安装简便,软件编程相对简单;缺点是通信速率被限制在20 kb/s以内。

第二种方法的优点是通信距离较远,速率较高,可达10 Mb/s;缺点是需要安装通讯卡和驱动程序,并进行必要的设置。

本文采用第二种方法。

2 总体架构在某型电子设备研制中,选用美国Cygnal公司生产的一种soc型8位单片机C8051F020,对测控系统进行数据采集。

该单片机是C8051F系列的F02X子系列,其性价比在工业控制领域具有较强的竞争力。

它是完全集成的混合信号系统级芯片,具有与8051指令集完全兼容的CIP一51内核,对于熟悉51单片机的技术人员来说,在硬件设计及软件编程上大大提高了开发效率。

测控计算机采用研华的IPC-610工控机,并选用PCL一846B通信卡进行RS485串行数据通信,该通信卡包含4通道,每个通道可以对32个节点进行通信。

C8051F020实验指导书

C8051F020实验指导书

盛年不重来,一日难再晨。

及时宜自勉,岁月不待人。

单片机实验指导书目录第一章:实验设备简介 (1)1.1 系统实验设备的组成 (1)1.2 Silicon Labs C8051F 单片机开发工具简介 (1)1.3 DICE-C8051F嵌入式实验/开发系统简介 (3)第二章集成开发环境KEIL C软件使用指南 (7)2.1 KEIL C软件具体使用说明 (7)第三章实验指导 (20)3.1 C8051F 单片机I/O 口交叉开关设置 (20)3.2 数字I/O端口实验 (22)3.3 定时器实验 (24)3.4 外部中断实验 (27)3.5 键盘显示实验 (29)3.6 六位动态LED数码管显示实验 (31)3.7 RS3232串口通讯实验 (33)3.8 综合设计 (35)使用特别说明:(1) 每次实验前,请仔细阅读实验指导,连线完毕,检查无误后,方可打开电源。

即连线时必须在断电状态下。

(2) 程序运行过程中,不要关闭电源,如果要断电,必须停止运行程序,并且退出程序调试状态,否则会引起KEIL C软件非正常退出,甚至引起DICE-EC5仿真器工作异常。

(3) 如出现上述(2)的的误操作,引起DICE-EC5仿真器工作异常,可对DICE-EC5仿真器进行复位。

(在光盘中找到文件夹“USB Reset”中的“USB Debug Adapter Firmware Reset”文件,双击运行,在弹出的对话框中点击“Update firmware”按钮,在提示成功后,点击“OK”按钮,退出复位程序。

DICE-EC5仿真器即可正常工作。

在下一次调试、下载程序时会提示“Do you want to update serial adapter now? ”,点击“确定”即可。

第一章:实验设备简介1.1 系统实验设备的组成DICE-C8051F嵌入式实验/开发系统由C8051F020 CPU 板、DICE-EC5仿真器和系统实验板三部分组成,应用该设备可进行片上系统单片机较典型应用的实验,请参见以下介绍。

C8051单片机实验指导书

C8051单片机实验指导书
1.2.1 开发工具概述 ................................................................................................................................. 4 1.2.2 开发工具主要技术指标 ................................................................................................................. 4 1.2.3 IDE 软件运行环境....................................................................................................................... 4 1.2.4 开发工具与 PC 机硬件连接........................................................................................................... 4 1.3 NMC-20XX 核心模块简介 ..................................................................................................................... 5 1.3.1 核心模块概述 ...............................................................................................................

C8051F020 最小系统 实验指导手册

C8051F020 最小系统 实验指导手册

工程的建立及配置........................................................................................7 Configuration Wizard 2 的使用介绍............................................................9 液晶显示......................................................................................................15 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 液晶显示模块简介............................................................................15 硬件连接............................................................................................16 地址计算方法....................................................................................17 RA8835 底层驱动程序..................................................................... 18 程序示例............................................................................................19 综合程序示例....................................................................................21 行列扫描原理介绍............................................................................23 硬件连接............................................................................................23 软件流程图........................................................................................24 示例源程序........................................................................................25 示例工程............................................................................................26 硬件连接............................................................................................30 软件设计............................................................................................30 相关寄存器设置................................................................................31 程序示例............................................................................................34
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验指导书目录第一章:实验设备简介 (1)1.1 系统实验设备的组成 (1)1.2 Silicon Labs C8051F 单片机开发工具简介 (1)1.3 DICE-C8051F嵌入式实验/开发系统简介 (3)第二章集成开发环境KEIL C软件使用指南 (7)2.1 KEIL C软件具体使用说明 (7)第三章实验指导 (19)3.1 C8051F 单片机I/O 口交叉开关设置 (19)3.2 数字I/O端口实验 (21)3.3 定时器实验 (23)3.4 外部中断实验 (25)3.5 键盘显示实验 (27)3.6 六位动态LED数码管显示实验 (29)3.7 RS3232串口通讯实验 (31)3.8 综合设计 (33)使用特别说明:(1) 每次实验前,请仔细阅读实验指导,连线完毕,检查无误后,方可打开电源。

即连线时必须在断电状态下。

(2) 程序运行过程中,不要关闭电源,如果要断电,必须停止运行程序,并且退出程序调试状态,否则会引起KEIL C软件非正常退出,甚至引起DICE-EC5仿真器工作异常。

(3) 如出现上述(2)的的误操作,引起DICE-EC5仿真器工作异常,可对DICE-EC5仿真器进行复位。

(在光盘中找到文件夹“USB Reset”中的“USB Debug Adapter Firmware Reset”文件,双击运行,在弹出的对话框中点击“Update firmware”按钮,在提示成功后,点击“OK”按钮,退出复位程序。

DICE-EC5仿真器即可正常工作。

在下一次调试、下载程序时会提示“Do you want to update serial adapter now? ”,点击“确定”即可。

第一章:实验设备简介1.1 系统实验设备的组成DICE-C8051F嵌入式实验/开发系统由C8051F020 CPU 板、DICE-EC5仿真器和系统实验板三部分组成,应用该设备可进行片上系统单片机较典型应用的实验,请参见以下介绍。

1.2 Silicon Labs C8051F 单片机开发工具简介1.2.1 开发工具概述Silicon Labs 的开发工具实质上就是计算机IDE 调试环境软件及计算机USB 到C8051F单片机JTAG 口的协议转换器(DICE-EC5)的组合。

Silicon Labs C8051F 系列所有的单片机片内均设计有调试电路,该调试电路通过边界扫描方式获取单片机片内信息,通过4 线的JTAG接口与开发工具连接以便于进行对单片机在片编程调试。

DICE-C8051F嵌入式实验/开发系统中的C8051F020 CPU 板上的单片机为C8051F 系列中的F020。

仿真器(DICE-EC5)一端与计算机相连,另一端与C8051F 单片机JTAG 口相连,应用Keil 的uVision2 调试环境就可以进行非侵入式、全速的在系统编程(ISP)和调试。

Silicon Labs 开发工具支持观察和修改存储器和寄存器支持断点、观察点、堆栈指示器、单步、运行和停止命令。

调试时不需要额外的目标RAM、程序存储器、定时器或通信通道,并且所有的模拟和数字外设都正常工作。

1.2.2 开发工具主要技术指标●支持的目标系统:所有C8051Fxxx 系列单片机。

●系统时钟:最大可达25Mhz。

●通过USB 接口与PC 机连接。

●支持汇编语言和C51 源代码级调试。

●工具支持(Keil C)。

●1.2.3 IDE 软件运行环境要求PC 机能够运行开发工具软件并能与串行适配器通信。

对PC 机有如下系统要求:● Windows 95/98/Me/NT/2000/XP 操作系统● 32Mb RAM● 40Mb 自由硬盘空间●空闲的USB 口1.2.4 开发工具与PC 机硬件连接在系统编程和调试环境如图下所示。

硬件连接及软件安装:●将USB 串行电缆的一端与教学机的DICE-EC5仿真器USB接口连接;●连接USB 串行电缆的另一端到PC;●给目标系统上电;●插入CD 并运行“SETUP.EXE”,将IDE 软件安装到您的PC 机;●在PC 机的开始菜单的“程序”项中选择keil uVision2 图标,运行IDE 软件。

1.3 DICE-C8051F嵌入式实验/开发系统简介1.3.1 C8051F020 CPU 板概述C8051F020 CPU 板是为了便于安装而设计的;C8051F020 CPU 板是将C8051F020的所有引脚(100 个引脚)引到四个双排针;该四组双排针可与不同用户设计的应用系统连接,如在该教学系统上将和系统实验板连接。

说明: C8051F020 CPU 板是将C8051F020的所有引脚(100 个引脚)引到四个双排针,分别为JX1、JX2、JX3、JX4,四个双排针的内圈100个排针(内圈每个引脚注明引脚含义)与C8051F020芯片的对应引脚连接。

而四个双排针的外圈100个排针(外圈标有引脚号)部分引脚悬空,而大部分引脚已经与实验仪上的实验模块连接。

(具体连接请看硬件连接原理图)。

因此,本实验/开发系统大部分实验模块只要将其相应引脚的短路块插好,即可实现与C8051F020单片机系统的连接。

而一部分独立实验模块,必须通过导线与C8051F020单片机连接,连接前把要用到的引脚上的短路块拔掉,然后用导线将内圈对应引脚与外部模块连接。

实验完毕后再把相应的短路块插好。

1.3.2 C8051F020 片上系统单片机片内资源①、模拟外设(1) 逐次逼近型8 路12 位ADC0转换速率最大100ksps可编程增益放大器PGA温度传感器(2) 8 路8 位ADC1 输入与P1 口复用转换速率500ksps可编程增益放大器PGA(3) 两个12 位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 datasheet1.3.3 DICE-C8051F嵌入式实验/开发系统硬件组成(1)CPU板:CPU核心模块采用C8051F020芯片,该芯片是C8051F系列单片机中功能最为其全的一款;(2)片内:64K FLASH,4K XRAM片外扩展:256K FLASH,32K XRAM(3)CPU板C8051F020芯片I/0引脚全部引出,可以和用户外部电路连接;(4)实验系统带有JTAG接口,并配有DICE-EC3型USB高速通讯仿真器,通过4脚的JTAG接口可以进行非侵入式、全速的在线系统调试、仿真;(5)4*4阵列式键盘;(6)8位逻辑电平开关输出、8位LED逻辑电平显示;(7)6位动态八段LED数码管;(8)2路单脉冲信号发生电路和1路8MHZ时钟发生电路;(9)时钟分频电路;(10)模拟量发生器电路和逻辑笔电路;(11) 8*8LED点阵及驱动电路;(12) 128*64 LCD液晶显示屏;(13)蜂鸣器电路;(14)直流电机测速电路;(15)四相步进电机及驱动电路;(16)继电器电路及接口;(17)双通道RS-232 接口;(18)SPI 接口,LED 数码管显示;(19)IIC 接口,接24C01 串行EEPROM;(20)IIC 接口,PCF8563日历时钟;(21)8 路12 位AD,2 路12 位DA 接口;(22)D12 USB 从机通信;(23)SL811 USB 主机通信;(24)RTL8019 10M 以太网通信;1.3.4 DICE-C8051F嵌入式实验/开发系统地址及初始化说明●地址分配如下:0x0000-0x7fff,数据存储器SRAM地十范围0x8000-0x87ff,D12_CS片选0x8800-0x8fff,SL811_CS片选0x9000-0x97ff,RTL8019_CS片选0x9800-0x9fff,LCD_CS片选0xA000-0xA7ff,保留0xA800-0xAfff,保留0xB000-0xB7ff,保留0xB800-0xBfff,保留0xc000-0xffff(x16),Flash,片选地址由P4 低4 位端口确定●系统初始化:C8051F020 CPU板使用外部22.1184M 晶振,系统初始化后应用外部22.1184M 晶振,如果不进行系统初始化,系统将使用内部晶振,默认值为2M,也可以通过设置OSCICN 寄存器改变内部晶振的大小(可选值为2M、4M、8M、16M)。

●端口初始化:我们根据c8051F020 CPU板及实验系统设计方案,配置交叉开关,为UART0、SPI、SMBus、UART1、CEX0、CP0、T0、T1、INT0、INT1、INT2 和INT3 分配端口引脚。

另外,我们将外部存储器接口配置为复用方式并使用高端口。

配置步骤如下:(1) 按CP0E=1,ECI0E=0,PCA0ME=001,UART0EN=1,SPI0EN=1,SMB0EN=1 设置XBR0=0x8f;(2) 按SYSCKE=0,T2EXE=0,T2E=0,INT1E=1,T1E=1,INT0E=1,T0E=1,CPI1E=0 设置XBR1=0x1e;(3) 按WEAKPUD=0,XBARE=1,位5为0 用T4EXE=0,T4E=0,UART1E=1,EMIFLE=0,CNVSTE=0 设置XBR2=0x44(4) 将外部存储器接口配置为复用方式,并使用高端口,有PRTSEL=1,EMD2=0。

(5) 将作为数字输入的端口1 引脚配置为数字输入方式,设置P1MDIN 为0xFF。

(6) 通过设置P0MDOUT=0x34 、P1MDOUT=0xfd 、P2MDOUT= 0xf0 、P3MDOUT =0xff,将低端口输出方式设置为推挽方式。

设置高端口输出方式P74OUT=0xf7;总线输出方式应考虑工作频率和驱动能力,在高速和高驱动时总线应设置为推挽方式,在低速和低驱动时漏极开路也可满足要求,但稳定性不高。

(7) 设置外部存储器配置EMI0CF=0x2d;设置外部存储器时序控制EMI0TC=0x9e;如果LCD 不能正常显示可以使EMI0CF=0x2f,EMI0TC=0xff 设置为最大值;也可以减小外部晶振或使用内部晶振。

相关文档
最新文档