C51单片机课程设计的课程学习总结及方法

通过本学期的课程以及课程设计,是我懂得了单片机应用系统的设计过程,更加深刻的理解了与实际结合的重要性,锻炼了自己的动手能力。第一阶段:掌握开发单片机的必备基础知识。虽然单片机的课程只是短短的一个学期,但是我们学习到的也仅仅是单片机中很基础的一些知识。

单片机课程设计是培养我们全面学习知识,发现、提出和解决实际问题,锻炼实践能力的重要组成部分。 它是对学生实际工作能力的具体检验过程。

回顾这学期的单片机课程设计,我学到了很多知识,不仅巩固了之前学过的一些知识,还学到了很多书本上没有学到的知识。 通过本学期的课程和课程设计,我了解了单片机应用系统的设计流程,更加深刻地认识到与实际结合的重要性,培养了自己的动手能力。

单片机可以用两种语言编写,一种是C语言,另一种是汇编语言。 汇编语言是机器语言,代码繁琐,不易记忆。 我需要掌握计算机的内部结构和逻辑结构。 看了几本书后,我发现汇编语言太繁琐了。 幸运的是,我在五年级最后一个学期学习了C语言,并且还参加了国家计算机二级考试。 我感觉自己在这方面有优势,学起来也很快。

通过这次LED和蜂鸣器的编写和调试,我对C51单片机有了更深入的了解。 虽然我在编写这个设计上花费了大量的时间,但我也收获了很多。 如果你想做一个项目,首先不要急于写程序。 你应该弄清楚你想要做什么以及它将完成什么功能。 它应该由几个部分来完成,每个部分完成什么功能,各个部分之间的联系是什么。 只要设计前思考好,就保证程序调试时不会出现那么多问题。 程序编译成功后,先不要急于下载。 你必须先模拟它。 只有仿真的效果才能达到要求。 通过这次考试实验,我也发现了自己的不足和存在的问题,因为在调试过程中还有很多不明白的地方。 所以我认为学习51单片机就是多思考、多实践、多做。 只有这样我们才能把单片机学得更加精湛。

从本学期的课程来看,学习单片机的过程应该是一个循序渐进、不断学习、不断积累的过程,可以分为两个阶段。

第一阶段:掌握开发单片机必要的基础知识。 首先是要精通单片机的基本原理。 事实上,各个系列的微控制器的基本结构和原理都是相似的。 尤其是常用知识,需要对内核结构、内存分配、中断处理、定时计数、串口通信等方面有很好的理解和掌握。 、端口复用以及一些最基本的概念和原则。 另外,我们还需要具备模拟电子学、数字电子学、C语言程序开发的知识,以及原理图、计算等一些技能。 开发一个系统时,不可避免地要进行原理设计、PCB布局、程序编写、系统联调等工作。 在掌握单片机原理和应用的基础上,开始学习其他单片机的独特功能。 如果你有技术,你可能学不到那么多,但你还是需要了解更多。 同时,应尽可能多地掌握单片机的外围器件和常用电路,以备不时之需。 例如,在项目开发过程中,将一些常用的接口程序和控制算法组织成模块或函数。 在其他项目的开发中,当有相同或相似的需求时,可以立即使用它们,既快又好。

第二阶段:在实际项目开发过程中,不断深化单片机应用技术,不断积累应用行业的专业知识。 例如,我完成了“基础实验例程”,然后我会尝试“中级实验例程”,最后是“高级实验例程”。 凭借扎实的单片机应用相关基础知识,熟悉几种不同类型单片机的开发方法,结合实际应用背景,您可以随心所欲地设计出性能最优、合理性的单片机应用系统。 这是我最大的目标。 我想这也应该是单片机应用的最高境界了。

通过这次单片机的考核和设计,我不仅加深了对单片机理论的理解,并将理论很好地运用到实践中,而且还学会了如何培养自己的创新精神,从而不断地战胜自己、超越自己。 创新是在原有的基础上进行改进,不断完善其功能,成为现实。 在这个设计过程中,我们对原有的计数器系统进行了改进,增加了暂停、计数、清零等三个控制功能,使其成为一个更适用、更完整的我们自己的系统。 设计结果能够满足问题意义,顺利完成实习要求。 我们不仅关心结果,更关心过程。 在这个过程中,我们花费了大量的时间和精力。 更重要的是,在学习创新的基础上,我们还懂得了合作精神的重要性,学会了与他人合作。

二、最终作品的设计、制作及调试分析

实验考核要求:设计制作“定时器计时实验”,考核相关知识和能力。 工作以测试盒作为实用演示工具,重点进行定时器的设计实验、编程、调试和运行,编写工程代码,现场验收,先演示,后提问。

要求:

1)结合课程实验硬件(参考硬件引脚定义),使用单片机的片内定时器进行计时。 外部时钟振荡器采用12MHz晶振,定时时间为1s。 单片机的P21引脚连接发光二极管,控制发光二极管以1s的时间间隔闪烁。

当按下P31 I/O口线上的按钮时,发光二极管按照设定的时间有规律地闪烁1秒,同时蜂鸣器间隔发出蜂鸣声,蜂鸣器与P15相连别针。

2)定时器采用定时器0,计时方式1,定时器初值设置为50ms。

目的:通过实际设计和调试,主要测试学生在单片机知识方面对硬件的认知能力以及硬件设计和编程的实践能力。 最后,提交相应的作品完成报告,并进行作品答辩。

实验通过以下代码实现:

#include   //此文件中定义了单片机的一些特殊功能寄存器
sbit k1=P3^1;     //定义P31口是k1
sbit seep=P1^5;   //定义P15口是蜂鸣器
int x=0,a=0; //对数据类型进行声明定义
char code shuzu [] ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(int x)   //延时函数
{
	int i,j;
	for(i=x;i>0;i--)
		for(j=110;j>0;j--);
}
void main()//主函数
{
	TMOD=0X01;//选择定时器,计数器工作方式 M1M0
	TH0=(65536-5000)/256;//TL0寄存器
	TL0=(65536-5000)%256; //TH0寄存器
	EA=1;	//全局中断允许位
	ET0=1; //打开定时器/计数器中断允许位
	TR0=1; //定时器运行控制位 等于1启动
	
		while(1)
		{		  
			switch(a)
			{
				case 1:	P2=shuzu[0];seep=!seep;delay(5);break;
				case 2:	P2=shuzu[1];break;
				case 3:	P2=shuzu[2];seep=!seep;delay(5);break;
				case 4:  P2=shuzu[3];break;
				case 5:  P2=shuzu[4];seep=!seep;delay(5);break;
				case 6:  P2=shuzu[5];break;
				case 7:  P2=shuzu[6];seep=!seep;delay(5);break;
				case 8:  P2=shuzu[7];a=0; break;		
			}
		}
	}
void T0_time() interrupt 1	//中断函数
{
	TH0=(65536-50000)/256; //50000=50毫秒,1机器周期1us,N=t/1us
	TL0=(65536-50000)%256;
	x++;
	if(x==20)
	{
		a++;
		x=0;
	}	
}

实验过程:

编译以上程序,执行后下载到烧录软件中下载。

实验结果如下:

当按下P1口发光二极管时,按设定时间有规律地闪烁1秒,同时蜂鸣器间隔鸣响。

三。 遇到的问题及遇到的解决方案:

整数x=0,y=0;

Y=x++;

按理说 x=1,y=0

实际结果x=0,y=0

解决:

查资料后发现:使用x++,这就是先给y赋值然后加一后x++和++x的区别。 y=x++; 意思是x先给y赋值然后+1,y=++x; 意思是x先自己+1,然后给y赋值。

++符号,在变量名右边,先取值再给自己加1,即先把x的值赋给y,x再给自己加1。

2.

串口通讯波特率问题:

在学习使用普中科技51开发板时,要特别注意串口通信实验教程中波特率的应用。

TMOD工作模式寄存器

TMODT1 定时器/计数器 T0 定时器/计数器 (89H) D7D6D5D4D3D2D1D0 位

定义 GATEC/TM1M0GATEC/TM1M0T1/定时器有 4 种工作模式: 模式 0:13 位定时器计数模式

模式1:16位定时器计数模式

模式2:8位自动重载模式

模式3:两种独立的8位定时计数模式(仅T0)

定时器计时时间计算方法:

Td=(2^n-计数)×fosc/12 (公式1)

其中Td为定时时间,n为位数,fosc为晶振频率,

除以 12,因为: 单指令周期 = 1 个机器周期 = 6 个状态周期 = 12 个时钟周期

计数:2^n-计数

其中,模式0不常用;

模式1常用于计时;

常用方式2,如串口波特率发生器

模式3不常用;

串口控制寄存器

位地址 9FH9EH9DH9CH9BH9AH99H98H 位定义 SM0SM1SM2RENTB8RB8TIRI 功能模式选择 多机控制 串行接收使能/禁止 发送第 9 位 接收第 9 位 发送中断 有/否 接收中断 有/否

串口有四种工作模式,由SM0和SM1位决定,定义如下:

SM0 SM1 工作模式 功能说明 波特率

0 0 模式 0 8 位移位寄存器 Fosc/12

0 1 模式 1 10 位 UART(包括起始位和停止位)变量

1 0 模式 2 11 位 UART(包括起始位和停止位) Fosc/64 或 fosc/32

1 1 模式 3 11 位 UART(包括起始位和停止位)变量

由式1可得

各种波特率:

模式0的波特率BR = fosc/12

模式2波特率BR = (2^SMOD/64)·fosc

模式1的波特率BR=(2^SMOD/64)·(Td溢出率)。 (公式2)

模式3的波特率BR = (2^SMOD/64)·(Td溢出率) (公式3)

将式1和式2化简后可得:

计数=2^n – (12×64×BR)/(2^SMOD×fosc)

注意2^n是否足够减少

四.课程学习经历

时间过得真快,转眼间学期就快结束了,一周内就完成了本学期的单片机检查。 其实我觉得单片机入门并没有我想象的那么难。 之前学习了模拟电子学之后,我可以很快上手微控制器的教材。 再次开始的时候,我看着别人写的代码运行起来。 后来了解了程序之后,自己再写一遍其实也没有那么难,尤其是跑灯、中断应用、按键检测等。

通过这学期的课程,我明白了一些道理。 我们必须学会掌握调试程序的方法。 很多人写程序,写代码,然后运行起来,结果不是自己想要的,就头晕了。 然后他们去论坛发帖子,把程序贴出来,问:为什么我的程序不能正常运行? ?那就等别人给你分析吧。 这是一种非常不好的行为。 你应该学会发现问题并学会如何自己解决问题。 这需要学习如何调试程序。 例如,在KEIL中,可以设置断点、查看寄存器内容等,这些都是调试程序的方法。 当你发现自己编写的程序运行结果与想象的不一样时。 ,可以单步执行,也可以设置断点,然后跟踪查看各个相关寄存器的内容,看看程序运行过程中是否有偏差,找出影响结果的因素,并进行修正。 这个过程非常重要。 通过程序调试,你可以学到书本上无法获得的知识。

另一个重要的一点:寻找解决问题的想法比寻找代码更重要。 我们使用微控制器来控制外围设备以实现我们心中的目标。 这是一个问题,而如何编写程序来控制设备按照你想要的结果进行操作,就是解决问题的思路。 要编写程序,首先必须找到解决问题的思路。 对你来说,学会找到这个解决问题的思路比你找到代码更重要。 许多人喜欢寻找别人的代码。 有些人甚至直接将代码复制到自己的程序中。 可以说,这不是一种学习态度,无助于提高你的编程水平。 我很少读别人的代码。 大多数时候我都会看别人的想法。 最好有框图,但如果没有,文本解释也可以。 从代码中看别人的程序,尤其是老师写的有一定水平的程序,可以快速提高自己的编程水平。 同时,你也可以将别人的编程技术与自己的想法结合起来,编写出更高水平的程序,并从中取得进步。 但要注意不要把学习变成抄袭,更不要以为抄袭后就学会了。 这样做只会让你退步。 尝试编写一个综合的应用程序。 从运行灯开始,转向动态扫描,然后停止。 如何协调各个功能模块的正常工作是程序员需要学习的。 当你单独编写一个函数时,比如读取按键,你可能会发现很容易,因为你的程序什么也不做,只是读取按键。 。 但当你把它与其他功能混合在一起时,如何让整个程序运行过程中每个部分都能正常工作,就不是写一个按键读取那么简单了。 功能模块可能会相互影响。 例如,你需要使数码管不仅可以显示,还可以处理按键读取。 如何让两部分正常工作是一个协调的过程。 当你具备这种处理和协调能力时,你才刚刚开始。 专注于培养解决问题的能力,而不是专门关注你写了多少程序或做了什么。 “学习微控制器的重点是学习解决问题的思路,而不是局限于

跟随别人的思路处理问题是相当困难的,尤其是大型程序,显得很累。 所以现在我也明白了我学习时提到的程序流程图非常重要,现在我明白了。 当你知道如何解决问题并安排代码来完成它时,它就不再是问题了。

开动脑筋,利用多种方法,不断优化自己的程序。 考虑实现相同功能的所有不同方法。 这是一个实践和提高的过程。 一旦你解决了一个问题,然后再想一想,是否可以用另一种方式来写,实现同样的功能,或者说,你写的代码是否可以更加精简,更加方便。 程序执行效率更高,这个过程是一个进步的过程。 很多知识和经验的获得,不是直接写在书里让你读就能获得的。 需要你自己去实践,开动脑筋,积累经验,提高自己的编程水平。 看看别人的程序,学习别人的想法。 如果您已经通过或完成了某件事,这在学习的早期阶段非常有用。 “学习MCU的重点是学习解决问题的思路,而不是局限于特定的芯片类型和语言。” 这一直是我的座右铭,也是我学习MCU后才体会到的。 真正的能力不在于你写了多少个可以实现的程序,而应该是:“当遇到未解决的问题时,你能利用所学的知识快速找到问题的解决方案”。 这就是能力。 面对新的程序时,多动动自己的脑子,不要急着去找别人的程序。 很多人面对新的程序时,首先想到的就是在网上找一个别人写的程序,然后抄一段,自己写几句话,拼凑起来就完成了任务。 虽然这样可能会节省时间,但是对于你的学习绝对没有好处。 当你收到一个程序时,你首先应该自己构思整个程序的结构,并思考如何完成它。 如果可以的话,画一个流程图。 你可以简单地在脑海中画出来。 初步安排好程序中使用的数据和变量,然后自己编写。 如果遇到实在解决不了的事情,请教。 老师或者同学,或者看看别人是怎么处理的。 这样,至少你自己思考过,有自己的想法。 如果你从一开始就看别人的程序,你的思维就会受到别人思维的限制,你创新就会更加困难。 这样,你永远无法提高自己,因为你将行走在别人的阴影下。 。

五、后续学习计划及建议

虽然单片机课程只有短短一个学期,但我们只学到了一些关于单片机的非常基础的知识。 学习单片机就相当于开发自己的硬件,扩展计算机硬件的功能。 通过学习单片机,还可以对计算机硬件知识有更深入的了解,对高级编程水平有帮助。 了解了单片机之后,你会对现在比较流行的所谓“嵌入式”系统有一个清晰的认识,比如i卡(如电话卡)、射频卡(如公交卡)、磁卡(如银行卡)、GPS(全球定位无非是一个可以连接串口的小电路模块)、gprs/gsn模块(相当于手机的核心部分)、cmos/ccd摄像头、lcd显示屏、can总线、usb接口电路等,看似神秘的技术不再感觉陌生。

从单片机再深入一点,已经达到了老版本vbprofan的水平,可以接入arm(32位高性能嵌入式CPU核,也是单片机),dsp(数字信号处理器,常见用过高端声卡、视频采集卡)、cpld/rpga(可以自己开发专用集成电路的可编程门阵列)等技术,并接触过vhdl语言嵌入式操作系统(如wInce、ucos、uclinux等),结合之前所谓的gprs、gsm、cmos摄像头、lcd、usb等,对于几乎任何一种“高科技”来说都已经不再神秘了现在市场上可以看到的“消费类电子产品”。 到时候,你可以设计出各种电子产品,如数码相机、U盘、MP3/MP4、手机、车载GPS导航仪、PDA、掌上游戏机、电子词典等,我们生活在这些的海洋里我们每天都会接触到各种各样的自动化电子产品,但我们却常常忽视它们的存在,更很少有人仔细思考它们的实现方法、原理和制造工艺。 在当今信息多元化的高科技时代,在这个计算机、机器、电子日益融合的时代,即使我们学习了计算机和编程,也不能说我们已经完全掌握了“高科技”。 科学和技术”,

彻底实现科技“素养”。 所以,在学习计算机的同时,应该学一点单片机,总要掌握一点电子技术。 剩下的就是经验和积累了。 浓度的高低是有益无害的。 使用汇编语言学习单片机对于硬件来说非常重要。 理解是非常重要和必要的。 在很多院校的单片机课程学习中,都要求先学习汇编语言,然后才能使用高级语言进行编程。 那么,汇编语言和我们之前学过的C语言有什么区别呢? ?C语言是一种高级语言。 为什么叫高级语言呢? 事实上,C语言是汇编语言的演变,也是机器语言的演变。 这只是一种表达方式。

例如:

c语言

如果(ab)

这样的表达式在汇编中会变成多行代码。

编译:cmpa,b

耶利内尔贾/新山/

所以这直接导致理解和可读性。 直接看汇编代码需要大脑多次转换,但直接看c就清楚了。 这就是汇编是低级语言而c是高级语言的原因和区别。 装配过于注重细节,但这样的细节是一项非常费力的活动。 例如,汇编中经常使用jmp指令,但在c中,此类指令是根据语句直接编译的,不需要动脑子去思考跳转到哪里。 你不需要关心这个。 你只需要关心你的结构是否正确。 像这样的事情在装配中是不同的。 汇编并不关心你的结构和其他一切。 Assembly 不关心任何事情,所以你需要关心一切。 总之,一句话编撰,小巧精致,方便简洁。 为了学好这门课程,我定制了以下计划:

目标:八个月内基本熟练掌握单片机,力争一年内独立完成一两个项目

单片机

2017年南京工业大学机械与动力工程学院校园招聘简章

2024-4-6 10:03:16

单片机

建库网建筑图纸下载方法,建筑工程施工图怎么下载

2024-4-6 11:04:28

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索