武汉理工大学《单片机应用实践》课程设计说明书
系统初始化 制键命盘令扫描获得控差形的频率和相位计算当前两个波差形的频率和相位显示当前两个波
3.2.2 频率改变电路设计
频率的改变是通过键盘命令控制的。对于给定步长的频率增加值,由于采用自动重装模式计数,最大计数到255就会回零,所以设定频率最大为256,但要根据实际测得值来判断频率值。频率值不能一直加,所以频率值应该离最大值有一个步长才能够加,设定一直加到255停止增加。同样,对于给定步长的频率减少值,频率值不能一直减少,所以频率值应该大于一个给定步长才能够减少,设定一直减到1停止减少。
开始 当前频率是否小于256减去频率步长值 Y 当前频率加上频率步长值 获得当前频率下的计数器T1计数控制值
返回 图3.1 主程序框架说明
N 频率设定值最大255 图3.2 频率增加程序流程图
8
武汉理工大学《单片机应用实践》课程设计说明书
开始 当前频率是否大于给定频率步长值 Y 当前频率减去频率步长值 获得当前频率下的计数器T1计数控制值 N 频率设定值最小1
返回 图3.3 频率减少程序流程图
3.2.3 相位改变电路设计
两路方波产生相位差主要是通过更改P0.1端口定时中断中加入输出方波前的独立延时时间。通过延时电路的设计,以及机器周期的计算可知,延时的时长约为 2.5ms,即产生18度的相位差。所以每按下调相按钮时,都会产生相位差,并以18度步进值变化。
相位的改变值要很准确,首先计算1度占180度的比例1/180= 0.0056,所以定时器T0选用的是55us,以减小误差,定时器T1选用200us,所以计算各个溢出次数是要除以相应的定时时间0.000055和0.0002,相位对应延迟时间是通过变量Control_Phase来控制的,所以要根据Control_Phase值来确定延迟时间,在确定延时时间下的一个机器周期指令执行的次数,这是本次设计的重点;频率的改变是通过定时器T1控制,频率的改变需要计算当前频率下的半个周期的时间,以控制方波变反输出。两种情况下都要进行取整运算,减小误差。
9
武汉理工大学《单片机应用实践》课程设计说明书
计算当前频率下的相位改变溢出次数流程图开始频率转化为浮点数计算当前频率下的溢出次数流程图开始频率转化为浮点数相位延时时间计算延时时间下的一个机器周期指令执行的次数计算当前频率下的半个周期的时间计算中断溢出数取整,四舍五入 返回取整,四舍五入返回
图3.3 相位改变流程图
3.2.4 时钟电路与复位电路设计
单片机的时钟信号用来提供单片机内各种微操作时间基准;复位操作完成单片机片内电路的初始化,单片机从一种确定的状态开始运行。
本次设计电路中采用内部振荡电路,晶振频率为12MHz。复位操作完成单片机片内电路的初始化,单电机从一种确定的状态开始运行。设计电路图中采用手动复位电路。
图3.4 内部时钟模块电路
10
武汉理工大学《单片机应用实践》课程设计说明书
图3.5 手动复位模块电路
3.3 程序总框图
设定计数器初值和相应的定时脉冲个数
设定定时器T0和T1的工作方式为方式一,并打开定时中断 依设定的计数初值开始 计数溢出? Yy N
输出电平取反并重新给计数器赋初值 Y
按键A频率增加 按键B频率减小 按键C相位增加18° 按键D复位 扫描键盘是否按下 N 图3.6 设计程序框图
11
武汉理工大学《单片机应用实践》课程设计说明书
4 程序编程及仿真
4.1程序代码
ORG 0000H AJMP START ORG 000BH AJMP BRK0 ORG 001BH AJMP BRK1
ORG 0030H
START: MOV R0,#3CH
MOV R1,#0B0H
MOV R2,#0C3H
MOV R3,#50H
MAIN: SETB P0.0
SETB P0.1 MOV TMOD,#11H MOV TH0,R0 MOV TL0,R1
MOV TH1,R0
MOV TL1,R1
SETB TR1 SETB EA
SETB TR0
SETB ET0 WAIT: JNB P3.4,TF2 JNB P3.5,TF3
JNB P3.6,TP
;设定定时器的初值
;相应的脉冲个数 ;设定T0、T1均工作于方式1 ;设定T0初值 ;设定T1初值 ;启动T1工作 ;启动T0工作 ;允许T0中断
;等待调频按键的操作
;等待调频按键的操作 ;等待调相按键的操作
12