单片机c语言代码大全_单片机编程代码大全

单片机c语言代码大全_单片机编程代码大全STM32/51单片机编程入门目录:一、1.安装proteus2.完成一个c51程序二、1.安装mdk5和stm322.完成一个点亮LED灯的程序编译和仿真测试三、理论概念:1

STM32/51单片机编程入门   目录:   一、1.安装proteus   2.完成一个c51程序   二、1.安装mdk5和stm32   2.完成一个点亮LED灯的程序编译和仿真测试   三、理论概念:1.嵌入式c程序的操作概念   2.51单片机编程优点   四、理论概念:解释关键字register和volatile   五、总结   一、安装proteus和完成一个流水灯的程序输出   1.安装proteus   2.创建工程   进入proteus 8 professional创建原理图。   3.绘制原理图   创建完工程后在里面添加器件,绘制流水灯原理图:   
d3e7cb3a9c824b89a5ddf0b51ff4ac21.jpg   4.编写51程序   代码:   编译:   
fa877ca29658491988ec528eca9986c2.jpg   5.仿真测试:   
dad905a7d55e4958b4818b7e239156f5.jpg   这里截取视频中的两张图片   
028bc6b0416244f0a2c3117bed944937.jpg   
492941b3904143a3a20d08961fed3bc7.jpg   二、在mdk5上完成点亮LED的程序和仿真测试   1.安装keil 5和stm32包,完成参数设置。   2.打开keil 5新建工程编写代码并编译:   代码:   在keil 5里进行编译:   
97fabb643b5649b28ced5a7bac65ce64.jpg   3.调试仿真   完成参数设置后放大镜开始调试:   
单片机c语言代码大全_单片机编程代码大全   三、1.嵌入式C程序代码对内存(RAM)中的各变量的修改操作,与对外部设备(寄存器—>对应相关管脚)的操作有哪些相同与差别?   数据指针的相同和差别:   在嵌入式系统的编程中,常常要求在特定的内存单读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单内容的读写能力。   以指针直接操作内存多发生在如下几种情况:   (1) 某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址;   (2) 两个CPU之间以双端口RAM通信,CPU需要在双端口RAM的特定单(称为mail box)书写内容以在对方CPU产生中断;   (3) 读取在ROM或FLASH的特定单所烧录的汉字和英文字模。   注意:CPU以字节为单位编址,而C语言指针以指向的数据类型长度作自增和自减。理解这一点对于以指针直接操作内存是相当重要的。   函数指针的相同和差别:   (1)C语言中函数名直接对应于函数生成的指令代码在内存中的地址,因此函数名可以直接赋给指向函数的指针;   (2)调用函数实际上等同于“调转指令+参数传递处理+回归位置入栈”,本质上最核心的操作是将函数生成的目标代码的首地址赋给CPU的PC寄存器;   (3)因为函数调用的本质是跳转到某一个地址单的code去执行,所以可以“调用”一个根本就不存在的函数实体   注意:函数无它,唯指令集合耳;你可以调用一个没有函数体的函数,本质上只是换一个地址开始执行指令。   2.为什么51单片机的LED点灯编程要比STM32的简单?   STM32点灯难度系数要大一点,因为STM32外设资源更多,启动文件更复杂。   51单片机的任何器件只需要配置寄存器打开就可以进行编程,而STM32系列单片机则需要先打开对应的时钟,包括开启后打开外部时钟(晶振)才开始工作。   STM32的内部资源(寄存器和外设功能)较普通的51单片机都要多,基本上接近于计算机的CPU。   STM32基本不会选择汇编语言了,因为工程量巨大,寄存器太多了,位数也多,而51单片机则多使用汇编语言。   四、解释关键字register和volatile   1.register关键字作用:   如果一个变量用register来修饰,则意味着该变量会作为一个寄存器变量,让该变量的访问速度达到最快。例如,一个程序逻辑中有一个很大的循环,循环中有几个变量要频繁进行操作,这些变量可以声明为register类型。   register int a; 限制变量定义在寄存器上的修饰符 。   可定义快速访问的变量,如置于寄存器内,会进一步加快计算速度。   编译器会尽量的安排CPU的寄存器去寄存这个变量a,如果寄存器不足时,变量a还是会被放在存储器中。   注意事项:   register只能修饰局部变量,不能修饰全局变量和函数;   register修饰的变量不能通过取地址来寄存器变量;   register修饰的变量一定是CPU能接受的数据类型。   2.volatile关键字作用:   是告知编译器编译方法的关键字,不会优化编译。   即具体会体现在以下方面   (1)不会在两个操作之间把volatile变量缓存在寄存器当中,在多任务中,甚至stejmp环境下变量可能被其他程序改变,编译器无法知道,volatile就是告诉编译器这种情况的;   (2)不做常量合并,常量传播等优化;   (3)对volatile变量的读写不会被优化掉,如果你对一个变量赋值,但后面没用到,编译器常常可以忽略掉那个赋值操作,然而对Memory Mapped IO处理是不能这样优化的。   3.c程序说明:   (1)register   代码:   输出结果:   (2)volatile   源代码:   在一些编译软件中,可能会有优化:   这时候就需要用volatile关键字进行说明:   五、总结   通过本次实验,学会了如何使用Proteus创建工程,原理图的创建以及使用,并且设计一个简单的51原理图,通过keil软件进行编程,然后生成.hex文件在原理图里运行,这样一个简单的原理图就能实现运行了。在用mdk5编译程序时,因为没有硬件的接入,所以只做了代码编译和仿真测试,在这过程中学会了安装mdk5软件,并在里面创建工程,编写代码运行等。   通过查找资料以及程序学习,了解了GPIO的初始化需要通过时钟配置,输入输出模式设置,最大速率设置三个步骤来实现。在运行代码的过程中,我也发现不论代码怎么写,不论是寄存器,库函数,还是其他的操作系统,要在STM32F103这个单片机点亮LED灯,肯定需要把时钟和GPIO这几个相关的特殊地址,进行赋值或修改数值的操作。并且通过学习资料,还了解到了关键字register和volatile的含义,以及会用简单的c代码进行理解。   在这整个实验中,虽然遇到了很多问题,比如像keil 4编译代码却无法运行时,找了又找才发现安装的插件少了,然后就重新安装软件才能正常运行。还有就是安装keil 5时,在官网下载的是没有激活成功教程的,只有空的一个软件,里面什么功能都不能使用,后来在csdn里找到一个博客发的文章里有激活成功教程版的keil 5,也就是在管理员运行里激活成功教程,后续跟着安装就能使用正常的软件了。经历了这些,我也会更加熟练的使用keil类软件了,收获了至多的成长。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/85271.html

(0)
上一篇 2024年 7月 27日 上午10:28
下一篇 2024年 7月 27日 上午10:36

相关推荐

关注微信