在数字电路系统中,方波是经常使用的源,具有非常广泛的应用范围。在普通的电路设计中,经常利用555构成多谐振荡器产生方波,虽然比较简单,但频率准确精度不高,若要产生不同频率的方波,更换电阻和电容又比较麻烦。基于这个出发点,本文采用单片机进行电路设计,利用软件编程控制代替硬件的更换,可灵活简单地产生不同频率的方波,而且电路更为简单、频率更准确、性能更稳定。
目前的单片机有很多种型号,有Intel的8051系列、Motorola的M68系列、ATMEL的AT系列、Microchip的PIC系列等等。本文主要介绍Microchip开发的基于MPLAB-IDE 6.62集成开发环境的PIC单片机的电路设计。MPLAB-IDE集成开发软件是专门设计对PIC系列单片机进行文本编辑,在线调方式及编译的开发工具。PIC芯片采用PIC16F877A,40脚封装、具有5个输入/输出端口,每个端口中的每条引脚由用户按需要单独编程,设定为输出引脚或输入引脚。
利用PIC16F877A中的定时器/计数器TMR0模块作为硬件定时器控制端口引脚RC0上产生不同频率的方波。由于TMR0为8位宽,有一个可选的预分频器,故可产生8种方波;同时通过设置不同的初始值,可产生不同的频率。本设计初始值设为131,计数125个指令周期产生溢出,即TMR0从计数到开始溢出需要125us。通过改变分频比,来达到产生不同频率的目的。TMR0溢出一次就使端口引脚RC0的输出电平反转一次,每反转两次引脚电平就形成方波的一个周期。当分频比为1:256时,TMRO的延时为125 us×256=32000 us,方波周期为32000 us×2=60 us=64 ms,对应的方波频率为档的15.625 Hz;当分频比为1:2时,TMR0的延时为125 us×2=250 us,方波周期为250 us×2=500 us=0.5 ms,对应的方波频率为档的2000 Hz。改变TMR0的初始值,可分别产生15.625 Hz,32.25 Hz,62.5 Hz,125 Hz,250 Hz,500 Hz,1000 Hz,2000 Hz 8种方波。其工作原理如图1所示,接在端口引脚RB0上的按钮开关SW1作为循环切换控制开关;按在MCLR引脚上的按钮开关SW2用作单片机复位开关;端口RC0作为方波输出,并接上一个发光二极管和蜂呜器作为输出指示;R3和C1构成RC振荡方式,接在OSC1作为单片机系统时钟的输入,其优点是经济、节省成本。
在PIC16F877A单片机中,与定时器/计数器TMR0相关的特殊功能寄存器有4个,累加计数寄存器TMR0、中断控制寄存器INTCON、选项寄存器OPTION_REG和端口RA方向控制寄存器TRISA,其中选项寄存器OPTION_REG的各位含义为:
当其第5位(TOCS)置1时,TMR0模块被设置为计数器模式,其分频比由OPTION_REG的D2:DO(PS2~PS0)决定,分别为1:2,1:4,1:8,1:16,1:32,1:64,1:128,1:256,由此可产生8种分频,即8种方波。其源程序采用汇编编语言编写,如下:

