STC12C5A60S2串口通信keil与proteus调试 自己总结
- 格式:doc
- 大小:615.50 KB
- 文档页数:6
Proteus和Keil联调设置方法常用的有两种方法一keil c与proteus的离线联合使用1)先通过keil c51编辑,修改,编译源程序并生成HEX等单片能识别的文件,运行proteus 将HEX文件与原理图中的MCU进行绑定即可2)不论是离线还是在线方式的联合使用HEX文件是必不可少的,如果找不到HEX文件这不是软件出错,而是没有进行正确的设置进人KEIL开发环境打开一个工程文件,在选中“target1"的情况下选择project--->options for target "target1" 选择”output"选项卡在“create HEX file 前的方框里打钩,保存即可二KEIL C51与PROTEUS 7.0的联合仿真调试1)确保计、算机上安装有TCP/IP协议2)下这个软件proteus vsm a GDI Driver 就是vdmagdi.exe,装了后的变化是在KEIL文件夹下的TOOLS.INI文件中的[c51]字段的最后多了两行就是tdrv5=binvdm51.dll和book10=hlplvdmagd用于两软件的联接和帮助文档3)进入KEIL的开发环境建立一个工程文件在先中“TARGET"的情况下选择project-->options for target "target'4)在"debug"选项卡中选择左边的“use“,在下拉框中选”proteus vsm simulator",再点击"Setting"设置通信接口,在Host后面添上"127.0.0.1",如果你是用的不是同一台电脑,在这里添上另一台电脑的IP地址(另一台电脑安装Proteus).5)打开proteus lsls 在菜单栏中选择“debug-->use remote debug monitor"选中该项.6)注意,一定要把keil的工程和Proteus的文件放到同一个目录下(这里所说的Keil的工程指工程的目录,即Proteus的工程文件要和Keil工程的文件夹在同一层目录下).(注明:以上参考自/lihaoy/blog, 谢谢原文作者^_^)附:Proteus 7.2和Keil C51 V8.08 uvision 3的完整安装1.安装Proteus Version 7.2beta SETUP2.安装Proteus Update72SP2升级到SP2版本2.包括安装破解文件Labcenter_LICENCE.lxk3.安装补丁文件patch,注意里面在说要选择目录的时候要选择相应的目录4.安装汉化菜单:Proteus 7.01 SP2 ARES的汉化菜单放到……Program Files\Labcenter Electronics\Proteus 7 Professional\BIN目录下。
STC12C5A60S2 单片机双串口通信STC12C5A60S2 单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1 的功能及操作与传统51 单片机串行口相同;特殊的是STC12C5A60S2 单片机内部有一个独立波特率发生器,串口1 可以使用定时器1 作为波特率发生器,也可以使用独立波特率发生器作为波特率发生器;而串口2 只能使用独立波特率发生器作为波特率发生器。
下面是一段双串口通信的程序:/***********************************************************************时间:2012.11.24芯片:STC12C5A60S2晶振:22.1184MHz 波特率:9600bps引脚定义:串行口1:发送TxD/P3.1;接收RxD/P3.0串行口2:发送TxD2/P1.3;接收RxD2/P1.2功能描述:STC12 双串口通信(中断方式)当串行口1 接收数据后,将此数据由串行口2 发送出去当串行口2 接收数据后,将此数据由串行口1 发送出去******************************************************************* ****/#include#define S2RI 0x01//串口2 接收中断请求标志位#define S2TI 0x02//串口2 发送中断请求标志位unsigned char flag1,flag2,temp1,temp2;/****************串行口初始化函数****************/void InitUART(void){TMOD = 0x20; //定时器1 工作在方式2 8 位自动重装SCON = 0x50; //串口1 工作在方式1 10 位异步收发REN=1 允许接收TH1 = 0xFA; //定时器1 初值TL1 = TH1;TR1 = 1; //定时器1 开始计数EA =1;//开总中断ES =1;//开串口1 中断S2CON = 0x50; //串口2 工作在方式1 10 位异步收发S2REN=1 允许接收BRT = 0xFA; //独立波特率发生器初值AUXR = 0x10; //BRTR=1 独立波特率发生器开始计数IE2 =0x01;//开串口2 中断ES2=1}/****************串行口1 发送****************/void UART_1SendOneByte(unsigned char c){SBUF = c;while(!TI); //若TI=0,在此等待TI = 0;}/****************串行口2 发送****************/void UART_2SendOneByte(unsigned char c){S2BUF = c;while(!(S2CON&S2TI)); //若S2TI=0,在此等待S2CON&=~S2TI; //S2TI=0}/*****************主函数******************/void main(void){InitUART();//串行口初始化while(1){//如果串口1 接收到数据,将此数据由串口2 发送if(flag1==1){flag1=0;UART_2SendOneByte(temp1);}//如果串口2 接收到数据,将此数据由串口1 发送if(flag2==1){flag2=0;UART_1SendOneByte(temp2);}}}/************串行口1 中断处理函数*************/ void UART_1Interrupt(void) interrupt 4{if(RI==1){RI=0;flag1=1;temp1=SBUF;}}/************串行口2 中断处理函数*************/ void UART_2Interrupt(void) interrupt 8{if(S2CON&S2RI){S2CON&=~S2RI;flag2=1;temp2=S2BUF;}}12C5A60S2.h 的头文件如下://--------------------------------------------------------------------------------//新一代1T 8051 系列单片机内核特殊功能寄存器C51 Core SFRs// 7 6 5 4 3 2 1 0 Reset Valuesfr ACC = 0xE0; //Accumulator 0000,0000sfr B = 0xF0; //B Register 0000,0000sfr PSW = 0xD0; //Program Status Word CY AC F0 RS1 RS0 OV F1 P 0000,0000//-----------------------------------sbit CY = PSW;sbit AC = PSW;sbit F0 = PSW ;sbit RS1 = PSW;sbit RS0 = PSW;sbit OV = PSW ;sbit P = PSW;//-----------------------------------sfr SP = 0x81; //Stack Pointer 0000,0111sfr DPL = 0x82; //Data Pointer Low Byte 0000,0000sfr DPH = 0x83; //Data Pointer High Byte 0000,0000//-------------------------------------------------------------------------------- //新一代1T 8051 系列单片机系统管理特殊功能寄存器// 7 6 5 4 3 2 1 0 Reset Valuesfr PCON = 0x87; //Power Control SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000// 7 6 5 4 3 2 1 0 Reset Valuesfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000//-----------------------------------sfr AUXR1 = 0xA2; //Auxiliary Register 1 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS 0000,0000/*PCA_P4:0, 缺省PCA 在P1 口1,PCA/PWM 从P1 口切换到P4 口: ECI 从P1.2 切换到P4.1 口,PCA0/PWM0 从P1.3 切换到P4.2 口PCA1/PWM1 从P1.4 切换到P4.3 口SPI_P4:0, 缺省SPI 在P1 口1,SPI 从P1 口切换到P4 口: SPICLK 从P1.7 切换到P4.3 口MISO 从P1.6 切换到P4.2 口MOSI 从P1.5 切换到P4.1 口SS 从P1.4 切换到P4.0 口S2_P4:0, 缺省UART2 在P1 口1,UART2 从P1 口切换到P4 口: TxD2 从P1.3 切换到P4.3 口RxD2 从P1.2 切换到P4.2 口GF2: 通用标志位ADRJ:0, 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器1,10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器DPS: 0, 使用缺省数据指针DPTR01,使用另一个数据指针DPTR1*///-----------------------------------sfr WAKE_CLKO = 0x8F; //附加的SFR WAK1_CLKO/*7 6 5 4 3 2 1 0 Reset ValuePCAWAKEUP RXD_PIN_IE T1_PIN_IE T0_PIN_IE LVD_WAKE _ T1CLKO T0CLKO 0000,0000Bb7 - PCAWAKEUP : PCA 中断可唤醒powerdown。
#include <stc12c5a60s2.h>#include<string.h>unsigned char yb;unsigned char n[14];char nn;unsigned char sn;unsigned char num,mm; //定时器计数unsigned char sn;unsigned char adcnum[8]; //ad转换结果unsigned char adcyb; //ad转换游标unsigned char ssbuf[12]; //串口缓存unsigned char syb;sbit dat=P3^2;sbit clk=P3^3;sbit load=P3^6;sbit dat1=P3^4;sbit clk1=P3^5;sbit load1=P3^7;sbit sys=P4^4;sbit sc1=P4^6;sbit sc2=P4^5;sbit led1 = P0^6;void ssend(){SBUF=ssbuf[0];syb=1;}void adc(void) interrupt 5{adcnum[adcyb]=ADC_RES; //存储结果//adcnuml[adcyb]=ADC_RESL; //低两位adcyb++;if (adcyb>7){adcyb=0;ADC_CONTR=(0XE0|adcyb);ssbuf[0]=253;ssbuf[1]=adcnum[0];ssbuf[2]=adcnu m[1];ssbuf[3]=adcnum[2];ssbuf[4]=adcnum[3];ssbuf[5]=adcnum[4];ssbuf[6]=adcnum[5];ssbuf[7]=adcnum[6];ssbuf[8]=adcnum[7];ssbuf[9] =254;ssbuf[10]=0x0d;ssbuf[11]='\n';ssend();}else{ADC_CONTR=(0xe8|adcyb);} //继续下一位}void out(unsigned char a1,unsigned char a2,unsigned char sin) {load=1;clk=1; dat=a1; clk=0;clk=1; dat=a2; clk=0;clk=1; dat=1; clk=0;clk=1;dat=(sin>>7); clk=0;clk=1;dat=((sin & 0x40)>>6);clk=0;clk=1;dat=((sin & 0x20)>>5);clk=0;clk=1;dat=((sin & 0x10)>>4);clk=0;clk=1;dat=((sin & 0x08)>>3);clk=0;clk=1;dat=((sin & 0x04)>>2);clk=0;clk=1;dat=((sin & 0x02)>>1);clk=0;clk=1;dat=(sin & 0x01);clk=0;clk=1;load=0;load=1;}void out1(unsigned char a1,unsigned char a2,unsigned char sin) {load1=1;clk1=1; dat1=a1; clk1=0;clk1=1; dat1=a2; clk1=0;clk1=1; dat1=1; clk1=0;clk1=1;dat1=(sin>>7); clk1=0;clk1=1;dat1=((sin & 0x40)>>6);clk1=0;clk1=1;dat1=((sin & 0x20)>>5);clk1=0;clk1=1;dat1=((sin & 0x10)>>4);clk1=0;clk1=1;dat1=((sin & 0x08)>>3);clk1=0;clk1=1;dat1=((sin & 0x04)>>2);clk1=0;clk1=1;dat1=((sin & 0x02)>>1);clk1=0;clk1=1;dat1=(sin & 0x01);clk1=0;clk1=1;load1=0;load1=1;}void delay(int nu){unsigned int m,n;for(m=1;m<=nu;m++)for(n=1;n<2000;n++);}void cl(void){if(yb>13)if((n[0]==0xfd)&&(n[13]==0xfe)){yb=0;out(0,0,n[1]);out(0,1,n[2]);out(1,0,n[3]);out(1,1,n[4]);out1(0,0,n[5]);out1(0,1,n[6]);out1(1,0,n[7]);out1(1,1,n[8]);P0=n[9];P1=n[10];// P2=n[11];sc1=1;sc1=0;// P2=n[12];sc2=1;sc2=0;sn=1;}else{yb=0;}else{yb=0;}}void initex(){IT0=1;IT1=1; //设置外部中断触发方式0为负电平触发1为负跳变触发EX0=1;EX1=1; //开外部中断}void main (void){ //锁存器锁存P1M1=0xe7;P1M0=0x00; //PmMn m=4,3,2,1 n=0,1 (m:0 0 准双向0 1 推挽1 0 仅输入1 1 开漏)P1ASF=0xe7; //打开P1口的ad转换功能1110 0111 (bit7-bit0)ADC_CONTR=0xe0; //设置adc_power speed1 speed0 adc_flag adc_start chs2 chs1 chs0 1110 0000EADC=1;initex();P4SW=0x70; //启动p4口x000 xxxxSCON = 0x50; /* SCON: 模式1, 8-bit UART, 使能接收*/ TMOD |= 0x21; /* TMOD: timer 1, mode 2, 8-bit reload */AUXR|=0x40; //开12倍速9600变115200TH1 = 0xfd; /* TH1: reload value for 9600 baud @ 11.0592MHz */TH0=65534/256;TL0=65534%256;TR1 = 1; /* TR1: timer 1 run */ TR0=1;ET0=1;EA = 1; /*打开总中断*/ES = 1;TI=0; /*打开串口中断*/yb=0;sn=0;sn=1;mm=0; //灯慢速显示ADC_CONTR |=0x08; //开始转换while (1) /*主循环不做任何动作*/{}}void tmr0(void) interrupt 1{TH0=65534/256;TL0=65534%256;num++;mm++;if(mm>1000){led1=!led1;ADC_CONTR|=0x08; //adc转换开始xxxx 1xxx(adc_start)mm=0;}if (((num==25)|(num==50)|(num==75)) & sn){sys=!sys;}if (num>=100){num=0;sys=!sys;sn=0;}}void UART_SER (void) interrupt 4 //串行中断服务程序{unsigned char Temp; //定义临时变量if(RI) //判断是接收中断产生{RI=0; //标志位清零Temp=SBUF; //读入缓冲区的值n[yb]=Temp;yb++;if (yb>13){cl();}if (Temp==0xfe){cl();}}if(TI) //如果是发送标志位,清零{TI=0;if (syb<12){SBUF=ssbuf[syb];syb++;}else{syb=0;}}}。
单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。
《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。
Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。
本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。
实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。
电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。
2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。
主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。
串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。
3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。
首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。
然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。
总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。
实验一keil与proteus软件的使用及联调一.实验目的1.学会keil软件的使用方法2.学会proteus软件的使用方法3.学会keil及proteus软件的联调方法二.实验设备计算机、keil软件、proteus软件三..实验步骤1.keil软件的使用(1)双击桌面的快捷图标,即可启动该软件,几秒种后,就会出现Keil μVision3界面。
(2)在编辑界面下,首先单击“Project”菜单,选择下拉菜单中的“New Project”,弹出文件对话窗口,选择要保存的路径,在“文件名”中输入一个工程的名称,保存后的文件扩展名为“.uv2”,这是Keil µVision3工程文件的扩展名,以后可直接单击此文件就可打开先前建立的工程。
(3)在一个新的工程创建完成后,就需要将自己编写的用户源程序代码添加到这个工程中,添加用户程序文件通常有两种方式:一种是新建文件,另一种是添加已创建的文件。
a.单击菜单栏【File】→“New”选项,在这个窗口会出现一个空白的文件编辑画面,用户可在这里输入编写的程序源代码。
单击【File】→“Save”选项),保存文件,文件名的扩展名应为“.c”。
b.右键单击“Source Group1”,选择“Add File to‘Source Group1’” 选项,在该窗口中选择要添加的文件,点击这个文件后,单击“Add”按钮,再单击“Close”按钮,文件添加完成。
(4)单击快捷按钮中的,对当前文件进行编译,直至提示信息显示没有错误为止。
(5)程序编译没有错误后,就可以进行调试与仿真。
单击开始/停止调试的快捷按钮(或在主界面点击【Debug】菜单中的“Start/Stop Debug Session”选项),进入程序调试状态。
2. proteus软件的使用(1)双击桌面的快捷图标,即可启动该软件,几秒种后,就会出现proteus软件界面。
(2)在“菜单”项中点击【模板】按钮,(3)在ISIS菜单栏中选择【系统】→“设置图纸尺寸”菜单项,出现图如4-19对话框,用户可选择图纸大小或自定义图纸大小。
STC12C5A60S2 双串口使用程序(已经验证成功)#include <stc12c5a60s2。
h〉#include "intrins。
h"#define uchar unsigned char#define S2RI 0x01 // 串口2接收中断请求标志位#define S2TI 0x02 // 串口2发送中断请求标志位//================================================// 对于将P4。
4、P4。
5当做I/O口使用必须添加的定义||//================================================sfr p4sw=0xbb;// 需在主函数文件中做相应设置4、5、6为1(作为I/O口使用)/*sbit button1=P4^3;sbit button2=P4^4;sbit button3=P4^5;sbit button4=P4^6;*/uchar code temp1[]={" 白云:“我可是个名人””};uchar code temp2[]={" 黑土:“啥名人啊,你就是个人名" "};uchar code temp3[]={”小崔:“诶,大叔大妈,你俩都冷静冷静””};uchar code temp4[]={”观众:“哈哈哈哈”"};/*void delay_1ms(uchar ii)// 误差-0.018084490741us{unsigned char a,b;for(; ii>0;ii—-)for(b = 18; b>0; b—-)for(a = 152;a〉0; a--);_nop_(); //if Keil,require use intrins.h}void delay1s(void)//误差—0.000000000125us{unsigned char a,b,c;for( c = 212;c>0;c—-)for(b = 160;b〉0; b—-)for(a = 80; a>0; a—-);_nop_();//if Keil,require use intrins。
keil和proteus的联调设置(转)Proteus和Keil的使用与联调Proteus7.0 是目前最好的模拟单片机外围器件的工具,非常不错。
可以仿真 51 系列、AVR,PIC 等常用的 MCU 及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI器件,部分IIC 器件等等),虽然有那么多优点和长处,但还是与实际情况有不少的差别。
如果条件允许,还是买一块单片机开发板或自己做一个单片机应用系统,实实在在的学习和体会一下,仿真毕竟还是仿真,不能代替实际操作,许多实际问题是在仿真中碰不到的。
当然,条件不允许,我们可以采用仿真,达到学习的目的。
如果学习和使用单片机,除了灵活应用Protel等绘制原理图和PCB 图以外,那么Keil C51 软件应该要掌握,我们要通过它来编写和调试单片机程序。
Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。
下面就三个问题分别进行介绍。
一、 proteus的使用1. 软件打开双击桌面上的ISIS 7 Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus 7 Professional”→“ISIS 7 Professional”,出现如图1-1所示界面,随后就进入了Proteus ISIS集成环境。
图1-1 启动时的界面2. 工作界面Proteus ISIS的工作界面是一种标准的Windows界面,如图1-2所示。
包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
图1-2 Proteus ISIS的工作界面关于该软件的使用,与学习其他软件的方法没有多大区别,当然我们也不是每个功能都使用,没必要逐一介绍,再说下面有例子,呵呵,相信自己的能力吧。
目录第一章实习的目的及意义 (1)1.1生产实习的目的 (1)1.2生产实习的意义 (1)1.3生产实习的重要性 (1)第二章单片机的最小系统 (2)2.1部分芯片介绍 (2)2.1.1 AT89S52芯片 (2)2.1.2 MAX232芯片 (3)2.1.3 LCD1602液晶显示器 (4)2.1.4 DS12887芯片 (5)2.1.5 74HC573 (7)第三章单片机电路板焊接 (8)3.1 单片机焊接 (8)3.2焊接元件清单 (8)3.3 焊接注意事项 (10)第四章 C51语言的应用程序 (12)4.1 Keil uVision的使用 (12)4.2 流水灯程序 (12)4.3 流水灯高地位循环闪烁 (13)4.4 AD转换测温度 (15)4.5 按键控制1602 (21)4.6 调试中出现的问题 (28)第五章单片机开发板的应用 (29)5.1 应用程序 (29)第六章实习体会 (33)第一章实习的目的及意义1.1生产实习的目的此次生产实习的目的是在理论学习的基础上,通过完成一个设计51单片机的多种资源应用并具有综合功能的最小系统目标板的设计与编程应用。
1.2生产实习的意义将理论知识与实际应用相结合,从实际出发分析问题、研究问题和解决问题,将单片机的知识系统化,并能对电子电路、电子元器件、印制电路板等方面的知识有进一步的加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机的应用系统的开发设计打下一定基础。
1.3生产实习的重要性生产实习是电子信息工程专业教学计划的一个重要部分,是培养学生理论学习与实践相结合的重要实践性教学环节。
通过生产实习使学生了解实习单位的工作方式和工作流程;对以后大单片机课程设计,帝业设计做基础,了解一个开发板的开发制作的整个过程以及元器件的采购;对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;在实践中进一步加强专业教育,了解本专业工程技术岗位和生产劳动岗位的工作情况和工作内容,培养团队精神和吃苦耐劳的精神;同时可以使学生学到企业的管理经验和工人师傅的艰苦创业精神,激励学生奋发向上的开拓精神。
PROTEUS心得第一篇:PROTEUS心得经过几个月对proteus和keil的学习,并且将它们运用到实例当中,不仅让我了解了这两个软件的强大功能,而且使我认识到了他们与实际结合的完美,我们不用进实验室就可以看到我们想要的结果,省时又省力,方便快捷,并且结果接近真实值,是我们仿真的理想帮手。
根据在学习这两个软件时候的感受,总结一些它们的特点: proteus特点:1、proteus软件提供了数千种元器件和多达30多个元件库。
2、在proteus软件中,理论上同一种仪器可以在一个电路中随意的调用。
3、除了现实存在的仪器外,proteus变化的信号。
4、虚拟仪器仪表具有理想的参数指标,可减少仪器对测量结果的影响。
proteus提供了比较丰富的测试信号用于电路的测试。
这些测试信号包括模拟信号和数字信号。
keil特点:1、全功能的源代码编辑器;2、器件库用来配置开发工具设置;3、项目管理器用来创建和维护用户的项目;4、集成的make工具可以汇编、编译和连接用户嵌入式应用;5、所有开发工具的设置都是对话框形式的;6、真正的源代码级的对cpu和外围器件的调试器;7、高级gdi(agdi)接口用来在目标硬件上进行软件调试以及和进行通信;proteus是labcenter公司出品的电路分析、实物仿真系统。
它可仿真各种电路和集成ic,最让我们高兴的是它支持许多型号的单片机的仿真,另外还提供schematic drawing与pcb设计功能。
它的元件库齐全,使用方便,是不可多得的电子电路设计辅助软件。
keil是目前世界上最好的的开发工具。
它支持汇编,c语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真(用mon51协议,需硬件支持)功能。
但是我们在利用它的仿真功能的时候都有一定的限制。
我们把这两个软件结合来用,其实proteus在设计的时候已经注意到和各种单片机编译程序的整合了。
如它可以和keil、mplab ide等编译模拟软件结合。
Keil与protues联结调试一)Keil uVision3与Proteus连接调试单片机仿真2009-11-29 11:26:20 阅读128 评论2 字号:大中小订阅1、打开keil安装目录下的tools.ini2、在“[C51]”字段中,添加一行TDRV8=BIN\VDM51.DLL ("PROTEUS VSM MONITOR 51 DRIVER")(注意这里的TDRV8不能与其他重合,如果重合的话,后面的8可以修改成9、10或更高)。
3、保存tools.ini文件,然后打开keil,右键“目标1”---> Options for Target选项,点击“Debug”标签页,在右半部分,选择“使用”(这个DEBUG标签页共有两种仿真方式可选,左边的是keil软件仿真器,右边的是外部仿真器),点击下拉框,就会出现“Proteus VSM Monitor 51 Driver”,当然这里的这个名字可以你第1步里自定义,自己喜欢取什么名字就什么名字吧,当然最好是一目了然的名字比较好。
4、选择“PROTEUS VSM MONITOR 51 DRIVER”,点旁边的“设置”,如果你的keil和proteus 是装在同一台电脑上的话,那这里的“HOST”(主机)就填写本机IP地址:127.0.0.1(如果keil和proteus装在不同的电脑上,那就需要在HOST中填写另外一台电脑的IP),,在“PORT”(端口)中写入8000 ,一般在右边会选中“Cache memory”.方法21、将KeilC51(u2、u3均可)、Proteus6(94、95均可)都安装好;2、下载两个软件,一个是Proteu的Vdmagdi.exe,另一个是授权后的Prospice.dll(两个文件链接地址看下面)3、先运行Vdmagdi.exe安装Keil接口,然后将Prospice.dll覆盖在Proteus的安装文件夹下的Bin中如:D:\Program Files\Labcenter Electronics\Proteus 6 Professional\BIN;4、打开Proteus,在【菜单】【Debug】下拉菜单中选【User Remote Debug Monitor】(在该项前打勾);5、打开KeilC51,点击【菜单】【工程】【为目标'XX'设置选项】,在【调试】标签下选择右边的【使用U】单选,并在下拉框中选【Proteus VSM Simulator】仿真设备;6、在Proteus侧做好硬件连线,Keil侧写好软件,点击Keil【调试】【运行】,您可以欣赏联调了。
Proteus与keil的使用总结单片机是一门实践性很强的课程,实验是十分重要的实践教学环节。
然而,传统的单片机实验室建设中仍存在着一些不足,主要表现在以下几个方面。
首先,实验教学中所采用的实验设备大多为高度集成的实验箱,实验过程中学生只需进行简单的连线,不能实践单片机中硬件电路设计方法,不易看到实验的全貌,难以建立“系统”的概念。
其次,由于实验箱系统资源分配相对固定,实验教学内容基本以验证性实验为主,较少涉及运用理论知识去解决实验问题的实验项目,不利于发挥学生学习的主动性和积极性,也不利于学生动手能力和创新能力的培养。
此外,由于单片机技术的不断更新,实验仪器也面临老化过时的问题,要解决此问题需要不断地重建单片机实验室,这样会带来资金耗费严重等问题。
目前,我国主流的单片机教学仍以MCS-51系列单片机为主,基于51系列单片机建立虚拟实验室就具有重要的现实意义。
Proteus和Keil C软件简介伴随着计算机软件和硬件技术发展出现了各种EDA工具,如EWB、Protel、Multisim、MAX+PLUSII等,这些软件对于单片机的仿真无能为力,而仿真软件Proteus是基于SPICE3F5仿真引擎的混合电路仿真软件,不仅能够仿真模拟、数字电路以及模数混合电路,更具特色的是它能够仿真基于单片机的电子系统。
Proteus不但完全支持MCS-51及其派生系列单片机的设计系统,另外也能仿真基于A VR和PIC系统单片机系统。
Proteus的仿真资源Proteus软件可提供的模拟、数字、交(直)流等元器件达30多个元件库,共计数千种。
此外,对于元件库中没有的器件,使用者也可依照需要自己创建。
软件调试方面,其自身只带汇编编译器,不支持C语言。
但可以将它与Keil C51集成开发环境相连接,将用汇编和C语言编写的程序编译好以后,可以立即进行软、硬件结合的系统仿真,像使用仿真器一样来调试程序。
当可以使用Proteus完成单片机实验时,利用Proteus建立虚拟实验室就变得非常重要了。
#include <STC12C5A60S2.h>#include <Uart.h>#define uchar unsigned char#define uint unsigned int//=====================void delay(void){uint j,g;for(j=0;j<500;j++)for(g=0;g<500;g++);}//============================void main(){Uart_Two_Init();Uart_One_Init();while(1){Uart_One_Send('z');delay();Uart_Two_Send('z');UART_One_Printf("sb123456789\n");delay();UART_Two_Printf("sb123456789\n");delay();}}//======================================#ifndef __UART_H__#define __UART_H__#define uchar unsigned char#define uint unsigned int//=====================================//#define RELOAD 0xFA//#define RELOAD_TWO 0xfa//#define BRTx12_enable() AUXR |= 0x04 //BRT 独立波特率发生器的溢出率快12 倍//#define BRT_start() AUXR |= 0x10 //启动独立波特率发生器BRT 计数。
//=========================================uchar c = 0 ;uint d = 0 ;//=========================================//=======baud 9600=======================void Uart_One_Init() //串口1初始化函数,波特率9600TMOD=0x20;//设置定时器1为工作方式2TH1=0xfd; //设置波特率为9600TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;// AUXR|=0X40; //T1*12;}//========================================void Uart_One_Send(char k) //串口1发送一个字符{ES = 0 ;SBUF=k;while(TI!=1);TI = 0 ;ES = 1 ;}//=========baud 9600=======================void Uart_Two_Init() //串口2初始化函数,波特率9600{S2CON= 0x50 ; //方式2,允许接收// BRT = RELOAD_TWO ;BRT = 0xfd; //设置波特率9600 AUXR = AUXR |0X10 ; //允许独立波特率发生器运行// BRTx12_enable();AUXR1 = AUXR1&0xef ; //S2_P4=0,将uart2切换到P1口IE2 = IE2|0X01; //允许串口2中断}//=========================================void Uart_Two_Send(uchar k) //串口2发送一个字符{ES = 0 ;S2BUF = k ;while((S2CON&0x02)!=0x02);S2CON &= ~0x02;ES = 1 ;}//=============================================void UART_One_Printf(uchar *p)while(* p!='\0') Uart_One_Send(*p++);}//============================================ void UART_Two_Printf(uchar *p){while(* p!='\0') Uart_Two_Send(*p++);}//=========================================== void Uart_One_Receive() interrupt 4{uint k = 0 ;if(RI==1){RI = 0 ;k = SBUF;}}//========================================void Uart_Two_Receive() interrupt 8{uchar a ;uint k = 0 ;// a = S2CON ;a = S2CON & 0x01;if(a==1){k = S2BUF ;S2CON = S2CON & 0xfe; //清0 S2RI }}//=====================================#endifLTC1605 - 16-Bit, 100ksps, Sampling ADC特点•Sample Rate: 100ksps 采样100K次/S•Single 5V Supply 单5V供电•Bipolar Input Range: ±10V 双极输入-10V----+10V•Power Dissipation: 55mW Typ 电源55MW•Integral Nonlinearity: ±2.0LSB Max •Guaranteed No Missing Codes•Signal-to-Noise Ratio: 86dB Typ •Operates with Internal or External Reference •Internal Synchronized Clock•Improved 2nd Source to ADS7805 and AD976 •28-Pin 0.3” PDIP, SSOP and SW Packages。
怎样实现keil和proteus联机调试1. 一定要把keil的工程和Proteus的文件放到同一个目录下(这里所说的Keil的工程指工程的目录,即Proteus的工程Design 文件(后缀名。
DSN)要和包含了Keil工程文件的那个文件夹在同一层目录下)。
(经过操作发现:Keil的工程目录文件夹一定要命名为keil(可能与路径设置有关,目前还不清楚,且Keil工程名与Proteus工程名相同),否则proteus报错:Unable to open HEX file 'Keil\DS1302.hex'. keil报错:target dll has been cancelled debugger aborted!)2. 6.9以上版本需要添加与Keil联调补丁Vdmagdi.exe,其作用就是添加在程序目录keil/c51/bin目录下添加Vdm51.dll,(注意:与其他版本不同,6.9以上版本Proteus 6 Professional\MODELS\目录下没有VDM51.dll)并且修改keil目录下tools 配置文件,添加两行文本:TDRV8=BIN\VDM51.DLL ("Proteus VSM Simulator")BOOK2=HLP\VDMAGDI.HLP ("Proteus VSM AGDI Driver"),经过实际操作证明,手动操作也可成功实现联调功能,其中第二行非必需,所以不一定要安装补丁Vdmagdi.exe,至于Proteus 6 Professional\BIN目录下Prospice.dll的作用,有网友说与授权有关,确有可能。
默认安装的版本是2006.6.17,本人用2006.6.26版本代替后,联调才成功,但是用更新的2006.8.18替换时,联调又会失败。
3. 必须生成烧写文件4. proteus的debug菜单下选定"use romote debuger monitor注明:用proteus6.9 SP4和Keil uVision3版本联调成功的Proteus 7.12完美破解版和Keil C51 V8.09中文破解版如何连接管理提醒:本帖被水剑设置为精华(2008-12-13)1.把proteus 安装目录下VDM51.dll (C:\Program Files\Labcenter Electronics\ Proteus 6 Profession al\MODELS)文件复制到Keil 安装目录的\C51\BIN 目录中。
STC12C5A60S2初始化KEILC程序STC12C5A60S2初始化KEIL C 程序//独立频率输出,PCA定时器串口独立波特率串口接收,发送// ICL7135 AD中断测量;void MCU_INT(void) //初始化{// 定时器0 icl7135 AD 外部中断0TMOD = 0x29; // 定时器T1工作于模式1 ,定时器T0工作于模式1 由INT0控制定时器T0的启停TR0=1; //;启动定时器T0IT0=1; //下沿INT0中断EX0=1; //外部中断0允许TR1=1;EA = 1;// t1独立输出频率AUXR=0x40; //定时器1为8051的12倍WAKE_CLKO=0x22; //t1独立输出频率TH1=0xfa; // 1T clkout1=(fosc/2)/(256-TH0) 3m/2/6=250k // //PCA定时器寄存器值,50ms,6MCCON=0x00;//CL=0x00;CH=0x00; // Reset PCA base timerCMOD= 0x10;//中断使能系统时钟fosc/12//time(sec) * Fosc / 12, for 50ms @ 3MHz, T_Value = 0.05 * 3000000 / 12 = 12500T_Value0=12500;T_PCA0 = T_Value0;CCAP0L = T_PCA0;CCAP0H = T_PCA0 >> 8; //Initial PCA module-0T_PCA0 += T_Value0;CCAPM0=0x49; //软件定时器,使能中断,pca模块0CR=1; //启动pca// 串口1 独立波特率发生器BRTSCON=0x50;PCON=0X80;BRT= 0XF3;AUXR|=0x11; // 允许独立波特率独立波特率发生器作为串口1 //说明书49页ES=1;//看门独WDT_CONTR=0x3c; //说明书95页fosc=3M 32*393216/3000000 = 4.19s}void Init0 (void ) interrupt 0 using 1 //外部中断0 //定时器0中断{uchar i;if(ADOVER==0){ i++;TR0 = 0; //定时器0关EX0 = 0; //关中断if(i>2){ADHWHEEL=TH0;ADLWHEEL=TL0;ADOVER=1;i=0;}TMOD = 0x29;TR0=1; //;启动定时器T1IT0=1; //下沿INT0中断EX0=1; //外部中断0允许TH0=0;TL0=0;}}void PCA_INT (void ) interrupt 7 using 2 //PCA 定时器50ms {CCF0=0;CCAP0L = T_PCA0;CCAP0H = T_PCA0 >> 8;T_PCA0 += T_Value0;led2=~led2;}void Send_UART(uchar senddata) //独立波特率发生{ES=0;TI=0;SBUF=senddata;while(TI==0);TI=0;ES=1;}void UART_INT(void) interrupt 4 using 3 //串口接收中断{ uchar i;if(RI==1){i=SBUF;Send_UART(i);RI=0;} }。