单片机课程设计总结报告.docx
- 文档编号:7559926
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:27
- 大小:509.94KB
单片机课程设计总结报告.docx
《单片机课程设计总结报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计总结报告.docx(27页珍藏版)》请在冰豆网上搜索。
单片机课程设计总结报告
单片机课程设计
频率计
总结报告
姓名:
陈艺端
学号:
08292003
班级:
电气0809
所在组:
陈艺端
白英杰
【实验准备】
在实验前,我通过上网、上图书馆查找了一些关于频率计的资料,结合单片机所学的中断和定时器的知识,并对电路板各个元器件、接线等的清楚认识,完成了对电路板仿真图的绘制,以及初步的程序,并实现了初步的仿真效果。
【设计内容】
设计一个频率计。
【设计要求】
分频段(高频、低频),在10k~20kHz范围做切换。
CPU为AT89S51,利用内部T0、T1的定时计数器或外部INT0中断功能来完成对输入的信号进行频率计数或脉宽计时,计数(计时)的频率结果通过6位七段LED数码管显示出来。
数字式频率计原理框图:
【设计方案】
一、实验原理:
1、测频方式
利用单片机计数器T0和定时器T1中断。
定时器T1中断产生闸门时间,在闸门时间Ts内,用计数器记录输入脉冲的个数N,从而计算出被测频率Fx=N/Ts。
2、测周方式
利用单片机外部中断INT0和定时器T1中断。
定时器T1中断产生时标信号Ts,用外部中断INT0控制定时器T1的计数,计算出在被测信号的一个周期内定时器T1计得的数N,从而计算出被测频率Fx=NTs。
二、电路结构:
①NE555构成多谐振荡器,产生频率可调的方波信号;
②74HC74里的一个D触发器连成计数器,用来对555产生的方波分频;
③74HC14非门做驱动,防止产生的信号不能驱动单片机的I/O口;
④方波信号连接在单片机的INT0和T0口上。
⑤单片机的P1口做字位,连接74HC245驱动数码管的共阴端;
⑥P0口做字形,连接74HC573锁存器和74HC245驱动数码管的a~dp端。
三、测频测周转换的讨论以及试验参数:
1、测频方式和测周方式的转换频率
依要求来说在10kHz~20kHz之间做切换。
2、转换频率过程中产生的问题
当被测信号频率与转换频率非常接近,并且抖动时,容易产生两种方式一直跳变的现象,进入死循环,可以利用迟滞比较器的原理进行解决。
通常将测频方式和测周方式的转换频率设为程序判断测频还是测周的比较点,但为避免在转换频率附近产生死循环,设置两个比较点,分别为f1和f2,从高频测频方式向低频测周方式变化时,比较点为f1,从低频测周方式向高频测频方式变化时,比较点为f2,使f1 3、参数设定 根据以上讨论,测频方式的闸门周期要大于1/f1,并且越大测量结果越精确,但还要考虑到闸门周期太大会导致测量得到的脉冲数N过大,影响程序大小。 同理,测周方式的时标周期要小于1/f2,并且越小越精确,同样要考虑到程序大小以及程序执行时间。 四、程序流程图 ⑴测频法: ①主程序: ②T0中断子程序: ②T1中断子程序: ⑵测周法: ①主程序: ②T1定时子程序: 五、仿真图 可见,改变电阻值或电容值,即改变NE555输入方波的频率,仿真实现的数码管显示值与用频率计测量的理论值相差不大,基本满足设计要求,但还是存在一定的误差,可以加以改进,增加精确度。 说明: 由于软件版本问题,没有可调节的滑动变阻器,于是,我用多选开关来代替,通过开关选择不同的电阻来模拟滑动变阻器滑片的移动。 七、总结 在去实验室前,我经过多番努力,将电路板上的电路用仿真软件画出,并且确保了每一条连线都包含了,芯片的每一个管脚都清楚的认识到是用来干什么的,怎么连接的,仿真时各个点将会出现什么情况。 尔后,我又进行了初步的编程,将程序模块化,分为了主程序、中断子程序(测频和测周)、显示子程序、十六进制转化为十进制的子程序、延时子程序等,但在十六进制转化为十进制的子程序的编程过程中,我不是很了解怎么实现这个过程,导致未能完成该子程序的编写。 验收当天,我和我的组员在互相讨论了自己的编程思路后,综合了对方的意见,得到了初步的程序,但是在仿真过程中,还是存在诸多问题,我们合力讨论了很久,但还是有点问题,于是我们和另外一组一起商讨,在测频和测周的转换过程方面讨论了很久,还尝试了用双闸门的方法,来代替测频和测周的转换,但是结果还是不理想,尝试了烧程序看看电路板能否实现,但经过了一天的努力,我们还是未能实现所要的结果。 临走前,我们询问老师,老师的意思是我们做得复杂了,想太多了,重心已经偏移了,于是,我们经过一个晚上的修改,初步定型了程序,第二天又到实验室去调试。 调试的时候发现显示出来的总是乱码,后用万用表测数码管,才发现电路板上的数码管接反了,于是我们将数码管重新插了一遍。 编程时的值都是理论计算得到的值,调试时发现测得的频率和实际频率总有点差别,原因是忽略了程序中其他语句执行所需要的时间,而且一开始由于为将某些语句在等待中断的时间完成,导致仿真结果是一段时间显示一次,时延较长,细微修改定时器定时,并修改程序结果后,减小了测得值和实际值的差别,显示结果也较稳定。 在烧程序的过程中出现了很多的问题,比如,接线的问题,芯片的问题等,我们第一天没能将课设验收完成,但我们不断地检查电路板和我们的程序,以及仿真图,不断地寻找问题所在,最终成功地将设计在电路板上实现出来。 六、实验程序 ①测频法: ORG0000H AJMPSTART ORG000BH;T0中断入口 AJMPT0INT ORG001BH;T1中断入口 AJMPT1INT ORG0030H START: MOVSP,#70H MOVIE,#8AH;10001010B,开放T0、T1中断 MOVTMOD,#15H;00010101,T1定时,T0计数,允许T0溢出中断 MOVTH1,#0ECH MOVTL1,#78H;定时10ms MOV20H,#100;100*10ms=1s MOVTH0,#00H MOVTL0,#00H MOV21H,#0 MOV22H,#0 MOV23H,#0;存放采集到的频率 SETBTR1;开始计数 SETBTR0 WAIT: AJMPWAIT;等待中断 T0INT: INC23H;T0计数器溢出则23H单元自增1 RETI T1INT: ;定时10ms产生中断 MOVR2,#06;显示初始化 MOVR4,#0FEH MOVR1,#60H;显示缓冲区起始地址 SETBP3.0 LOOP: MOVA,R4 MOVP1,A;字位 MOVA,@R1 MOVP0,A;字形 LCALLDELAY INCR1 MOVA,R4 RLA;字位左移 MOVR4,A DJNZR2,LOOP;判断6个数码管是否显示完 DJNZ20H,NEXT1;判断1s定时 CLRTR1;停止计数 CLRTR0 MOV20H,#100 MOV22H,TH0;1s时间到则采集数据 MOV21H,TL0 LCALLDISPLAY MOVTH0,#00H;计数初值置0 MOVTL0,#00H NEXT1: MOVTH1,#0ECH;继续定时 MOVTL1,#78H SETBTR1 SETBTR0 EXIT: RETI DISPLAY: MOVR0,#60H MOVR1,#06H;对60H-65H单元清零 NEXT2: MOV@R0,#0 INCR0 DJNZR1,NEXT2 ZHUANHUAN: ;进制转换 MOVA,23H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B MOV30H,22H ANL30H,#0F0H ADDA,30H SWAPA MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ANL22H,#0FH ADDA,22H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOVA,B MOV30H,21H ANL30H,#0F0H ADDA,30H SWAPA MOVB,#0AH DIVAB MOV27H,A;存储第四位商 MOVA,B SWAPA ANL21H,#0FH ADDA,21H MOVB,#0AH DIVAB MOV28H,A;存储第五位商 MOV50H,B;存储十进制数个位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ADDA,27H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOVA,B SWAPA ADDA,28H MOVB,#0AH DIVAB MOV27H,A;存储第四位商 MOV51H,B;存储十进制数十位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ADDA,27H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOV52H,B;存储十进制数百位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOV53H,B;存储十进制数千位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV54H,B;存储十进制数万位 MOV55H,A;存储十进制数十万位 MOVR2,#06 MOVR0,#50H MOVR1,#5FH MOVDPTR,#TAB NEXT3: MOVA,@R0 MOVCA,@A+DPTR;查表,字形 INCR0 INCR1 MOV@R1,A DJNZR2,NEXT3 RET TAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB77H,7CH,39H,5EH,79H,71H DELAY: MOV40H,#250 LP0: NOP DJNZ40H,LP0 RET END ②测周法: ORG0000H LJMPMAIN ORG0100H MAIN: MOVDPTR,#0000H SETBC MOVP3.4,C MOV23H,#00H F1: MOVC,P3.4 JCF1 F2: MOVC,P3.4 JNCF2 F3: MOV22H,DPH MOV21H,DPL MOVA,#0FFH CJNEA,22H,JIA CJNEA,21H,JIA INC23H JIA: INCDPTR MOVC,P3.4 JCF3 F4: MOV22H,DPH MOV21H,DPL MOVA,#0FFH CJNEA,22H,JIA1 CJNEA,21H,JIA1 INC23H JIA1: INCDPTR MOVC,P3.4 JNCF4 MOV22H,DPH MOV21H,DPL ACALLDISPLAY MOV21H,#0 MOV22H,#0 MOV23H,#0 LJMPMAIN DISPLAY: MOVR0,#60H MOVR1,#06H;对60H-65H单元清零 NEXT2: MOV@R0,#0 INCR0 DJNZR1,NEXT2 ZHUANHUAN: ;进制转换 MOVA,23H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B MOV30H,22H ANL30H,#0F0H ADDA,30H SWAPA MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ANL22H,#0FH ADDA,22H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOVA,B MOV30H,21H ANL30H,#0F0H ADDA,30H SWAPA MOVB,#0AH DIVAB MOV27H,A;存储第四位商 MOVA,B SWAPA ANL21H,#0FH ADDA,21H MOVB,#0AH DIVAB MOV28H,A;存储第五位商 MOV50H,B;存储十进制数个位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ADDA,27H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOVA,B SWAPA ADDA,28H MOVB,#0AH DIVAB MOV27H,A;存储第四位商 MOV51H,B;存储十进制数十位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOVA,B SWAPA ADDA,27H MOVB,#0AH DIVAB MOV26H,A;存储第三位商 MOV52H,B;存储十进制数百位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV24H,A;存储第一位商 MOVA,B SWAPA ADDA,26H MOVB,#0AH DIVAB MOV25H,A;存储第二位商 MOV53H,B;存储十进制数千位 MOVA,24H SWAPA ADDA,25H MOVB,#0AH DIVAB MOV54H,B;存储十进制数万位 MOV55H,A;存储十进制数十万位 MOVR2,#06 MOVR0,#50H MOVR1,#5FH MOVDPTR,#TAB NEXT3: MOVA,@R0 MOVCA,@A+DPTR INCR0 INCR1 MOV@R1,A DJNZR2,NEXT3 MOVR2,#06 MOVR4,#0FEH MOVR1,#60H SETBP3.0 LOOP: MOVA,R4 MOVP1,A MOVA,@R1 MOVP0,A LCALLDELAY INCR1 MOVA,R4 RLA MOVR4,A DJNZR2,LOOP RET TAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH DB77H,7CH,39H,5EH,79H,71H DELAY: MOV40H,#250 LP0: NOP DJNZ40H,LP0 RET END 十六进制转化为十进制的方法: 第一步将最高位的高半字节提出来,除以10,把商存储起来,余数与最高位的低半字节组合成一个字节,再除以10,再存储商,余数以此类推,直到最后一次计算得到的余数即为十进制数的个位;第二步把第一步存储的商组合成一个字节,依次除以10,仍然把每次得到的商存储起来,以此类推最后一次得到的余数即为十进制数的十位;以后也是以此类推得到十进制数的百位、千位……以上算法必须要注意的一个问题是,每次得到的余数与低位的半字节组合成一个字节时,余数必须放在该字节的高半字节,否则计算错误。 该本次频率计系待测的时钟信号的最高频率为460800Hz,对应的十六进制数为70800H,这里就以70800H转换为十进制数为例来说明这种算法。 第一步: 用7H除以10,商0H余7H,把商0存储在24H单元,余数7H与下一个字节08H的高半字节0H组合成一个字节70H。 70H除以10,商BH余2H,把商BH存储在25H单元,余数2H与8H组合成一个字节28H。 28H除以10,商4H余0H,把商4H存储在26H单元,余数0H与0H组合成一个字节00H。 00H除以10,商0H余0H,把商0H存储在27H单元,余数0H与0H组合成一个字节00H。 00H除以10,商0H余0H,把商0H存储在28H单元,余数0即为所需十进制数的个位。 第二步: 把存储在24H与25H单元的商组合成一个字节0BH。 0BH除以10,同第一步,存储商,余数与下一个商组合成一个字节,再除以10,一次类推得到十进制数的十位0。 第三步: 方法同第二步,得到十进制数的百位8。 第四步: 方法同第三步,得到十进制数的千位0。 第五步: 方法同第四步,得到十进制数的万位6和十万位4。 最后得到了十进制数460800。 图5.3详细的展示了这种进制转换算法的过程。 ③双闸门法: ORG0000H AJMPSTART ORG000BH;T0中断入口 AJMPT0INT ORG001BH;T1中断入口 AJMPT1INT ORG0030H START: MOVSP,#70H MOVIE,#8AH;10001010B,开放T0、T1中断 MOVTMOD,#15H;00010101B,T1定时,T0计数 MOVTH1,#3CH MOVTL1,#0B0H;定时100ms MOV20H,#100;100*100ms=10s MOV24H,#10 MOVTH0,#00H MOVTL0,#00H MOV21H,#0 MOV22H,#0 MOV23H,#0;存放采集到的频率 SETBTR1;开始计数 SETBTR0 WAIT: AJMPWAIT;等待中断 MOVR2,#06 MOVR0,#50H MOVR1,#5FH MOVDPTR,#TAB NEXT30: MOVA,@R0;50H—55H查表,字形存在60H—65H MOVCA,@A+DPTR INCR0 INCR1 MOV@R1,A DJNZR2,NEXT30;6次 MOVR6,#100;循环显示100次 MOV66H,#3FH;最高位显示0 KOP0: MOVR2,#06 MOVR4,#0FEH;字位初值 MOVR1,#61H;乘以10 SETBP3.0 LOOP0: MOVA,R4;字位 MOVP1,A MOVA,@R1;字形 MOVP0,A LCALLDELAY INCR1 MOVA,R4 RLA MOVR4,A DJNZR2,LOOP0 DJNZR6,KOP0 T0INT: INC23H;计数器溢出则23H单元自增1 RETI T1INT: DJNZ20H,NEXT1;定时100ms产生中断 CLRTR1;停止计数 CLRTR0 MOV20H,#100 MOV22H,TH0;10s时间到则采集数据 MOV21H,TL0 CLRC MOVA,22H SUBBA,#30H JNCCEPING CLRC MOVA,23H SUBBA,#01H JNCCEPING MOVTH0,#00H MOVTL0,#00H CEZHOU: LCALLDISPLAY0 LJMPKK CEPING: LCALLDISPLAY1 KK: MOV21H,#0 MOV22H,#0 MOV23H,#0 NEXT1: MOVTH1,#3CH;继续定时 MOVTL1,#0B0H SETBTR1 SETBTR0 EXIT: RETI DISPLAY0: MOVR0,#60H MOVR1,#07H;对60H-66H单元清零 NEXT20: MOV@R0,#0 INCR0 DJNZR1,NEXT20 ZHUANHUAN0: ;进制转换 ;//////////////////////////////////////////////////////////////////////////////////////////// DISPLAY1: MOVR0,#60H MOVR1,#06H;对60H-65H单元清零 NEXT2: MOV@R0,#0 INCR0 DJNZ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 总结报告