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生产实习的重要性生产实习是电子信息工程专业教学计划的一个重要部分,是培养学生理论学习与实践相结合的重要实践性教学环节。
通过生产实习使学生了解实习单位的工作方式和工作流程;对以后大单片机课程设计,帝业设计做基础,了解一个开发板的开发制作的整个过程以及元器件的采购;对生产现场、生产过程中的电子信息设备、计算机设备的应用状况有较为深刻的认识,掌握常规电子信息设备的使用维护方法;在实践中进一步加强专业教育,了解本专业工程技术岗位和生产劳动岗位的工作情况和工作内容,培养团队精神和吃苦耐劳的精神;同时可以使学生学到企业的管理经验和工人师傅的艰苦创业精神,激励学生奋发向上的开拓精神。