在KEIL4环境下开发C8051F系列的单片机
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,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。
C8051Fxx单片机开发工具及调试技术
关于开发工具及调试的技术问答1、问:C8051FXX系列单片机的开发工具是不是串行适配器(PC机串口和JTAG协议转换适配)相同而目标版不同?答:开发套件中串行适配器(核心部件)是通用的,只是目标版不同。
只要您购买一套开发套件,就可以开发全系列单片机,只要将集成开发环境软件升级就可以了。
为了加快您的开发进程,您只要购买带有相关型号单片机的目标板就可以了。
2、问:C8051F单片机是怎样调试用户系统的?答:C8051F单片机是用开发套件来调试用户系统的。
单片机开发套件包括开发软件IDE(集成开发环境),ML-EC3至PC机USB口和单片机JTAG接口的协议转换模块和一个目标板(板上有C8051FMCU)。
IDE中集成编译器,汇编器和连接器,支持汇编语言和C语言(第三方支持);ML-EC3是从USB口到JTAG协议的转换模块。
目标板上带有一块相应的C8051FMCU和一些简单的外围电路构成一个最小单片机系统,并将所有引脚连接到插座。
C8051F单片机内集成了一个以JTAG协议为基础的调试电路,这样在调试您的系统时,不需要专用仿真芯片、目标仿真头及目标RAM等。
您在IDE上编译生成程序代码后,通过ML-EC3(连接到计算机USB口和JTAG接口)将代码下载到用户系统板的C8051FMCU的Flash存储器中,然后您就可以调试您的目标系了。
3、问:可以用KeiluVision2IDE调试全系列C8051F单片机应用系统吗?答:可以。
但必须安装动态链接库。
该驱动程序可以在我公司的网站上下载。
4、问:如何将绝对目标代码转换成hex格式文件?答:第一,可以使用KEILC,在编译时直接生成。
第二,使用OH51(DOS命令)将目标文件转换成hex格式的文件。
Oh5Linputfile〔hexfile〕第三,在IDE环境中生成HEX文件﹙1﹚.在TOOL菜单中选择ADDREMOVEUSERTOOL﹙2﹚.点击ADD按钮,增加一个MENUTEXT(名称可以任何输入)﹙3﹚.在TOOLS里选择OH51.EXE文件(此文件在KEIL的BIN目录中有,必须将此文件放在项目所在目录)﹙4﹚.在ARGUMENTS里输入文件名或项目名﹙5﹚.在DIROF里输入HEX文件的保存目录5、问:Silabs IDE中带有4K代码限制版的KeilC51,那么如何将无限制版的KeilC51嵌入到Silabs IDE中呢?答:先将您完全版的KeilC51安装到您的PC机中;然后进入Silabs IDE界面,选择Project-﹥TOOLChainIntegration弹出对话框,单击Browse按钮,更换A51.EXE和BL51.EXE的路径(换成“Keil安装目录”/c51/bin)即可。
单片机IIC程序设计用c8051f单片机
#include <c8051f020.h> // SFR declarations//------------------------------------------------------------------------------------// Global CONSTANTS//------------------------------------------------------------------------------------#define WRITE 0x00 // SMBus WRITE command#define READ 0x01 // SMBus READ command// Device addresses (7 bits, lsb is a don't care)#define CLOCK3530_ADDRESS_RESET 0x60 //1 ack#define CLOCK3530_ADDRESS_STATUS 0x62 //2 ack#define CLOCK3530_ADDRESS_DATEHOUR 0x64 //8 ack year month day week hour minute second#define CLOCK3530_ADDRESS_HOUR 0x66 //4 ack hour minute second#define CLOCK3530_ADDRESS_INT1 0x68 //3 ack#define CLOCK3530_ADDRESS_INT2 0x6A //3 ackunion{unsigned char ClockString[7];struct RealClock{unsigned char Year,Month,Day,Week,Hour,Minute,Second;} RT;} RealTime;// SMBus states:// MT = Master Transmitter// MR = Master Receiver#define SMB_BUS_ERROR 0x00 // (all modes) BUS ERROR#define SMB_START 0x08 // (MT & MR) START transmitted#define SMB_RP_START 0x10 // (MT & MR) repeated START#define SMB_MTADDACK 0x18 // (MT) Slave address + W transmitted;// ACK received#define SMB_MTADDNACK 0x20 // (MT) Slave address + W transmitted;// NACK received#define SMB_MTDBACK 0x28 // (MT) data byte transmitted; ACK rec'vd #define SMB_MTDBNACK 0x30 // (MT) data byte transmitted; NACK rec'vd#define SMB_MTARBLOST 0x38 // (MT) arbitration lost#define SMB_MRADDACK 0x40 // (MR) Slave address + R transmitted;// ACK received#define SMB_MRADDNACK 0x48 // (MR) Slave address + R transmitted;// NACK received#define SMB_MRDBACK 0x50 // (MR) data byte rec'vd; ACK transmitted #define SMB_MRDBNACK 0x58 // (MR) data byte rec'vd; NACK transmitted//-----------------------------------------------------------------------------------//Global V ARIABLES//-----------------------------------------------------------------------------------char COMMAND; // Holds the slave address + R/W bit for use in the SMBus ISR. unsigned char *I2CDataBuff;char BYTE_NUMBER; // Used by ISR to check what data has just been// sent - High address byte, Low byte, or data byteunsigned char HIGH_ADD, LOW_ADD; // High & Low byte for EEPROM memory addressbit SM_BUSY; // This bit is set when a send or receive// is started. It is cleared by the// ISR when the operation is finished.//------------------------------------------------------------------------------------// Function PROTOTYPES//------------------------------------------------------------------------------------void SMBus_ISR (void);//------------------------------------------------------------------------------------// MAIN Routine//------------------------------------------------------------------------------------//// Main routine configures the crossbar and SMBus, and tests// the SMBus interface between the three EEPROMsvoid ResetRealClock(void){while (SM_BUSY); // Wait for SMBus to be free.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 0; // 2 address bytes.COMMAND = (CLOCK3530_ADDRESS_RESET | READ); // Chip select + READ STA = 1; // Start transferwhile (SM_BUSY); // Wait for transfer to finish }//======================写S-3530A内部实时数据寄存器程序=====================//功能:将设定年、月、日、星期、时、分、秒数据写入S-3530A |//入口:发送数据放在年、月、日、星期、时、分、秒各寄存器|//出口:NONE |//===================================================================== =====void SetRealClock(void){while (SM_BUSY); // Wait for SMBus to be free.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 7; // 2 address bytes.COMMAND = (CLOCK3530_ADDRESS_DATEHOUR | WRITE); // Chip select + WRITEI2CDataBuff = &RealTime.ClockString[0]; // Data to be writenSTA = 1; // Start transfer}//==================读S-3530A实时数据寄存器子程序===========================//功能:从S-3530A读入当前时间数据|//入口:NONE |//出口:接收数据放在年、月、日、星期、时、分、秒各寄存器|//===================================================================== =====void GetRealClock(void){while (SM_BUSY); // Wait for SMBus to befree.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 7; // 2 address bytes.COMMAND = (CLOCK3530_ADDRESS_DATEHOUR | READ); // Chip select + READI2CDataBuff = &RealTime.ClockString[0]; // Data to be writenSTA = 1; // Start transferwhile (SM_BUSY); // Wait for transfer to finish }//============================写状态寄存器程序==============================//功能:读/写S-3530A状态寄存器,对S-3530A进行设置|//入口:NONE 出口:NONE | //===================================================================== =====unsigned char GetRealClockStatus(void){unsigned char result;while (SM_BUSY); // Wait for SMBus to be free.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 1;COMMAND = (CLOCK3530_ADDRESS_STATUS | READ);I2CDataBuff = &result;STA = 1; // Start transferwhile (SM_BUSY); // Wait for transfer to finish return result;}void SetRealClockStatus(unsigned char status){while (SM_BUSY); // Wait for SMBus to be free.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 1;COMMAND = (CLOCK3530_ADDRESS_STA TUS | WRITE);I2CDataBuff = &status;STA = 1; // Start transfer}/*void SetRealClockINT1(unsigned int Int1){while (SM_BUSY); // Wait for SMBus to be free.SM_BUSY = 1; // Occupy SMBus (set to busy)SMB0CN = 0x44; // SMBus enabled, ACK on acknowledge cycleBYTE_NUMBER = 2;COMMAND = (CLOCK3530_ADDRESS_INT1 | WRITE);I2CDataBuff = (unsigned char*)&Int1;STA = 1; // Start transfer}*/#include "INTRINS.H"unsigned char revolve(unsigned char val){char i;unsigned char val1=0;for (i=0;i<8;i++){if (val&0x1)val1++;val1=_crol_(val1,1);val=_cror_(val,1);}val1=_cror_(val1,1);return val1;}/*-- 文字: 时--*/char code Shi[]={0x00,0x00,0xFC,0x44,0x44,0xFC,0x00,0x08,0x48,0x88,0x08,0xFF,0x08,0x08,0x08,0x00, 0x00,0x00,0x1F,0x04,0x04,0x0F,0x00,0x00,0x00,0x11,0x20,0x1F,0x00,0x00,0x00,0x00, };/*-- 文字: 钟--*/char code Zhong[]={0x00,0x60,0x38,0xE7,0x24,0x24,0x04,0x00,0xF8,0x88,0x88,0xFF,0x88,0x88,0xF8,0x00, 0x00,0x01,0x01,0x3F,0x11,0x09,0x01,0x00,0x01,0x00,0x00,0x3F,0x00,0x00,0x01,0x00, };void LCD_WriteHZ(char x,char y,char *Dot);void LCD_DispChar(char x,char y,char ch); //128*64 取值x=0-128 y=0-8void InitLCD(void);void Delay1ms(unsigned char T);void TestI2C (void){unsigned char var ;WDTCN = 0xde; // disable watchdog timerWDTCN = 0xad;OSCICN |= 0x03; // Set internal oscillator to highest setting// (16 MHz)XBR0 |= 0x07; // Route SMBus to GPIO pins through crossbarXBR2 |= 0x44; // Enable crossbar and weak pull-upsP0MDOUT |= 0x1D;P1MDOUT |= 0x01;SMB0CN = 0x44; // Enable SMBus with ACKs on acknowledge cycleSMB0CR = -80; // SMBus clock rate = 100kHz.EIE1 |= 2; // SMBus interrupt enableEA = 1; // Global interrupt enableSM_BUSY = 0; // Free SMBus for first transfer.// SetRealClockINT1(0x8000);var = GetRealClockStatus();ResetRealClock();var = GetRealClockStatus();SetRealClockStatus(0xc2);var = GetRealClockStatus();GetRealClock();RealTime.RT.Year=0x02;RealTime.RT.Month=0x12;RealTime.RT.Day=0x010;RealTime.RT.Week=0x05;RealTime.RT.Hour=0x11;RealTime.RT.Minute=0x59;RealTime.RT.Second=0x57;SetRealClock();GetRealClock();InitLCD();LCD_WriteHZ(0,0,Shi);LCD_WriteHZ(16,0,Zhong);//在0,2处显示00:00:00LCD_DispChar(0,2,0); //128*64 取值x=0-128 y=0-8LCD_DispChar(8,2,0);LCD_DispChar(16,2,10);LCD_DispChar(24,2,0);LCD_DispChar(32,2,0);LCD_DispChar(40,2,0xa);LCD_DispChar(48,2,0);LCD_DispChar(56,2,0);//在0,4处显示02/01/01LCD_DispChar(0,4,0); //128*64 取值x=0-128 y=0-8LCD_DispChar(8,4,2);LCD_DispChar(16,4,0xb);LCD_DispChar(24,4,0);LCD_DispChar(32,4,1);LCD_DispChar(40,4,0xb);LCD_DispChar(48,4,0);LCD_DispChar(56,4,1);for (;;){GetRealClock();LCD_DispChar(0,2,(RealTime.RT.Hour>>4)&0x03);//(RealTime.RT.Hour>>4)&0x0f); //128*64 取值x=0-128 y=0-8LCD_DispChar(8,2,RealTime.RT.Hour&0x0f);LCD_DispChar(24,2,(RealTime.RT.Minute>>4)&0x0f);LCD_DispChar(32,2,RealTime.RT.Minute&0x0f);LCD_DispChar(48,2,(RealTime.RT.Second>>4)&0x0f);LCD_DispChar(56,2,RealTime.RT.Second&0x0f);//在0,4处显示02/01/01LCD_DispChar(0,4,(RealTime.RT.Year>>4)&0x0f);LCD_DispChar(8,4,RealTime.RT.Year&0x0f);LCD_DispChar(24,4,(RealTime.RT.Month>>4)&0x0f);LCD_DispChar(32,4,RealTime.RT.Month&0x0f);LCD_DispChar(48,4,(RealTime.RT.Day>>4)&0x0f);LCD_DispChar(56,4,RealTime.RT.Day&0x0f);Delay1ms(100);}}//------------------------------------------------------------------------------------// Interrupt Service Routine//------------------------------------------------------------------------------------void SMBUS_ISR (void) interrupt 7{switch (SMB0STA){ // SMBus 状态码SMB0STA 寄存器// 主发送器/接收器起始条件已发送case SMB_START:SMB0DAT = COMMAND ; // 装入要访问的从器件的地址STA = 0; // 手动清除START 位break;//主发送器/接收器重复起始条件已发送// 该状态只应在读操作期间出现在存储器地址已发送并得到确认之后?case SMB_RP_START:SMB0DAT = COMMAND; // COMMAND 中应保持从地址+ R.STA = 0;break;// 主发送器从地址+ WRITE 已发送收到ACKcase SMB_MTADDACK:// 主发送器数据字节已发送收到ACKcase SMB_MTDBACK:if (BYTE_NUMBER){SMB0DAT = revolve(*I2CDataBuff); // If R/W=WRITE, load byte to write.I2CDataBuff++;BYTE_NUMBER--;}else{STO = 1; SM_BUSY = 0; // Free SMBus}break;// 主发送器从地址+ WRITE 已发送收到NACK// 从器件不应答发送STOP + START 重试case SMB_MTADDNACK:STO = 1; STA = 1;break;// 主发送器数据字节已发送收到NACK// 从器件不应答发送STOP + START 重试case SMB_MTDBNACK:STO = 1; STA = 1;break;// 主发送器竞争失败// 不应出现如果出现重新开始传输过程case SMB_MTARBLOST:STO = 1; STA = 1;break;// 主接收器从地址+ READ 已发送,收到ACKcase SMB_MRADDACK:AA = 1; // 在应答周期ACKif (!BYTE_NUMBER){STO = 1; SM_BUSY = 0; // 释放SMBus}break;// 主接收器从地址+ READ 已发送收到NACK// 从器件不应答发送重复起始条件重试case SMB_MRADDNACK:STA = 1;break;// 收到数据字节ACK 已发送// 该状态不应出现因为AA 已在前一状态被清0 如果出现发送停止条件case SMB_MRDBACK:if (BYTE_NUMBER){*I2CDataBuff=revolve(SMB0DA T);I2CDataBuff++;BYTE_NUMBER--;}if (!BYTE_NUMBER) AA= 0;break;// 收到数据字节NACK 已发送// 读操作已完成读数据寄存器后发送停止条件case SMB_MRDBNACK:STO = 1;SM_BUSY = 0; // 释放SMBusbreak;// 在本应用中所有其它状态码没有意义通信复位default:STO = 1; // 通信复位SM_BUSY = 0;break;}SI=0; // 清除中断标志}/*{switch (SMB0STA){ // Status code for the SMBus (SMB0STA register) case SMB_START:SMB0DAT = COMMAND; // COMMAND should hold slave address + R.break;case SMB_MTADDNACK:STO = 1;STA = 1;break;case SMB_RP_START:// SMB0DAT = COMMAND; // COMMAND should hold slave address + R.// STA = 0;// break;case SMB_MTADDACK:case SMB_MTDBACK:if (BYTE_NUMBER){if (COMMAND & 0x01) // If R/W=READ,{STA = 1;}else{SMB0DAT = *I2CDataBuff; // If R/W=WRITE, load byte to write.I2CDataBuff++;BYTE_NUMBER--;}}else{STO = 1;SM_BUSY = 0; // Free SMBus}break;// Master Transmitter: Data byte transmitted. NACK received.// Slave not responding. Send STOP followed by START to try again.case SMB_MTDBNACK:STO = 1;STA = 1;break;// Master Transmitter: Arbitration lost.// Should not occur. If so, restart transfer.case SMB_MTARBLOST:STO = 1;STA = 1;break;// Master Receiver: Slave address + READ transmitted. NACK received.// Slave not responding. Send repeated start to try again.case SMB_MRADDNACK:STA = 1;break;// Data byte received. ACK transmitted.// State should not occur because AA is set to zero in previous state.// Send STOP if state does occur.case SMB_MRDBACK:STO = 1;SM_BUSY = 0;break;// Master Receiver: Slave address + READ transmitted. ACK received.// Set to transmit NACK after next transfer since it will be the last (only) byte.case SMB_MRADDACK:// AA = 0; // NACK sent on acknowledge cycle.// break;// Data byte received. NACK transmitted.// Read operation has completed. Read data register and send STOP.case SMB_MRDBNACK:if (BYTE_NUMBER){if (COMMAND & 0x01) // If R/W=READ,{*I2CDataBuff=SMB0DA T;I2CDataBuff++;}BYTE_NUMBER--;}else{STO = 1;SM_BUSY = 0; // Free SMBus}break;// All other status codes meaningless in this application. Reset communication.default:STO = 1; // Reset communication.SM_BUSY = 0;break;}SI=0; // clear interrupt flag }*/。
C8051F310开发板调试
以31kou27g.c(附)为例,介绍一下有关c8051f310开发板的调试流程,软件配置等相关的一些经验。
(1)硬件电路连接好后,首先建立一个工程,取名31kou27g保存,然后添加该C文件到新建的工程中。
注意事项:当建立工程时,会出现一个选择芯片型号的窗口,这是要选择芯片类型为c8051f310:(2)进行调试前的相关配置:点击Target1右边第一个图标,出现下面的窗口第一项Device因为前面已经选好了,就不用再管了。
点击Output将打勾选中。
下面点击Debug:这里我们因为连接了硬件,所以选择,注意下拉列表中选择C8051Fxxx Driver。
并且在右边的Setting中选择(3)所有这些配置好以后,点OK,进行DEBUG调试,出现下面的界面,点击单步运行,或者按F10(F11),随着不断运行,可以看到两个小灯不断亮灭。
点击全速运行,然后可以看到小灯自己不断闪烁。
另外点解Load可以将Hex文件烧写进芯片,就不用其他烧写工具了,很方便。
如果直接下载,不经过DEBUG,还需要进行一些设置:选择最右边的这个选项,如下载设置附:keil4的安装破解(1)首先,下载keil4安装(2)打开出现如下界面需要填写CID号,打开keil4,选择License Management将CID号复制,粘贴到上面,点击generate,将产生的序列号复制到New License ID Code,点击Add LIC,设置好以后点击Close.这样就设置好了,可以放心使用。
另外还有很重要的一个步骤,就是安装调试器驱动驱动安装位置要选择在keil软件的安装位置下!正确安装软件及驱动后,就可找到的。
C8051F-410编译环境Silicon Laboratories IDE以及编译程序Keil_c51_v802a破解安装办法
C8051F-410编译下载程序安装流程:一、安装主程序Silicon Laboratories IDE将新华龙电子光盘放入光驱,一般电脑会弹出光盘自动运行界面,如图1所示,图1 选择运行autorun.exe,出现新华龙电子光盘的初始界面,如图2所示图2选择第一项-安装Silabs IDE,(可以选择其他选项查看光盘目录或文件),便开始了主程序的安装过程。
按照一般程序安装过程进行即可,无须改动,点击Finish完成主程序Silicon Laboratories IDE的安装过程。
附注:如果电脑没有自动弹出图1所示的自动播放页面,那么打开光盘目录,如图3所示,图3 点击autorun.exe文件(左边为光盘符号),则会出现图2所示的新华龙电子光盘的初始页面二、安装辅助编译程序Keil_c51_v802a-μVison3打开名为Keil_c51_v802a的文件夹,按照文件夹中的“安装说明.txt”文件进行安装。
在第1步的安装过程中,出现如图4的步骤时,图4 安装路径中磁盘根目录选择C盘,目的是为了和主程序Silicon Laboratories IDE的安装文件C:SiLbabs放在同一个磁盘中。
附注:第2步中将生成的注册码输入后点击Add LIC后可能会出现错误信息,这个可以忽略,接着进行下面的安装步骤。
三、设置主程序参数1.打开主程序Silicon Laboratories IDE(安装程序并没有把图标放置在桌面,需要通过开始菜单,找到“所有程序-Silicon Laboratories-Silicon Laboratories IDE”进行打开),如图5图5打开菜单栏中Project-Tool Chain Intergration,如图6所示图6 在Assembler选项卡中的路径选择C:\Keil\C51\BIN\A51.EXE 在Compiler选项卡中的路径选择C:\Keil\C51\BIN\c51.exe在Linker选项卡中的路径选择C:\Keil\C51\BIN\BL51.EXE修改好之后点OK完成修改(如果界面中三个路径已经是所写的路径,则无需修改)2.回到主程序页面,打开菜单栏Options-Connection Options,出现如图7所示的页面图7在Serial Adapter中选择USB Debug Adapter 1.8.0.0,而在Debug Interface中选择C2,点击OK完成参数修改。
C8051F单片机
5、系统复位
复位电路将控制器置于一个预定的缺省状态。 1)CIP-51 停止程序执行 2) 特殊功能寄存器(SFR)被初始化为所定义的复位值 3)外部端口引脚被置于一个已知状态 4)中断和定时器被禁止。 5)所有的SFR 都被初始化为预定值 6)I/O 端口锁存器的复位值为0xFF,全部为逻辑‘1’,内部 弱上拉有效,使外部I/O 引脚处于高电平状态。 7) MCU 使用内部振荡器运行在2MHz 作为默认的系统时钟。 8) 看门狗定时器被使能,使用其最长的超时时间。
13
1、概述
4、可编程数字I/O •C8051F310有29个I/O引脚(3个8位口和一个5位口) •C8051F31x端口的工作情况与标准8051相似,但有一些 改进。每个端口引脚都可以被配置为模拟输入或数字I/O 。 •被选择作为数字I/O的引脚还可以被配置为推挽或漏极 开路输出。 •在标准8051中固定的“弱上拉”可以被总体禁止,为低 功耗应用提供了进一步节电的能力。
18
3、优先权交叉开关配置
也称为“交叉开关”,按优先权顺序将端口0 – 3 的 引脚分配给器件上的数字外设(UART、SMBus、 PCA、定时器等)。 端口引脚的分配顺序是从P0.0 开始,可以一直分配 到P3.7。为数字外设分配端口引脚的优先权顺序为 UART0具有最高优先权,而CNVSTR具有最低优先 权。 优先权交叉开关的配置是通过3个特殊功能寄存器 XBR0、XBR1、XBR2来实现的,对应使能位被设置 为逻辑‘1’时,交叉开关将端口引脚分配给外设。
◆16K 字节可在系统编程的FLASH 存储器
◆1280字节的片内RAM ◆可寻址64K字节地址空间的外部数据存储器接口
◆硬件实现的SPI、SMBus/ I2C 和两个UART 串行接口
c8051f单片机教程
内容:西安科技大学科技创新实验班C8051F单片机教程之一作者:苗瑞日期:2009-12-8网站:/bbs一、认识C8051F并与51比较本节主要是让初学C8051F单片机的学员有个感性的认识,着重强调理论方面的知识,并通过与51单片机的比较,让大家能有更深刻的体会。
1、C8051F单片机简介C8051Fxxx 系列单片机是完全集成的混合信号系统级芯片,具有与8051 兼容的微控制器内核,与MCS-51 指令集完全兼容。
除了具有标准8052 的数字外设部件之外,片内还集成了数据采集和控制系统中常用的模拟部件和其它数字外设及功能部件MCU 中的外设或功能部件包括模拟多路选择器、可编程增益放大器、ADC、DAC、电压比较器、电压基准、温度传感器、SMBus/ I2C、UART、SPI、可编程计数器/定时器阵列(PCA)、定时器、数字I/O 端口、电源监视器、看门狗定时器(WDT)和时钟振荡器等。
所有器件都有内置的FLASH 程序存储器和256 字节的内部RAM,有些器件内部还有位于外部数据存储器空间的RAM,即XRAM。
C8051Fxxx 单片机采用流水线结构,机器周期由标准的12 个系统时钟周期降为1 个系统时钟周期,处理能力大大提高,峰值性能可达25MIPS。
C8051Fxxx 单片机是真正能独立工作的片上系统(SOC)。
每个MCU 都能有效地管理模拟和数字外设,可以关闭单个或全部外设以节省功耗。
FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051 固件。
应用程序可以使用MOVC 和MOVX 指令对FLASH 进行读或改写,每次读或写一个字节。
这一特性允许将程序存储器用于非易失性数据存储以及在软件控制下更新程序代码。
片内 JTAG 调试支持功能允许使用安装在最终应用系统上的产品MCU 进行非侵入式(不占用片内资源)、全速、在系统调试。
该调试系统支持观察和修改存储器和寄存器,支持断点、单步、运行和停机命令。
C8051F410单片机的设计
目录2011年硬件课程设计任务书 ...................................................... 错误!未定义书签。
摘要 .. (1)第1章概述 (2)1.1硬件实习的目的要求 (2)1.2热电偶简介 (2)1.3热电偶校验仪的意义 (3)第2章硬件设计 (4)2.1控制系统设计 (4)2.2供电系统设计 (5)2.3I/V转换、调整设计 (6)2.4按键接口电路 (8)2.5液晶接口电路 (9)第3章软件设计 (10)3.1C8051F410系统初始化 (10)3.2热电偶分度表查询设计 (11)3.315位DAC输出设计 (12)3.4按键接口设计 (12)3.5液晶显示程序设计 (13)第4章结论 (15)参考文献 (16)附录 (18)摘要在工业生产中,往往需要高温生产环境,此时我们可以利用热电偶直接测量工厂生产温度,并把温度信号转换成电压信号,通过仪表转换成被测介质的温度,以数字的形式直观的展现给作业工人。
基于C8051F410的热偶信号发生器是以C8051F410为控制核心的高精度热电偶温度转换仪。
可以利用它对实际生产使用的热电偶进行检查,以确保工业生产的安全、高效。
此课题设计中主要以Keil uVision开发软件和Protel软件绘制电路图作为开发平台。
设计中主要从硬件和软件两方面进行入手。
硬件设计主要包括对供电系统,I/V转换系统,按键输入和液晶显示系统的设计;软件设计包括C8051F410系统初始化,按键输入设计,热电偶分度表查询设计,DAC输出转换设计和液晶显示程序设计。
通过硬件和软件相结合的方式实现热电偶校验仪的精确工作。
关键词:C8051F410 工业生产热电偶第1章概述1.1 硬件实习的目的要求课程设计是学生理论联系实际的重要实践教学环节,是一次综合性专业设计训练。
通过课程设计可以使我们获得以下几方面能力: 1.进一步复习和巩固加深所学专业基础课及专业课理论知识,培养自身规划设计、理论计算、软件绘图、计算机应用、文献查阅、报告撰写等基本技能;2.培养实践动手能力及独立分析和解决工程实际问题的能力;3.培养团队协作精神、创新意识、严肃认真的治学态度和严谨求实的工作作风。
C8051F040开发系统板使用说明书
第一章 C8051F040开发系统板简介1.1 开发系统的组成Cygnal C8051F040单片机开发系统主要由Cygnal 片上系统单片机开发工具、C8051F040片上系统单片机和系统实验板三部分组成,应用该系统可进行片上系统单片机较典型应用的实验,请参见以下介绍。
1.2 Cygnal C8051F单片机开发工具简介1.2.1 开发工具概述Cygnal 的开发工具实质上就是计算机IDE 调试环境软件及计算机RS-232到C8051F单片机JTAG口的协议转换器(EC2-N1)的组合。
Cygnal C8051F系列所有的单片机片内均设计有调试电路该调试电路通过边界扫描方式获取单片机片内信息,通过10线的JTAG接口与开发工具连接以便于进行对单片机在片编程调试。
该开发系统板中的核心部分是Cygnal C8051F040单片机。
适配器(EC2-N1)一端与计算机相连,另一端与C8051F单片机的JTAG口相连,应用Cygnal 提供的IDE调试环境就可以进行非侵入式、全速的在系统编程(ISP)和调试。
Cygnal 开发工具支持观察和修改存储器和寄存器支持断点、观察点、堆栈指示器、单步、运行和停止命令。
调试时不需要额外的目标RAM、程序存储器、定时器或通信通道,并且所有的模拟和数字外设都正常工作。
1.2.2 开发工具主要技术指标●支持的目标系统:所有C8051Fxxx 系列单片机;●系统时钟:最大可达25MHz;●通过RS232接口与PC机连接;●支持汇编语言和C51源代码级调试;●第三方工具支持Keil C。
1.2.3 IDE 软件运行环境要求PC机能够运行开发工具软件并能与串行适配器通信。
对PC机有如下系统要求:●Windows 95/98/Me/NT/2000/XP 操作系统;●32MB RAM;●40MB 自由硬盘空间;●空闲的COM 口。
1.2.4 开发工具与PC 机硬件连接硬件连接及软件安装:●将JTAG 扁平电缆与串行示配器EC2 连接●将JTAG 扁平电缆的另一端与目标系统连接●将RS232 串行电缆的一端与EC2 连接●连接RS232 串行电缆的另一端到PC●给目标系统上电●插入CD 并运行SETUP.EXE 将IDE 软件安装到您的PC 机●在PC 机的开始菜单的程序项中选择Cygnal IDE 点击Cygnal 图标运行IDE软件。
C8051F单片机-SiliconLaboratoriesIDE的详细使用步骤
Alt+A, Ctrl + F7Alt+M. F7 Ctrl + SHft+F7C8051F 软件使用流程(Silicon IDE )按照步骤操作即可,有图示注:建立Silicon IDE 工程必须首先安装 Silicon IDE 软件1、如下图所示,点击"Project -> New Project"后会弹出新建工程窗口Project Debug Tools Options Window HelpAdd Files to Project., Add Groups to Project*. Assemble/Compile File 潍 8uild/Make Project 疆 Rebuild Project 聂;Stop BuildSave Project Save Project Close Project Reset Projectw* J_oad Recent Project on StartupTool Chain Integration.,. Target Build Configuration,.,T1 II2、如下图所示,在Select Device 项目栏中选择相应的单片机型号(这里以 "C8051F320"为例),在 Projectname 项目栏中填写项目名称(这里以"test"为例),在Location 项目栏中选择需 要保存的路径,这里需要注意一点,保存的路径中最好不要出现中文,否则编译的时候有可能会出错在Project项目栏中可以选择是否需要加载源程序,"Blank Project"代表不加载源程序,"ASM SourceProject"代表加载汇编源程序,"C Source Project'代表加载C源程序(这里以选择"Blank Project"为例),填写完成后点OK3、如下图所示,点击"File -> New File"后会弹出新建项目窗口Lee AtCtrl + N4、如下图所示,在左边选择需要新建项目的类型(这里以选择新建C 文件为例),在 File name 项目栏中填写新建项目的名字(这里以"test"为例),在Location 项目栏中选择工程文 件所在的目录,把下面的两个勾打上,填写完成后点击 OK,这样就把该项目文件加载到新建工 程当中File Edit View £roject Debug Took Qptioi葛 Open File...Close File'I 1 LCtrl+OCtrl + SSave As …, l-M. Save All一 r _1 腕tup…t^b ; Eri nt1 C:\Users\M.\testc2 C:\U5er5\Adminstrator\testxFi I CEname.r Fl皿k FilCane &LASM Source广 ASM Hw"】 i'llC C Header Filv Add t# pr oje V Add to luiZ.1lit|f' \Us ti s'lAdmini strat*r\B&skt op\ , . |Project 5、这样就新建好一个工程并且有工程文件,在下面空白区域可编写代码*-JFile £drt 质w Project Debug Tods Options V/indow Help6、在Silicon IDE 中集成Keil 软件注:编译或仿真工程必须安装 Silicon IDE 以及Keil 软件,在本示例中,软件是 安装在默认路径下(1)、如下图所示,点击"Project -> Tool Chain Integration"后会弹出设置编译环 境窗口Debug Tools Options Window HelpAdd files to Project”AAdd Groups to Projects.盥 Assemble/C om pile File Alt+A PCtrf+F7 .黯 BuiM/Mafce Project Alt+M, F7£] Fite FI Sgp test.,Rebuild Project Ctrl+Shift + F7.;,^top DUildNew Prqjectr.J tri ?V K或“ y e 土,Save ProjectSave Project As…Close ProjectReset Project。
c8051f040单片机开发板设计
中北大学毕业设计开题报告学生姓名:学号:学院、系:专业:设计题目:C8051F040单片机学习板设计指导教师:年3月28日毕业设计开题报告1.结合毕业设计情况,根据所查阅的文献资料,撰写2000字左右的文献综述:文献综述一、课题研究的目的和意义1、单片机单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统[1]。
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑,通常是指个人计算机,简称PC机[2]。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)[3]。
2、从Cygnal C8051F看8位单片机发展之路在嵌入式系统低端的单片机领域,从8位单片机诞生至今,已近30年,在百花齐放的单片机家族中,80C51系列一直扮演着一个独特的角色。
Cygnal 推出C8051F更令业界人士刮目相看。
回顾历史,在Intel公司推出了MCS-51不久便实施了最彻底的技术开放政策;在众多电器商、半导体商的积极参与下,将MCS-51发展成了众多型号系列的80C51 MCU家族。
MCS-51经典的体系结构、极好的兼容性和Intel公司的开放政策不仅使众多厂家参与发展,也诱使半导体厂家对MCS-51实行为所欲为的改造。
由于MCS-51提供的最佳兼容性,使MCS-51在被"肢解"式改造后,还能以不变的指令系统、基本单元的兼容性保持着8051内核的生命延续,并在未来SoC发展中,担任8位CPU 内核的重任。
回顾80C51系列从MCS-51、80C51到C8051F的过程,我们可以深刻领会到单片机发展的一些规律性东西[4]。
C8051F单片机入门学习流程
C8051F单片机入门学习流程一. 准备硬件及软件1.C8051F任意一款开发板(以C8051F330ST为例)。
2.EC3仿真器。
3.Keil C51开发软件到下载二. 开发者具备基本知识1.对MCS51架构单片机有基本了解。
2.有基本C语言及汇编语言编程经验。
3.对单片机开发过程有基本了解。
三. 学习过程如下1.安装Keil C51软件。
(1)找到Keil uv3 (版本 V8.02)软件目录,并点击C51v802.exe安装(2)点击Next(3)选I agree…, 点击Next(4)默认目录(千万不要选择其它目录),点击Next(5)填写用户名等,点击Next(6)开始安装,等待….(7)安装完成,点击Finish(8)打开Keil C软件,选择File/License Management…(9)显示如下:(10)打开Keil_lic_v2.exe,并按如下设置,点击Generate(11)拷贝LIC0内的序列号:(12)粘贴序列号到Keil C软件的New License ID Code下,(13)点击Add LIC,添加序列号成功。
如果添加失败,请重启电脑并进入安全模式,重新安装序列号。
Keil C 软件安装完毕2.安装C8051F单片机针对Keil C51驱动程序。
(1)找到Keil C51驱动程序软件目录,并点击SiC8051F_uv3_v2.31.exe安装(如果前面安装的是Keil uv2, V7.02或V7.50,请点击SiC8051F_uv2_v2.31.exe安装驱动)(2)点击Next(3)点击Next(4)点击Next(5)选择I accept…, 点击Next(6)点击Next(7)点击Next(不要更改目录)(8)开始安装(9)点击Finish安装完成!3. EC3仿真器、开发板连接及开发软件Keil C软件配置(1)将EC3仿真器与开发板连接好,按1.2.3.4步连接(2) 将EC3仿真器与电脑连接好, 仿真器指示灯亮(3) 上述连接确认无误,将开发板电源线(USB接口)与电脑连接好,再连接到开发板上(4)打开Keil Vision3软件,新建一工程ML-Test(或者将学习板光盘上的测试程序拷贝到电脑硬盘上,用Keil Vision3打开,注意将文件属性更改为可读写):(5)选择C8051F330作为CPU:(6)选择配置如下图:(7)显示如下图:(8)选择Debug项,配置如下图:(9)选择Settings项,配置如下图:(10)点击确定,完成设置;(11)编译并下载程序即可调试了;4. 用Keil C51打开软件例程,编译下载程序并运行。
C8051F单片机开发工具使用及常见故障排除
C8051F单片机开发工具使用及常见故障排除V1.02010/8/16目 录1.相关基本知识介绍及正确操作流程1.1.调试器的作用与种类1.2.调试器接口1.3.软件的种类与特色1.4.不同软件的不同设方法1.4.1.IDE1.4.2.KEIL1.4.3.U‐EC5中文下载程序1.5.目标板接口1.6.连接流程2.常见问题问答2.1.软件问题2.1.1.软件版本问题2.1.2.软件设置2.2.调试器问题2.3.目标板问题B连接线问题2.5.10芯扁平线问题2.6.操作流程问题3.使用特例4.附件4.1.调试器图片4.2.软件下载及查找路径4.2.1.IDE4.2.2.KEIL环境下驱动4.2.3.Flash Programming4.2.4.Production Programmer4.2.5.U‐EC5中文下载程序B Reset4.3.调试器接口描述B接口4.3.2.C2接口4.3.3.JTAG接口5.其他:版本更新说明调试器的正常使用,会涉及诸多因素,比如,上位机软件的设置恰当与否,调试器本身的状态良好与否,目标板接口电路正确与否,甚至包括USB连线、10芯扁平线是否良好连接等,都会直接影响调试或下载工作是否能够正常进行。
图 1‐1 调试器连接示意图本文以调试器为中心,详细介绍其使用及在使用过程中、与其相关的软件、目标板等,并以问答形式,重点列举了在使用过程中可能出现的故障以及故障的排除方法。
1相关基本知识介绍及正确操作流程1.1.调试器的作用与种类应用于C8051Fxxx MCU的调试器,区别传统的仿真器,其可执行在线调试、在线编程、在线擦除代码等动作,除用于开发调试,也可用于生产下载。
作为资深代理商,新华龙电子有限公司前后共推出多种型号:U‐PDC,U‐EC3,U‐EC5,以及最近新推出的U‐EC6等。
鉴于目前在市场主要使用后两者,因此本文重点介绍U‐EC5及U‐EC6。
1.2.调试器接口对于U‐EC5及U‐EC6调试器,都存在两个接口,即同上位机电脑连接的USB接口,以及同目标板连接的10芯下载接口,其中,USB接口均符合标准USB接口定义(详细如附件图5.3.1 USB接口),U‐EC5(附件图5.3.2 U‐EC5 10芯接口)及U‐EC6(附件图5.3.2 U‐EC610芯接口)接口为专用。
转:C8051F 进不了main函数问题解决办法
转:C8051F 进不了main函数问题解决办法问题:在做C8051F380的一个程序,但在硬件仿真的时候一直进不了main函数。
使用的是Keil uV4开发环境,我在STARTUP.A51文件的198行设置断点,如下,可以run到该断点处,说明启动代码执行正常。
正常情况下该调整到main()函数执行C程序了,然而我现在全速(F5)执行,过一会程序再次停到该处。
并没有跳转到main()函数,(我在main()里的第一条语句处设置了断点)。
进入Debug模式后,首先全速执行到198行,然后在187行设置断点,全速执行,执行后的结果如下:这是为什么呢???这说明了什么???为什么又执行回去了呢?难道是看门狗导致的?对就是这条狗的问题。
下面进行分析。
----------------------------------------------------------------------------------------------由于程序稍微大了些:Program Size: data=35.4 xdata=1289 code=13929。
使用的开发环境是Keil uV4,Keil Option-->Target下的设置如下:由于程序中data比较大,所以在Memory Model下设置为Large模式。
程序编译通过,无错误,警告很多如下。
警告只要是两种类型,一种是 INCOMPATIBLE MEMORY MODEL型,估计是C8051Fxxx 的USB的库中选择Memory Model类型为SMALL格式,而我这里工程设置的为Large模式,所以Keil给出这个警告;另外一种是 UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS,这种警告是提醒定义了一些函数,因为整个程序就没有调用到,所以给了警告。
*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_API)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_CLOCK_START)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (USB_SUSPEND)MODEL: SMALL*** WARNING L14: INCOMPATIBLE MEMORY MODELMODULE: .\C8051F_USB\USBX_F38X.LIB (GET_INTERRUPT_SOURCE)MODEL: SMALL......*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?KEY_SCAN?HS6200_TEST_SYS*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?TIMER_INIT?HS6200_TEST_SYS*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?DELAY_50US?C8051F_DELAY......从上面的分析可以看出,程序几乎没有问题。
C8051F单片机实验系统设计
C8051F单片机实验系统设计摘要:为满足单片机学习中对实践技能的要求,提高单片机开发系统的稳定性和可扩展性,降低系统功耗,设计了一种基于FPGA的C8051F单片机开发板。
利用FPGA实现键盘扫描、液晶驱动、地址译码以及其他外设接口,大幅度简化外围电路结构。
系统可在高低频时钟间切换以减小功耗,并增加了音频处理模块,实现基本的音频信号的存储和回放。
实验结果表明,该电路板相比普通的单片机开发板系统功耗减小50%左右,拥有最高达25 MIPS的处理速度,单片机可以直接驱动多达20多个LS TTL门电路,FPGA的引入使得外扩其他电路更为方便和灵活,具有良好的扩展性。
关键词:单片机;FPGA;外围电路;电路板目前高校单片机教学中大多是以MCS51单片机为首选机型进行讲解,所开发的教学实验系统也多是基于MCS51系列单片机开发设计的。
然而,随着单片机的应用进入SoC时代,其不足和缺陷也显而易见:片上资源不够丰富,功耗较大,处理速度很有限,电路庞大且复杂,可靠性和可维护性较差,难以满足高水平的设计要求。
为了进一步简化电路结构,提出一种C8051F单片机实验系统设计方案,该方案采用FPGA实现单片机各种外设接口。
FPGA作为一种可编程逻辑器件凭借其优越的可扩展性能受到设计者的青睐,逐渐成为分立元件的替代者。
通过对FPGA编程,实现任何数字元件的逻辑功能,设计者可以通过原理图输入或硬件描述语言,方便地设计一个数字系统,这使得单片机外围电路的设计简单、灵活、可靠。
本系统是为单片机实践教学而开发的,因此要求单片机的功能齐全,满足教学中各种实验的要求。
一般的实验板的功能有:模拟数字信号转换实验、通信接口实验、存储器实验、各种显示实验,人机交互实验等等。
除此之外,还要考虑由于是非商业性质的开发,对一些功能的精度要求不是很高,在选择最理想价格的同时,选择尽可能多而全的片上资源,留待后期开发扩充。
基于以上考虑,该平台使用SoC系统级的C8051F020单片机作为核心控制器,CycloneⅡEP2C8型FPGA 实现外设接口,加上LCD、键盘、UART串口等人机交互的模块。
在KEIL4环境下开发C8051F系列的单片机
在KEIL4环境下开发C8051F系列的单片机:在安装完KIEL4以后还需要安装C8051F_uVision.exe(由Silicon laboratory公司提供的AGDI,在其官网上下载);此AGDI提供以下三个方面的功能:1:提供最新的C8051F系列单片机的器件数据库2:提供通过ECX系列或其他兼容在线调试器提供调试接口3:提供对C8051F系列单片机的FLASH接口安装Sic8051F_uVision.exe文件需在Keil安装目录中有TOOLS.INI文件,其内容主要如下:[UV4]ORGANIZATION="sdstar"NAME="Hua_ming", "Yu"EMAIL="sy.m@"BOOK0=UV4\RELEASE_NOTES.HTM("uVision Release Notes",GEN)[C51]PATH="C:\Program Files\keil\C51\"VERSION=V9.01TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver")TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger")TDRV2=BIN\SIC8051F.DLL ("SILICON LABS C8051Fxxx Driver")RTOS0=Dummy.DLL("Dummy")RTOS1=RTXTINY.DLL ("RTX-51 Tiny")RTOS2=RTX51.DLL ("RTX-51 Full")LIC0=UJ512-98S0H-ZGW7Q-NWPHT-8IHFH-6658M其中TDRV0~2 为8051的驱动程序,在安装好Sic8051F_uVision.exe文件后就会在Keil安装目录下生成SIC8051F.DLL文件,安装完毕后,任意打开C51的一个工程(如LED开发工程开Source Code\LED_Flow\project),先进行一系列的设置。
C8051F021单片机实验指导
提要:实验项目1、单片机的IO编程实验1 IO开关量输入实验实验2 IO输出驱动继电器(或光电隔离器)实验实验3 IO输入/输出------半导体温度传感器DS18B20实验2、单片机的中断系统实验1 外部外部中断----脉冲计数实验3、单片机的定时器/计数器实验1 计数器实验实验2 秒时钟发生器实验4、单片机的串口特点和编程实验1 PC机串口通讯实验实验2 RS485通讯实验5、存储器实验1 RAM存储器读写实验6、PWM发生器实验1 PWM发生器(模拟)实验实验1 PWM发生器(内部)实验7、WDG看门狗实验1 外扩WDG(MAX813)实验实验2 WDG(内部)实验8、SPI总线实验1 SPI(模拟)实验-----TLC2543 AD转换实验实验2 SPI(模拟)实验-----TL V5616 DA转换实验9、I2C总线实验1 I2C(模拟)实验-----A T24C01读写实验实验2 I2C(内部)实验-----A T24C01读写实验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,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。
C8051F开发环境和烧录环境
C8051F 开发环境之Keil C51安装完毕后,任意打开 C51的一个工程(如开发板工程 Source Code\LED_Flow\project ),先进行一系列的设置。
如下所示:F 图是开发环境界面。
PrQjfcClB £j Target L-『锻 Sg L* m —ETMtg 峠 |aoio-<oi-OBr File FJane rAuthni:*■• PtjctipzlanTTaEqet Dewlce rCcapiler* Vetsiffliovo/lt 创札刖■# All rlythxi K«nivta x-ain.cWUTi. SlltO3. Cd.2010-01-06 lOiOStlCLED Clov 4no Foe (:因51F34X 匚eQ51F34X Series DSB !3匚口 KeilDSLflKIClud^ "c8D5LC34£i.h r, fmrludA "'i.YTypEdEt.h"swsxlc 扎data Iffjw Usedlfetaox[ 1024] _at_ O K 4DO;fctzlc codd IBTTfi 口 日匚 1 阳JHP4[日]-■!吨许 D5ClB r mBp Q M ET,.叮胃 F9』DwYS r QwFP, O K FT 汴 idtefiDE HJ :13SSel( x ) i Pl !■ 0x16.; Pi a BCl$B_Tbi [x4(hcG7];|昌1也[哼1狂網心问d_1| 1| | ]\Build & Gamand & Fmd hFits /|| < ]卜―For 种电 JxegSiH r yaae ; Clccklnitf |> * : Imti&llce Uie 砸甘储■ clock ami 出便 U3B clockv Tqpu 匸 ■ HoieiieTOutput i N DDC 使用Keil C51的话,则需要安装C8051F 系列单片机的调试驱动程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在KEIL4环境下开发C8051F系列的单片机:
在安装完KIEL4以后还需要安装C8051F_uVision.exe(由Silicon laboratory公司提供的AGDI,在其官网上下载);
此AGDI提供以下三个方面的功能:
1:提供最新的C8051F系列单片机的器件数据库
2:提供通过ECX系列或其他兼容在线调试器提供调试接口
3:提供对C8051F系列单片机的FLASH接口
安装Sic8051F_uVision.exe文件需在Keil安装目录中有TOOLS.INI文件,其内容主要如下:
[UV4]
ORGANIZATION="sdstar"
NAME="Hua_ming", "Yu"
EMAIL="sy.m@"
BOOK0=UV4\RELEASE_NOTES.HTM("uVision Release Notes",GEN)
[C51]
PATH="C:\Program Files\keil\C51\"
VERSION=V9.01
TDRV0=BIN\MON51.DLL ("Keil Monitor-51 Driver")
TDRV1=BIN\ISD51.DLL ("Keil ISD51 In-System Debugger")
TDRV2=BIN\SIC8051F.DLL ("SILICON LABS C8051Fxxx Driver")
RTOS0=Dummy.DLL("Dummy")
RTOS1=RTXTINY.DLL ("RTX-51 Tiny")
RTOS2=RTX51.DLL ("RTX-51 Full")
LIC0=UJ512-98S0H-ZGW7Q-NWPHT-8IHFH-6658M
其中TDRV0~2 为8051的驱动程序,在安装好Sic8051F_uVision.exe文件后就会在Keil安装目录下生成SIC8051F.DLL文件,安装完毕后,任意打开C51的一个工程(如LED开发工程开Source Code\LED_Flow\project),
先进行一系列的设置。
如下所示:
第一步:在Project菜单下面选择Option for Target“xxxxxx”
将鼠标指向target 1 使之变蓝,尔后点击菜单project 弹出下拉菜单,在下拉菜单中选中options for Target Target 1 弹出option 对话框:
单击debug 选项卡;选用use ,在右框中按动三角符号,弹出单片机驱动选单;在此选择SILICON LABS C8051Fxx Drive 后单击setings 进行调试器设置:
在此对话框中选择USB Debug Adapter 1.9.0.0 后按OK退回。
第二步:再点击Utilities 选项卡,弹出Flash 烧写方式对话框,选用Use Target Driver fFor Programing 在框中就会出现第一布选中的单片机驱动选单SICLICON LABORTORUS Driver,单击Setings 弹出FLASH ownload etup 对话框,对所选项进行勾选,按OK 返回后,最好选OK确认,Keil C51调试和烧写环境就配置好了
第三步:按Rebuild all target files重新编译整个工程。
第四步:用C2调试器连接开发板,上电,点Keil C51的Start/Stop Debug Session.如果没有问题的话,将弹出烧写FLASH的窗口:烧写完毕后,单片机将停在main函数的入口处等待调试命令:
接下来就可以进行单步和其他各种调试了。
附:C8051F系列单片机应用细则。
1:MONEN:VDD监视器允许。
该引脚接高电平时,允许内部VDD监视器工作,当VDD小
于2.7V时强制系统复位。
该引脚接低电平时内部VDD监视器禁止。
2:用SFR和SFR16定义特殊功能寄存器,一般的特殊功能寄存器是以8位进行编码的,理解对16位的特殊功能寄存器的访问的特点。
其实只需要给出其中第一个地址即可,对16的寄存器赋值和对8位的寄存器赋值,本质上没有差别
3:用SBIT定义可以位寻址的寄存器和IO端口,但是要注意到用SBIT作为关键字进行寻址的时候一般是对可以位寻址的寄存器或是端口,比如说只有第四位的IO口以及是8的倍数的SFR寄存器可以被位寻址,其他的不能被位寻址,这一点作为常识要牢记。
4:WDT一旦被锁定,在下一次系统复位之前不能被禁止,/RST引脚的状态不受该复位信号的影响看门狗的具体工作模式有允许复位看门狗、禁止看门狗、锁定看门狗以及设置看门狗定时器的时间间隔,具体的操作参看手册P153。
看门狗初始化时若要改变看门狗的定时间隔,需要另WDTCN的最高位置0才能对看门狗的定时间隔进行修改。
5:端口配置方法:在交叉开关被允许之前所有的标准端口都保持输入状态,输出方式
的缺省状态是漏极开路方式,缺省情况下弱上拉是被使能的,当引脚被驱动为逻辑0
时,弱上拉自动取消,即输出引脚不能与自身的弱上拉冲突,在端口被配置为模拟输
入时弱上拉被禁止
6:定时器3的使用:定时器3总是被配置在自动重装载方式,重装载值保存在
TMR3RLL和TMR3RLH中,定时器3没有计数器模式,可用于启动ADC装换、SMBus
定时或作为通用定时器使用。
定时器3的时钟源有外部振荡器8分频、内部振荡器和
内部振荡器12分频三种。
定时器3的溢出中断标志不能自动被硬件清0,需要由软件
清除。
定时器3的中断允许位在扩展中断EIE2中,详情参看扩展中断允许以及扩展中
断优先级寄存器。
7:系统时钟的选取:系统时钟可疑选择系统内部时钟以及选择系统外部时钟,系统外部时钟包括晶体振荡器、外部RC、以及外部电容外界方波信号,其中内部时钟允许、内外时钟选择、内部时钟值选择、内部时钟准备好、以及时钟监测标志位都位于OSCICN中,其次与外部
振荡器有关的寄存器是OSCXCN,其中包括外部振荡器是否有效、外部振荡器震荡方
式以及外部振荡器频率控制,注意到内部振荡器振荡频率在典型值附近大范围的波动,
因此检测到不是典型值很是正常,其次,由内部振荡器切换到外部振荡器需要时间,
其中需要查询OSCXCN中得外部振荡器有效标志位。
8:外部中断0和外部中断1:作为外部中断,一般是作为数字输入,而F系列单片机的端口配置上缺省状态就是数字输入,使用交叉开关分配端口用端口配置工具就可以了,一般的,外部中断0和外部中断1的中断方式以及中断标志位位于TCON,即定时器0和定时器1的控制寄存器中,而中断允许位在总中断允许寄存器IE中,都可以被位寻址,值得注意的是中
断标志在访问了中断向量以后会自动清零
9:关于电压基准:C8051F02x系列的单片机内部都有温度传感器,温度传感器的禁止与允许位在REF0CN中,关于其他的定义等,都可以从配置管理器中通过集成环境得到。