ARM Proteus实验
基于Proteus的ARM虚拟开发技术.
基于Proteus的ARM虚拟开发技术基于Proteus的ARM虚拟开发技术类别:嵌入式系统1 引言现在,人们生活中的每个角落都有嵌入式设备的存在,比如数码相机、移动电话、TV机顶盒及掌上电脑等等。
这些嵌入式设备多采用32位RISC嵌入式处理器作为核心部件。
其中基于ARM核的嵌入式处理器独占鳌头,在32位RISC处理器中占据超过75%的市场份额。
ARM核嵌入式处理器通常采用C语言编程,目前ARM公司的开发工具ADS、RealView以及Keil与ARM核处理器结合较好,得到了广大嵌入式学习者的一致认可。
在传统的嵌入式系统学习中,嵌入式开发平台是必不可少的。
其中资源少的开发平台便宜但功能较少,资源多的开发平台又价格不菲,这对广大的嵌入式爱好者无疑是个障碍。
然而,有没有在不增加甚至降低开发成本的同时还能进行同样或更好的开发呢?本文介绍的Proteus软件就是一个可以完全脱离硬件平台来学习嵌入式系统进行虚拟开发的利器,可以说是嵌入式系统学习的一次革命。
1 Proteus简介Proteus软件是英国Labcenter electronics公司的EDA 工具软件,是一个电子设计的教学平台、实验平台和创新平台,涵盖了电工电子实验室、电子技术实验室、单片机应用实验室等的全部功能。
其革命性的功能是将电路仿真和微处理器仿真进行协调,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件(如电机、LED、LCD、开关等),配合系统配置的虚拟仪器(如示波器、逻辑分析仪等),可实时看到运行后的输入输出的效果,其主要特点如下:(1)可以仿真、分析各种模拟器件和集成电路,其支持Pillips公司系列的ARM(LPC系列),Proteus的仿真是基于SPICE3F5的,因此它也能像其它的EDA软件那样进行电路分析,如模拟分析、数字分析、混合信号分析、频率分析等等;(2)提供了虚拟示波器、逻辑分析仪、信号发生器、计数器、电表、Virtual Terminal等虚拟仪器仪表供选择;(3)能够进行SCH(原理图)和PCB(印刷板)电路的设计;(4)其自身只带汇编编译器,不支持C语言。
Proteus在ARM嵌入式系统教学中的应用
学习A M嵌入式系 R 统的束缚; 述 了 阐 采用P ts re 软件来实 ou 施仿真 教学的 方法; 通过实 例详细的 介绍了 教学中 课堂 仿真演 示教学 的方法; 分
析 了运用 Poes rtu 软件进行仿真演示教 学的优势。
I 关键词 】 r esA M 嵌入式 系统 ; Po u; R t 中断控制 ;P 2 2 L C 14
—
2A M 嵌 入式 系统 仿 真演 示 教 学 的组 织 。R
(
在 A M 嵌入 式系统 的理论 与实验教学 中 .所涉及 的内容包括 R GI PO端 口、 中断控制 、 定时器 、 R UA T串 口通信 、 T A D转换器 、C R C、 / I 2 接 口、P 接 口、WM等功能及应用。教学时 , SI P 应该结合 A M嵌入 式 R 系统 的理论知识如 中断控制的原理以及各个 向量中断控制器 ( i ) v c 的 定义.通过 Poes rt 仿真软件设计要完成功 能所需 的硬件电路虚拟仿 u 真电路 :然后用 AR M应用程序集成开发环境如 K ifr M完成程 elo AR 序的编写 . 写程序 的过程 中就能加深对各个 向量 中断控制器 ( I ) v c 中 各寄存 器的理解 :最后在 将写好 的程序 编译 生成 H x e 文件加载 到 Po u 仿真原理图 的 A rt s e RM组 件 中. 查看演 示效果 , 看运行 的是 否跟 自 己写程 序 要 完 成 的功 能 一 致 A M嵌入式 系统的中断跟 M S 5 单 片机 的中断有较大 区别 R C一l MC 一 1 S 5 单片机每个中断都有一个不同的人 口地址 而在 AR M嵌入 式系统中 . 所有的中断信号都被分配到 A M 内核的 I Q和 WQ两根 R R 中断请求信号线上 A M嵌人式系统中的中断控 制往往是学生较难 R 理解的一个部分 接下来. 以 A M嵌入式系统课堂教学中的一个 中 我 R 断控制的例子说明一下如何组织 中断控制这一教学 内容的 Poes rtu 仿 真演示教学 21中断控制电路原理图 . 运行 PoesV M 的 II 出现 主窗 口界 面 .点击 Fl一 N w rt S u SS后 i > e e D s n新建一个设计项 目。接下来添加其中所需的元器 件. ei g 点击元器 件添加按钮 P会弹出 Pc eie 对话框 . i Dv s k c 在其中选择需要添加 的元 器件 , 添加到器件列表区中。 然后再依次点击列表区里 的元器件. 把它 们 放 到 绘 图 区 并 编辑 其 属性 , 着 进 行 合 理 的 布 局 后 . 可 以进 行 连 接 就 线 了。 Poe 类似 ,rtu 也具有 自动捕捉节点和 自动布线 功能. 与 rt l Poes 连 线时当鼠标 的指针靠近一个对 象的引脚时 跟着鼠标的指针就会 出现 个… 提示符号 , x’ 点击 鼠标左键 即可画线, 在终点再点击确认一下就
基于Proteus的ARM虚拟实验平台
杆件 的力矩平衡条件 .C A 杆的C 端弯矩为逆时 针方 向. 即右侧受托 .D 端为铰点 . B 杆D 弯矩为
零 因而在C 结点及C 杆的受力图巾 .端 的弯 D C
规定 正负号是缺乏依 据也是不可取 的 .尤其 是杆 件受力及结点 的受力会存在作用 力与反
作 用力 . 向相 反 . 方 往往会得 到错误 的判 断 ,
台 的重要补充 .兼具 良好 的可 扩展性与灵活 性. 丰富 了A M嵌入式实验 教学的手段 . R 降低 了实验成本 本文提 出了一种基 于Po u 的 res t A M虚拟实验平台的方案 . R 设计 了4 4 x 矩阵键 盘接 口、C 显示接 M、串行 口、P 接 M、 C LD SI I 2 接 口、 D 换接 口、 I 口和外部中断接 口, A转 S 接 P 并移植了L / S I t L O —I] C  ̄ 该实验平 台 . 了设计 验证 的正确性 相 比于传统 的实验平台 . 虚拟实验
学 1 1 辅0 第期 2年 0 1
陈 家义 ( 西北 海职 业学 院 5 6 0 ) 广 3 0 0
摘要 : 针对 目 R S验教学中理论为主 前A M 的情况.提 出了一种基 于 rt s P 2x 构 Poe 和L C 1x u 建虚拟A RM 实验平台的方案. 并在该实验平台
一
1 res . o u 软件 简介 Po u 是英 旧Lb P t res t a— cne lcrne公 司开 发的电子 电路 实物仿 etrEet is o 真软件 . 它是完整的 嵌人式 系统软 、 硬什 设汁 仿真平 台 . 括原理 图输 入系统II、 扩展 包 S 带 S
表明.该实验平 台具有很好的灵活性与可扩展 性. 能有效地节约实验成本 关键词 ! o u P 2 x 虚拟A P t s C 1x r e L RM 实
proteus单片机实验报告
proteus单片机实验报告
Proteus单片机实验报告
一、实验目的
本次实验旨在通过Proteus单片机仿真软件,探索单片机的基本原理和应用,加深对单片机工作原理的理解,提高对单片机编程的熟练程度。
二、实验内容
1. 搭建单片机电路
在Proteus中选择合适的单片机模型,搭建基本的单片机电路,包括单片机、晶振、电源等。
2. 编写程序
利用Proteus提供的编程环境,编写简单的单片机程序,如LED灯闪烁、数码管显示等。
3. 仿真调试
通过Proteus的仿真功能,调试程序,观察单片机在仿真环境下的运行情况,检查程序是否正常运行。
三、实验步骤
1. 打开Proteus软件,选择合适的单片机模型,搭建单片机电路。
2. 编写简单的单片机程序,如让LED灯交替闪烁。
3. 在Proteus中进行仿真调试,观察程序运行情况。
四、实验结果
通过实验,我们成功搭建了单片机电路,并编写了简单的程序。
在Proteus的仿真环境下,LED灯按照设定的程序交替闪烁,证明程序正常运行。
五、实验总结
通过本次实验,我们加深了对单片机的理解,掌握了在Proteus中搭建单片机电路、编写程序并进行仿真调试的基本方法。
同时,也提高了对单片机编程的熟练程度。
总之,Proteus单片机实验为我们提供了一个良好的学习平台,使我们能够更好地理解单片机的工作原理和应用,为以后的学习和实践打下了坚实的基础。
希望通过不断地实践和探索,能够更深入地理解单片机的原理,并在实际应用中发挥其巨大的作用。
Proteus仿真ARM7实验手册
5
选择模板
File > New Design
Proteus 仿真 ARM7 实验手册
选择 Landscape A4 模板 > OK。
选择模板
保存(Save Design):counter
添加模板
中国科学院西安网络中心 © 2007 - ARM7 实验手册
选取元件
Library > Pick Devices/Symbol….。
Edit Component 对话框
单击 Program File 的浏览按钮 ,添加已经编译好的目标程序文件 counter.hex,OK。
中国科学院西安网络中心 © 2007 - 2008
12
单击启动仿真按钮
Proteus 仿真 ARM7 实验手册
,运行仿真,单击电路图中按键可观察到数码管数字增大或减小。
电路原理图
打开 Keil 项目
打开已有的项目:Project > Open Project…
多个外部中断——ARM的Proteus实验
多个外部中断——ARM的Proteus实验实验原理ARM开启两个中断源Eint1与Eint2,分别用一个按钮来控制。
在没有中断的时候两个LED都缓慢闪烁,当任何一个中断被出发的时候,对应的LED会急促闪烁,逐渐回复正常。
Proteus仿真电路图C语言源程序#include <LPC21XX.H>#define LED1 0x02000000/*LED1接在P0.25上*/#define LED0 0x01000000/*LED0接在P0.24上*/typedef unsigned int uint32;void Eint1_ISR(void) __attribute__ ((interrupt));/*声明某函数为中断服务子程序的方法*/void Eint0_ISR(void) __attribute__ ((interrupt));uint32 times = 40;/*循环次数默认为40*/void delay40(void) {unsigned volatile long i,j;for(i=0;i<10000;i++)for(j=0;j<times;j++);if(times > 40){times-=2;}else if(times <40){times+=2;}}void Eint0_ISR(void){times = 0;while(times!=40){IO0CLR = LED0;delay40();IO0SET = LED0;delay40();}while((EXTINT&0x01)!=0){EXTINT=0x01;/*清除EINT0中断标志*/}VICVectAddr=0x00;}void Eint1_ISR(void){times = 0;while(times!=40){IO0CLR = LED1;delay40();IO0SET = LED1;delay40();}while((EXTINT&0x02)!=0){EXTINT=0x02;/*清除EINT1中断标志*/}VICVectAddr=0;}int main(void){IO0DIR = LED1|LED0;PINSEL0 = 0x20000000;/*引脚选中EINT1功能*/PINSEL1 = 0x00000001;/*引脚选中EINT0功能*//*以下为中断控制部分*/VICIntSelect=0;/*全部中断设置为IRQ,若某位为1是FIQ*/VICIntEnable=0x0000C000;/*使能EINT1、0,EINT1为第15位,0为14位*/VICVectCntl0=0x2E;/*EINT0最高优先级*/VICVectAddr0=(int)Eint0_ISR;/*设置EINT0向量地址*/VICVectCntl1=0x2F;/*0xF,15号中断*/VICVectAddr1=(int)Eint1_ISR;/*设置中断服务子程序*/EXTINT=0x07;while (1) {/*无中断时,两灯一起缓慢闪烁*/IO0CLR = LED1|LED0;delay40();IO0SET = LED1|LED0;delay40();}}。
基于Proteus的ARM7虚拟实验设计
基于Proteus的ARM7虚拟实验设计【摘要】仿真软件Proteus是英国Labcenter electronics公司的EDA工具软件,在全球广泛使用。
它可以仿真常用单片机以及外围电路的工作情况,并能直接在原理图上建立互动的电路仿真,在配合其内置的虚拟器如过滤器、逻辑分析仪等可建立完整的ARM7实验平台[1]。
与此同时,Proteus可以和Keil uVision 建立互动调试机制,展现现实在线调试场景。
本文主要介绍了在Proteus下如何建立ARM7基本实验环境。
【关键词】Proteus;单片机;仿真;ARM7ARM处理器是一种低功耗高性能的32位RISC处理器,ARM处理器是一个综合体,ARM公司自身并不制造微处理器,而是同ARM的合作伙伴来制造,作为SOC(System On Chip)的典型应用,目前,基于ARM的处理器以其高速度、低功耗等诸多优异的性能而得到非常广泛的应用。
1.ARM7处理器特性及其应用领域ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。
ARM微处理器及技术的应用几乎已经深入到各个领域:(1)工业控制领域作为32的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战;(2)无线通讯领域目前已有超过85%的无线通讯设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固;(3)网络应用随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。
此外,ARM在语音及视频处理上行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战;(4)消费类电子产品ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用;(5)成像和安全产品现在流行的数码相机和打印机中绝大部分采用ARM技术。
仿真软件ProteuS在ARM系统设计中的应用.
仿真软件ProteuS在ARM系统设计中的应用仿真软件ProteuS在ARM系统设计中的应用类别:EDA/PLD引言现在,人们生活中的每个角落都有嵌入式设备的存在,比如DVD、移动电话、MP3及掌上电脑等等。
这些嵌入式设备多采用32位RISC嵌入式处理器作为核心部件。
其中基于ARM核的嵌入式处理器独占鳌头,在32位RISC处理器中占据超过75%的市场份额。
因而越来越多的电子爱好者都加入了学习ARM的队伍中。
通过和一般单片机系统开发过程的比较不难发现,嵌入式系统的设计包括硬件设计和软件设计两个方面,其调试过程包括软件调试、硬件测试、系统调试3个过程。
软件调试一般比较容易进行,但是硬件测试和系统调试则比较麻烦,因为要进行这两个过程必须在 PCB制作、元器件焊接完毕之后才能进行;而PCB的制作、元器件的焊接是非常费时费力的,如果能采用仿真工具ProteuS VSM,则不用制作具体的电路板也能够完成以上工作。
毫无疑问,这样可给广大ARM学习者带来很大的方便。
1 Proteus 简介Proteus软件是英国Labcenter electronics公司的EDA工具软件,是一个电子设计的教学平台、实验平台和创新平台,涵盖了电工电子实验室、电子技术实验室、单片机应用实验室等的全部功能。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。
该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及Phil-lips公司的ARM(LPC系列)等。
ARM嵌入式系统原理实验 proteus和mdk使用指南
Proteus和MDK使用指南首先,我们用Proteus软件进行嵌入式硬件电路图的设计,这里以流水灯实验为例。
第1步,打开Proteus 7 professional,进入ISIS 7 professional。
第2步,新建一个设计。
File→New Design→选择第一个Default模板(见下图),然后取名保存(见下图)。
第3步,从库中选择器件。
按左上方的按钮(见下图),在界面的Keywords 中输入所需器件名称,在右边的Result窗口可见所选器件(见下图),双击Result 窗口内该器件,可将其放入Device列表中(见下图),供后续步骤使用。
选完所有器件,点击界面右下角的OK,若选错器件可在Device列表中点中器件右击后选择删除。
实验五所需器件为:LPC2138,LED-GREEN(LED发光二级管), RES(电阻)实验六、七所需器件为:LPC2138,LED-GREEN(LED发光二级管), RES(电阻),BUTTON(按键)实验八所需器件为:LPC2138,7SEG-COM-CAT-GRN(发光数码管), RES(电阻)第4步,放置器件至画板。
在Device列表中点击所需放置的器件名称,然后移动鼠标至画板上,任意处点击一下即可出现器件的红色影子(见下图),可移动鼠标选择放置区域,选定区域后点击鼠标,便可将该器件放置在该处。
过程中也可按右键取消放置。
可按此方法将该器件连续放置到多处(见下图)。
如果不需要该器件,可选中器件后右键再选删除。
滚动鼠标中间按钮可放大/缩小画板,以方便连线和观察。
放置完器件后还需放置电源和地。
点击界面最左边模式列表中的,切换到Terminals Mode,分别选择POWER(电源)和GROUND(地)并放置到画板上(见下图)。
做完该步骤后,可按切换回Component Mode继续放置其他器件,或按切换到Selection Mode。
第5步,修改电源值和电阻值。
实验一说明
实验一:PROTEUS和Realview 2.2安装和使用实验内容:安装PROTEUS电路仿真软和Realview 2.2ARM程序集成开发工具到实验用机,通过实例程序学习RPOTEUS和Realview2.2工具的使用。
实验目的:基本掌握在PC机环境下电路仿真设计软件和ARM程序开发工具的安装,搭建用于实验的基本环境,初步学习这两种软件的基本功能和使用方法。
实验步骤:1.安装PROTEUS打开“实验相关”文件夹,在“proteus”文件夹下双击“PROTUES6.9.SP4”文件夹,并运行“Prosys6.9.04.exe”文件进行系统安装,安装目录为默认值,不作改变。
安装过程中输入“密码.TXT”文件中的密码“excidium”。
安装完成后在系统“开始”-“所有程序”可以看到“PROTEUS 6 professional”;运行“Licence Manager”在弹出的宣窗口中选择按键,找到Proteus安装程序下的“licence.lxk”,打开后会出现如下窗口:用鼠标点击左边窗口中的V6 PRO,使之成为上图所示状态,点下面的“Install”按键,在出现的提示窗口中选择确定,会结束提示,在返回后选择“Close”,结束Licence的输入。
. 2.安装RVDS软件及破解打开“RVDS-2-2”文件夹,运行“setup.exe”文件,进行RVDS2.2工具安装,使用默认路径安装,安装过程都使用默认选项即可,当进行Licenseq询问时选择第二项“Install license”然后按“下一步”直至完成。
完装完成后需要进行一定的破解工作,步骤如下:首先,运行“Crack”文件夹下的“PA TCH.EXE”程序,然后逐一为以下文件加上校验码,(安装路径默认为“C:\Program files\ARM”):安装路径\IDEs\CodeWarrior\CodeWarrior\5.6.1\1592\win_32-pentium\bin\Plugins\License\oemlicense.dll安装路径\IDEs\CodeWarrior\RVPlugins\1.0\86\win_32-pentium\oemlicense\oemlicense.dll 安装路径\RDI\armsd\1.3.1\66\win_32-pentium\armsd.exe安装路径\RDI\AXD\1.3.1\98\win_32-pentium\axd.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\armasm.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\armcc.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\armcpp.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\armlink.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\fromelf.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\tcc.exe安装路径\RVCT\Programs\2.2\349\win_32-pentium\tcpp.exe安装路径\RVD\Core\1.8\734\win_32-pentium\bin\tvs.exe安装路径\RVD\Core\1.8\734\win_32-pentium\bin\xry100.dll其次,运行“Crack”文件夹下的“KEYGEN.EXE”程序将成生的“License.dat”文件拷贝到RVDS安装的文件夹“ARM”下。
Proteus仿真单片机实验
目录引言 (2)实验1 PROTUES环境及LED闪烁综合实验 (7)实验2 多路开关状态指示 (10)实验3 报警产生器 (13)实验4 I/O并行口直接驱动LED显示 (16)实验5 按键识别方法之一 (19)实验6 一键多功能按键识别技术 (22)实验7 定时计数器T0作定时应用技术 (25)实验8定时计数器T0作定时应用技术 (28)实验9 “嘀、嘀、......”报警声 (32)实验10 8X8 LED点阵显示技术 (36)实验11电子琴 (40)引言单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能化管理和过程控制等领域。
以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。
在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。
利用Proteus我们可以很好地解决这个问题,由此我们可以快速地建立一个单片机仿真系统。
1. Proteus介绍Proteus是英国Labcenter Electronics公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是高级布线及编辑软件ARES (Advanced Routing and Editing Software)也就是PCB。
1.1 Proteus VSM的仿真Proteus可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。
Proteus可提供30多种元件库,超过8000种模拟、数字元器件。
可以按照设计的要求选择不同生产厂家的元器件。
此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。
除拥有丰富的元器件外,Proteus还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI调试器等虚拟终端。
UART——ARM的Proteus实验
UART——ARM的Proteus实验实验原理ARM的P0.0口接LED,串口接Proteus的虚拟终端。
每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。
Proteus仿真电路图C语言源程序#include <LPC21xx.H>#include "uart.h"#define CR 0x0Dchar ledDown[]={"The LED is down!\n"};char ledUp[]={"The LED is up!\n"};int putchar (int ch) {/* 向串口输出一个字符 */ if (ch == '\n') {while (!(U1LSR & 0x20));U1THR = CR; a}while (!(U1LSR & 0x20));return (U1THR = ch);}void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<5;j++);}void serialPuts(char *p){/* 向串口输出字符串 */ while (*p != '\0'){putchar(*p++);}}int main (void) {/* 开始初始化串口 */PINSEL0 = 0x00050000;/* 设置引脚,开串口功能 */ U1LCR = 0x83;/* 8位数据,无效验,一个停止位 */ U1DLL = 97;/* VPB 15MHz的时候波特率为9600 */ U1LCR = 0x03;/* DLAB = 0 *//* 结束初始化串口 */IO0DIR = 0x000001;/*将P0.0设置为输出 */while (1) {IO0CLR = 0x000001;serialPuts(ledUp);delay();IO0SET = 0x000001;serialPuts(ledDown);delay();}}。
SPI通信(多从设备)——ARM的Proteus实验
SPI通信(多从设备)——ARM的Proteus实验SPI通信(多从设备)——ARM的Proteus实验实验原理使用SPI协议,利用ARM控制数码显示管1显示1到F,数码显示管2则从F到1倒计数,数码显示管则一直显示0。
该连接方法使用片选来激活不同的SPI从设备(HC595)。
Proteus仿真电路图C语言源程序下面是主程序文件,串口部分的程序代码与“中断结合串口”相同,所以省略。
#include#include "uart0.h"#define HC595_CS 0x00000100/*P0.8口为第一个74HC595的片选*/ #define HC595_CS2 0x00000200/*P0.9口为第二个74HC595的片选*/ #define HC595_CS3 0x00000400/*P0.10口为第三个74HC595的片选*/ typedef unsigned int uint32;typedef unsigned char uint8;char status[] = "Everytnig is fine.";uint8 const DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};uint8 rcv_data;void delay(void) {unsigned volatile long i,j;for(i=0;i<10000;i++)for(j=0;j<30;j++);}void spiInit(void){S0SPCCR=0x52;/*设置SPI时钟分频*/S0SPCR=0x30;/*设置SPI接口模式*/}uint8 spiChar(uint8 data){IO0CLR=HC595_CS;/*SPI1片选*/S0SPDR=data;while(0==(S0SPSR&0x80));/*等待SPIF置位,即等待数据发送完毕*/IO0SET=HC595_CS;return(S0SPDR);}uint8 spi2Char(uint8 data){IO0CLR=HC595_CS2;/*SPI2片选*/S0SPDR=data;while(0==(S0SPSR&0x80));IO0SET=HC595_CS2;return(S0SPDR);}uint8 spi3Char(uint8 data){IO0CLR=HC595_CS3;/*SPI3片选*/S0SPDR=data;while(0==(S0SPSR&0x80));IO0SET=HC595_CS3;return(S0SPDR);}int main(void){uint8 i;PINSEL0 = 0x00005505;/*引脚开SPI、UART0*/IO0DIR=HC595_CS|HC595_CS2|HC595_CS3;spiInit();/*初始化SPI接口*/uart0Init();while(1){for (i=0;i<16;i++) {if(i<10){putchar(i+'0');}else{putchar(i+7+'0');}rcv_data=spiChar(DISP_TAB[i]);/*发送显示数据到数码显示管1*/rcv_data=spi2Char(DISP_TAB[15-i]);/*数码显示管2*/rcv_data=spi3Char(DISP_TAB[0]);/*数码显示管2*/ delay();}serialPuts(status);}}。
proteus与arm联调
我使用Proteus7.5SP3和KeilC51V8.02,MDK3.7建立ARM7仿真环境,可是按照以前的做法,安装联调驱动vdmagdi,然后修改安装目录下的tools.ini文件就可以联调了,这种方法适用于51。
但在调试ARM时de bug下拉列表里根本找不到Proteus VSM Debugger。
我发现的ARM解决方法:不去修改tools.ini文件,而是打开tools.ini文件,找一个不常用的驱动,然后把VDMARM.dll(安装vdmagdi驱动后在 C:\Keil\ARM\BIN中)复制到ini文件指向的路径,并把他的名字改成ini文件所指向的文件,也就是替换原来的文件。
例如:TDRV8=STLink\ST-LINKIII-KEIL.dll ("ST-Link Debugger"),把VDMARM.dll放在那个路径下(默认路径为:C:\Keil\ARM\STLink),并把其命名为ST-LINKIII-KEIL.dll ,仿真时选择ST-Link Deb ugger就可以连上Proteus了。
(记得在proteus中的Debug中选择Use remote debug monitor,并在使用mdk调试前把proteus打开并载入相应的hex文件)keil for arm 中的设置(原文件名:1.JPG)我使用的是Proteus7.5SP3和MDK3.7,按照上面的方法联调成功,可单步执行!!以下给个我调试成功的联调驱动和例子:proteus与keil联调驱动ourdev_477016.rar(文件大小:1.13M)(原文件名:vdmagdi.rar)ARM7内核LPC2106流水灯MDK程序和proteus仿真电路图ourdev_477011.rar(文件大小:85K)(原文件名:ARM7内核LPC2106流水灯MDK程序和proteus仿真电路图.rar)lpc2124-lcd1602程序与仿真ourdev_477055.rar(文件大小:99K)(原文件名:lpc2124-lcd1602程序与仿真.rar)keil uvision3与proteus7联调platform: winXp sp2proteus7.4 pro sp3keil_version: c51v817a联调的必要条件:1. 已经在电脑上装好了Keil与Proteus7这两个条件,而且都能够正常使用。
proteus单片机pcbarm实验报告
proteus单片机pcbarm实验报告实验一、单片机间的多机通信 0实验二、I2C总线应用技术 (8)实验三、层次原理图设计 (12)实验四、元件封装的创建 (15)实验五、自动布局 (17)实验六、开关操纵LED (21)实验七、中断计数器 (24)实验八、UART (29)实验一、单片机间的多机通信(1)实验题目采纳C语言实现单片机间的多机通信。
实现内容:三个51单片机进行多机通信。
一个单片机用于温度的采集(可采纳可变电阻模拟温度值),一个单片机用于操纵8个LED灯循环显示,显示的时刻间隔从主机中获得,主机用于发送温度的大小值及循环显示的时刻给从机。
(2)实验目的●把握proteus和软件环境——keilC的联机调试过程●把握基于ARM c编程基础(3)实验设备1.Proteus 8 Professional 仿真开发环境;2.Keil uVision4(4)实验步骤1.1打开Proteus 8,选择isis绘制电路图,点击p添加元件AT89C51, BUTTON, CAP, CAP-ELEC, CRYSTAL, RES.1.2绘制电路图如图所示:2.1打开Keil uVision5,new project和new file2.2编写代码:(c语言)/************************************实验一*主机*发送循环显示时刻和温度值给从机*************************************/#include<reg51.h>#include<string.h>#define _SUCC_ 0x0f//数据传送成功#define _ERR_ 0xf0//数据传送失败#define uchar unsigned char#define uint unsigned intuint Time[]={0,1,2,3,4,5,6,7}; //循环显示时刻间隔(s)uint T[] = {22,33,66,77,88,99};sbit KEY1=P3^3;sbit KEY2=P3^5;uchar count =0;//延时1ms函数void delay_1ms(uint t){uint y;while(t--)for(y=110;y>0;y--);}//串口初始化函数void serial_init(){TMOD=0x20; //定时器1工作于方式2TH1=0xfd;TL1=0xfd; //波特率为9600PCON=0;SCON=0xd0; //串口工作于方式3TR1=1; //开启定时器TI=0;RI=0;}//发送数据函数void SEND_data(uint *Buff){TI=0; //发送数据长度TB8=0; //发送数据帧P2 = Buff[count];SBUF=Buff[count];while(!TI);TI=0;count++;count=count%5;}//向指定从机地址发送数据void ADDR_data(uchar addr, uint *Buff){uchar temp=0xff;while(temp!=addr) //主机等待从机返回其地址作为应答信号{TI=0; //发送从机地址TB8=1; //发送地址帧SBUF=addr;while(!TI);TI=0;RI=0;while(!RI);temp=SBUF;RI=0;}SEND_data(Buff);}//main函数void main(){serial_init();while(1){if(KEY1==0){delay_1ms(5);if(KEY1==0){while(!KEY1);ADDR_data(0x01,Time);}}if(KEY2==0){delay_1ms(5);if(KEY2==0){while(!KEY2);ADDR_data(0x02,T);}}}}/*********************************** *实验一*从机1*接收主机发送的温度值*************************************/ #include<reg51.h>#include<string.h>#include<intrins.h>#define addr 0x02//从机2的地址#define _SUCC_ 0x0f//数据传送成功#define _ERR_ 0xf0//数据传送失败#define uint unsigned int#define uchar unsigned charunsigned char Buff[20];//数据缓冲区uchar flag = 0; //要求标志sbit cs = P1^0;sbit clk = P1^1;sbit dio = P1^2;//串口初始化函数void serial_init(){TMOD=0x20; //定时器1工作于方式2 TH1=0xfd;TL1=0xfd; //波特率为9600PCON=0;SCON=0xd0; //串口工作于方式3 TR1=1; //开启定时器TI=0;RI=0;}//----------------------------------//延时//-----------------------------------void delay(uint x ){uint i;while(x--) for(i = 0;i <120; i++);}//--------------------------------------//得到ad转结果//-------------------------------------uchar get_ad_result(){uchar i,dat1 = 0,dat2 = 0;cs = 0;clk=0;dio = 1;_nop_();_nop_();clk = 1;_nop_();_nop_();clk = 0;dio = 1; _nop_();_nop_();clk = 1; _nop_();_nop_();clk=0 ;dio = 0; _nop_();_nop_();clk=1 ;dio = 1; _nop_();_nop_();clk=0;dio = 1; _nop_();_nop_();for(i= 0;i<8;i++){clk=1; _nop_();_nop_();clk=0; _nop_();_nop_();dat1 = dat1<<1|dio;}for(i= 0;i<8;i++){dat2 = dat2 |((uchar)(dio)<<i);clk=1; _nop_();_nop_();clk=0; _nop_();_nop_();}cs =1;return (dat1 == dat2)? dat1:0;}//------------------------------------//主函数//-------------------------------------void main(){uint i = 0 ,j=0;uchar temp = 0,temp2 = 0;uchar aa = 0xff;serial_init();while(1){SM2 = 1; //接收地址帧aa = 0xff;while(aa!=addr) //从机等待主机要求自己的地址{RI=0;while(!RI){temp = get_ad_result();//温度采集结果if(temp != temp2)P2 = temp;}temp2 = temp;aa=SBUF;RI=0;}TI=0; //一旦被要求,从机返回自己地址作为应答,等待接收数据TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0; //接收数据帧RI=0;while(!RI);Buff[i]=SBUF; //数据帧RI=0;P2 = Buff[i];//查看接收到的数据}}/*********************************** *实验一*从机2*接收主机发送的循环显示时刻*************************************/ #include<reg51.h>#include<string.h>#include<intrins.h>#define addr 0x01//从机2的地址#define _SUCC_ 0x0f//数据传送成功#define _ERR_ 0xf0//数据传送失败#define uint unsigned int#define uchar unsigned charuint code sTable[]={0,10,20,40,60,80,100,150}; uint Buff[20];//数据缓冲区uchar light = 0x00;uint speed = 0;uint tcount = 0;//串口初始化函数void serial_init(){TMOD=0x20; //定时器1工作于方式2TH1=0xfd;TL1=0xfd; //波特率为9600PCON=0;SCON=0xd0; //串口工作于方式3TR1=1; //开启定时器TI=0;RI=0;}//----------------------------------//延时//-----------------------------------void T0_INT() interrupt 1{if(tcount++ < speed) return;tcount = 0;P1 = light;light = _crol_(light , 1);}//------------------------------------//主函数//-------------------------------------void main(){uint i = 0 ,j=0;uint m;uchar aa = 0xff;serial_init();IE = 0X82;TR0 = 1;while(1){SM2=1; //接收地址帧aa=0xff;while(aa!=addr) //从机等待主机要求自己的地址{RI=0;while(!RI);aa=SBUF;RI=0;}TI=0; //一旦被要求,从机返回自己地址作为应答,等待接收数据TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0; //接收数据帧RI=0;while(!RI);m=SBUF; //数据帧RI=0;speed = sTable[m];P2=m; //查看接收到的数据light = 0x01;}}2.3 compile file,生成.HEX文件(5)实验小结本次实验,实验二、I2C总线应用技术(1)实验题目实验题目:采纳C语言完成I2C的通信。
proteus仿真ARM
proteus仿真ARM学习ARM前需要的基础1. 前辈学习ARM的经验~ (我是在嵌入式开发联盟的新人区看的帖子。
)2. 掌握C语言编程。
3. 了解简单的微机算计原理知识,例如二进制,计算机程序的执行过程,总线(数据、地址、控制),软件系统(系统软件与应用软件)。
4. 听说过RISC与CISC,高级语言与低级语言的区别。
5. 最好听说过串行传输与并行传输。
6. 普林斯顿(ARM7)和哈佛结构(ARM9、10、11—)。
什么是ARM,学ARM,自然要理解ARM是什么,也好明确学习目标。
网上的资料很多,“ARM 是一家公司,也是一个处理器体系”……我将学ARM分为以下几类:1. 做ARM的核心研发。
也就是进ARM公司做IP核,应该是学电子之类的东西吧。
2. 买ARM的IP核,做具体的嵌入式处理器、核心板,例如三星和NXP。
3. 买ARM核心板,连接外围电路制作教育用或开发用的开发板,或者直接开发其它中断产品。
4. 买ARM开发板做产品,要做系统软件和应用软件。
3和4基本并列了。
ARM基础任何一本介绍ARM体系结构书籍都应该有这些内容。
处理器模式用户模式、特权模式又分为系统模式、管理模式、快中断模式、中断模式、终止模式、未定义指令终止模式。
2. 寄存器R0-R7、R15和CPSR是所有模式共享的。
R8-R12出快中断模式有RX-fiq外所有模式共享。
R13、R14和SPSR只有用户模式和系统模式共享,其它都有似有SPSR。
R15(PC)程序计数器R16(CPSR)程序转台寄存器R13(SP)堆栈指针P14(LR)链接寄存器ARM指令集汇编程序设计略了,我看了,但是做Proteus仿真实验没用上,两天就忘了。
LPC2000 我买的3本ARM入门书籍中有两本都是以LPC2000系列为例的,其实从网上可以下载到具体LPC2XXX处理器的datasheet,上面的资料是最权威和详尽的。
引脚选择PINSEL0、PINSEL1设置各个引脚的功能。
ARM设计实验报告
目录一,实验目的二,实验软件, 硬件三,实验题目及要求(设计要求)四,软件时钟设计总体方案五,软件时钟的电路原理图六,程序流程图及C程序(软件部分)七,Proteus仿真图(硬件部分)一实验目的。
1,应用所学的ARM知识设计一个实时时钟掌握LPC2106中断处理, RTC的使用。
二实验软件, 硬件。
软件:proteus6.9仿真软件, ARM开发环境ADS.硬件: WINDOW 2000/XP PC机一台。
三实验题目及要求(设计要求)。
题目: 带报警功能并且可以调节时间的实时时钟。
要求: 1, 实时时间可通过按键选择调节。
2, 可以通过按键设定报警时间。
3, 当达到报警时间时, 蜂鸣器响一下, LED灯点亮。
4, 报警时间和实时时间通过液晶模块LCD1602显示四软件时钟设计总体方案本实验是基于LPC2106ARM处理器而设计的实时时钟, 综合性较强, 涉及到RTC外部中断, 引脚的GPIO功能, C语言编程等知识。
首先要定义P0口为基本I\O功能, 然后通过引脚功能选择寄存器PINSEL0及PINSEL1定义输入输出外部中断口所在的位, 另外还要对外部中断进行初始化, 其中有规定他们的优先级, 中断触发方式, 中断地址分配, 本实验采用液晶模块LCD1602同时显示实时时间和报警时间, 同样要对他们进行初始化, 包括检查总线忙与闲, 传送地址, 传送数据及显示函数的编程、1,LPC2106微控制器自带有一个实时时钟RTC带日历和时钟功能, 要使用它也要进行一下的基本操作:2,设置RTC基准时钟分频器3,初始化RTC的时钟值如, YEAR,MONTH,HOUR等4,启动RTC即CCR的CLKEN位职位5,读取完整时间寄存器值或等待中断。
陈述完以上的模块初始化后, 下面简要说明一下程序的流程先调用以上各个模块的初始化函数lcd_int(),RTCint()然后开启RTC时钟, 并调用LCD显示函数SendTimetRtc(),如果没用中断发生就判断实时时间是否与以设定的报警时间相同, 如果相同就马上接通蜂鸣器报警并且点亮LED灯。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED闪烁——ARM的Proteus实验实验原理ARM(LPC21XX)的一个I/O口接LED,通过给它送0和1来设置LED的亮和灭。
Proteus仿真电路图步骤KEIL1.创建新工程2.选择ARM型号(KEIL会自动生成启动代码startup.s)3.添加源文件,编写程序4.设置项目选项(是否输出hex、lst文件,设置linker script)Proteus1.绘制电路图2.载入程序3.仿真C语言源程序/******************************************************************************//**//* led.c: 用ARM点亮一个led并闪烁,有点浪费…… *//**//******************************************************************************/#include <LPC21xx.H>/*********************************************************************************函数名: delay()**描述: 软件延时********************************************************************************/void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<5;j++);}int main(void) {PINSEL0 = 0; /*设置引脚为GPIO */IO0DIR = 0x000001; /*将P0.0设置为输出 */IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */while (1) {IO0CLR = 0x000001;delay();IO0SET = 0x000001;delay();}}菜鸟的ARM学习笔记(第一阶段)1.LED闪烁——ARM的Proteus实验2.开关控制LED——ARM的Proteus实验3.LCD——ARM的Proteus实验4.UART——ARM的Proteus实验5.Eint1外部中断——ARM的Proteus实验6.多个外部中断——ARM的Proteus实验7.中断结合串口——ARM的Proteus实验8.定时器——ARM的Proteus实验9.SPI通信——ARM的Proteus实验10.SPI通信(多从设备)——ARM的Proteus实验11.ADC数模转换——ARM的Proteus实验返回单片机目录,ARM目录,返回首页。
开关控制LED——ARM的Proteus实验实验原理ARM的P0.1口接按钮,再通过P0.0控制LED的亮、灭。
本实验的电路图以及实验均在上一个实验基础之上修改。
其中电路图只多了一个开关。
Proteus仿真电路图实验步骤略(与上一实验相同)C语言源程序/******************************************************************************//**//* led.c: 用ARM实现开关控制led并亮灭,还是有点浪费…… *//**//******************************************************************************/#include <LPC21xx.H>#define P0_1 0x02; /*P0.1*/ /*********************************************************************************函数名: delay()**描述: 软件延时********************************************************************************/void delay (void) {unsigned volatile long i;for(i=0;i<10000;i++);}int main(void) {int p01State;PINSEL0 = 0; /*设置引脚为GPIO */IO0DIR = 0x000001; /*将P0.0设置为输出 */IO0SET = 0x000001; /*将P0.0置1,也就是让led灭 */while (1) {p01State = IO0PIN&P0_1; /*读取开关状态*/if(p01State == 0){IO0CLR = 0x000001;delay();}else{IO0SET = 0x000001;delay();}}}菜鸟的ARM学习笔记(第一阶段)1.LED闪烁——ARM的Proteus实验2.开关控制LED——ARM的Proteus实验3.LCD——ARM的Proteus实验4.UART——ARM的Proteus实验5.Eint1外部中断——ARM的Proteus实验6.多个外部中断——ARM的Proteus实验7.中断结合串口——ARM的Proteus实验8.定时器——ARM的Proteus实验9.SPI通信——ARM的Proteus实验LCD——ARM的Proteus实验实验原理ARM的P0.0口到P0.10口接LCD,P0.11接LED。
每过一段时间LED状态改变,LCD显示LED的状态。
Proteus仿真电路图C语言源程序#include <LPC21XX.H>#define rs (1<<8)#define rw (1<<9)#define en (1<<10)#define busy (1<<7) //P0.7typedef unsigned char uint8;uint8 ledDown[]={"The LED is down!"};uint8 ledUp[]={"The LED is up!"};void waitLCD() /*等待LCD*/ {IO0DIR=0xf00;while(1){IO0CLR=rs;IO0SET=rw;IO0SET=en;if(!(IO0PIN & busy))break;IO0CLR = en;}IO0DIR=0xfff;}void lcdOp(uint8 dat)/*送LCD控制码*/{waitLCD();IO0CLR=rs;IO0CLR=rw;IO0CLR=0xff;IO0SET=dat;IO0SET=en;IO0CLR=en;}void lcdData(uint8 dat)/*送LCD显示数据*/{waitLCD();IO0SET=rs;IO0CLR=rw;IO0CLR=0xff;IO0SET=dat;IO0SET=en;IO0CLR=en;}void lcdInit(void)/*初始化LCD,DataSheet里有建议的初始化代码*/ {/* LCD配置为两行,5*7字体 */lcdOp(0x38);lcdOp(0x38);lcdOp(0x06);lcdOp(0x0E);lcdOp(0x01);/* LCD配置为一行,5*10字体lcdOp(0x34);lcdOp(0x34);lcdOp(0x06);lcdOp(0x0E);lcdOp(0x01);*/}void lcdDisplay(uint8 addr,uint8 *p)/*LCD显示字符串*/{lcdOp(addr);while(*p !='\0'){lcdData(*(p++));}}void lcdClear(void)/*LCD清屏*/{lcdOp(0x01);}void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<10;j++);}int main(void){lcdInit();/*初始化LCD显示*/IO0DIR=0xfff;//设置为输出口IO0CLR=0xfff;while (1) {IO0CLR = 0x000800;lcdDisplay(0x80,ledUp);delay();lcdClear();IO0SET = 0x000800;lcdDisplay(0x80,ledDown);delay();lcdClear();}}菜鸟的ARM学习笔记(第一阶段)1.LED闪烁——ARM的Proteus实验2.开关控制LED——ARM的Proteus实验3.LCD——ARM的Proteus实验4.UART——ARM的Proteus实验5.Eint1外部中断——ARM的Proteus实验6.多个外部中断——ARM的Proteus实验7.中断结合串口——ARM的Proteus实验8.定时器——ARM的Proteus实验9.SPI通信——ARM的Proteus实验10.SPI通信(多从设备)——ARM的Proteus实验11.ADC数模转换——ARM的Proteus实验UART——ARM的Proteus实验实验原理ARM的P0.0口接LED,串口接Proteus的虚拟终端。
每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。
Proteus仿真电路图C语言源程序#include <LPC21xx.H>#include "uart.h"#define CR 0x0Dchar ledDown[]={"The LED is down!\n"};char ledUp[]={"The LED is up!\n"};int putchar (int ch) {/* 向串口输出一个字符 */ if (ch == '\n') {while (!(U1LSR & 0x20));U1THR = CR; a}while (!(U1LSR & 0x20));return (U1THR = ch);}void delay (void) {unsigned volatile long i,j;for(i=0;i<60000;i++)for(j=0;j<5;j++);}void serialPuts(char *p){/* 向串口输出字符串 */ while (*p != '\0'){putchar(*p++);}}int main (void) {/* 开始初始化串口 */PINSEL0 = 0x00050000;/* 设置引脚,开串口功能 */ U1LCR = 0x83;/* 8位数据,无效验,一个停止位 */ U1DLL = 97;/* VPB 15MHz的时候波特率为9600 */ U1LCR = 0x03;/* DLAB = 0 *//* 结束初始化串口 */IO0DIR = 0x000001;/*将P0.0设置为输出 */while (1) {IO0CLR = 0x000001;serialPuts(ledUp);delay();IO0SET = 0x000001;serialPuts(ledDown);delay();}}菜鸟的ARM学习笔记(第一阶段)1.LED闪烁——ARM的Proteus实验2.开关控制LED——ARM的Proteus实验3.LCD——ARM的Proteus实验4.UART——ARM的Proteus实验5.Eint1外部中断——ARM的Proteus实验6.多个外部中断——ARM的Proteus实验7.中断结合串口——ARM的Proteus实验8.定时器——ARM的Proteus实验9.SPI通信——ARM的Proteus实验返回单片机目录,ARM目录,返回首页。