1、一、实验目的1、熟练稳固单片机开发环境KEIL界面的相关操作和PROTUES仿真软件的操 作,会使用HEX文件进展单片机的仿真。2、了解定时器的原理和四种工作方式的使用方法,学习定时器的相关应用,包括产生信号和 计数,利用定时器进展延时等。3、进一步掌握熟练单个数码管以及多位数码管的显示原理,学会将01000的数字进展显示。4、掌握利用单片机产生矩形方脉冲的相关原理。二、实验原理1、定时器构造和原理 图 上图 为定时器T0、T1的构造,其中振荡器经12分频后作为定时器的时钟脉冲,T为外部计数脉冲输入端,通过开关K1选择。反相器,或门,与门共同构成启/停控制信号。TH和TL为加1计数器,TF为中
2、断标志。每接收到一个脉冲,加1计数器自动加1,当计数器中的数被加为0时产生溢出标志,TF将被置1。计数器工作方式的选择和功能的实现需要配置相应的存放器TMOD和TCON。2、定时器工作方式定时器共有四种工作方式分别为方式0方式3。方式0:13位计数器,最大计数值为213个脉冲。方式1:16位计数器,最大计数值为216个脉冲。方式2:8位自动重装计数器。该方式下,TL进展计数工作,TH用于存放计数初值,当产生 溢出中断请求时会自动将TH中的初值重新装入TL,以使计数器继续工作。方式3:仅限于T0计数器,在方式3下,T0计数器被分成两个独立的8为计数器TL0和TH0。3、定时器间隔1ms产生一个脉
3、冲利用单片机1 P3.0口进展脉冲的输出,通过定时器进展端口定时控制,实现每1ms上下电平变换。就可以实现一个占空比为50%的矩形脉冲输出。对于定时器的定时功能实现,需要进展定时器模式选择,定时器初值设定。4、利用中断进展脉冲的计数将单片机1 P3.0口输出的脉冲连接到单片机2的中断INT0口P3.2,通过脉冲的上下电平变换触发中断0,进展脉冲个数的计数。三、实验步骤一实验详细步骤1、启动KEIL建立一个空白工程,然后命名文件。2、新建源程序文件,输入程序代码并保存,然后进展综合编译。假设在编译过程中发现错误, 那么找出并更正错误,直至编译成功为止。3、通过设置生成HEX文件,保存。4、启动P
4、rotues建立一个空白工程,然后命名文件5、进展电路的原理图连接并输入HEX文件进展仿真。二实验仿真原理图图 图如图 为单片机1的脉冲产生系统,通过定时的定时控制,让P3.0口输出脉宽为1ms的方脉冲,对于定时器程序的初始化。TMOD = (TMOD&0XF0)|0X00; / 定时器模式0的选择s = 8192-11059.2/12;TH0 = s/32;TL0 = s%32; / 定时器的初值的设定如图 为单片机2的电路连接原理,单片机通过承受单片机1的方脉冲信号触发中断进展计数,没来一个脉冲记一次数,再通过数码管显示出来。四、实验结果及分析图通过按下按键开场进展脉冲的产生和计数,如图左
5、边为单片机1产生脉冲并通过数码管显示脉冲产生数,右边为单片机2承受脉冲同时也通过数码管显示脉冲承受数字。当按下按键时开场产生并传送脉冲,通过一个VSM counter timer进展计数验证的准确与否。按下按键后发现两个多位数码管同时显示并跳转同样的数字,并且计数器也显示同样的数字。如图所示。 图最后通过示波器验证观察所产生的脉冲是否正确,通过调节示波器上的时间和幅度旋钮可以观察到矩形方波的产生。如图所示图问题一:运行电路时,数码管乱码解决的方法:检查电路,发现程序中扫描信号端口错误,将扫描信号的端口顺序调换,重新运行。问题二:定时器的时间设置问题检查程序,发现是是定时器的初始化设置问题,在改
6、动后,重新编译后在次运行电路,电路正常显示,符合要求。通过本次实验,通过实验我切身实际的进展代码的编写以及电路的仿真连接从中发现问题,解决问题,再而收获知识,获取经历。五、体会通过本次的实验,在前三个实验的根底上让我复习了知识点,也让我在次掌握了新的知识。在完成这次实验后,让我更加熟悉数码管的显示功能代码的实现。并且还学会了定时器中断的运用,学会了用更加准确的方式去进展定时延时操作。我觉得这次的课程实验让我知道,一次次的失败,并不会让我放弃去追求,相反它会引领着我去发现问题,从而解决问题,完成更深入的探索。也让我明白理论知识的重要性,并且与实际相结合,多动手,在实践中成长。所以我会很重视每一次
7、的实验。我坚信:每次实验都会给我自身很大帮助。慢慢的积累点滴的知识,到最后就会多的。六、附录1、单片机1脉冲产生代码#includeunsigned char code ET10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned int AT,s;unsigned int a,b,c,d;void delay(int counter) int i,j; for(i = 0;i 10;i+) for(j =0;j 10) count = 0; P30=P30; /上下电平取反 if(P30 = 0) AT+; if(AT 999
8、9) AT = 0; void main () TMOD = (TMOD& /模式0选择 /初值设定 TR0 = 0; ET0 = 1; IT0 = 1; EX0 = 1; EA = 1; /定时器的初始化 while (1) if(AT a=AT; P2 = 0xff; /消除鬼影 P1 = 0xf7; P2 = ETa; else if(AT100) a=AT%10; P2 = 0xff; P1 = 0xf7; P2 = ETa; delay(2); b=AT/10; P1 = 0xfb; P2 = ETb; 1000) a=AT%100%10; b=AT%100/10; c=AT/100; P1 = 0xfd; P2 = ETc;10000) a=AT%1000%100%10; b=AT%1000%100/10; c=AT%1000/100; d=AT/1000; P1 = 0xfe; P2 = ETd; / 数码管进展数字显示局部 2、单片机2承受脉冲代码unsigned int AT;void anjian(void) interrupt 0 /中断函数,触发一次计数一次 AT+; /中断0初始化
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1