网站导航: 首页 > 设计参考 > 正文 文章搜索
基于PIC16F877A的方波信号发生器电路设计[图]
 
文章编号:
081208200434
文章分类: 单片机 PIC
点 击:
...
关 键 词: 信号发生器,PIC16F877A
文章来源:
网络,作者:林若波
摘 要:
本文采用单片机进行电路设计,利用软件编程控制代替硬件的更换,可灵活简单地产生不同频率的方波信号,而且电路更为简单、频率更准确、性能更稳定...

   在数字电路系统中,方波是经常使用的信号源,具有非常广泛的应用范围。在普通的电路设计中,经常利用555定时器构成多谐振荡器产生方波信号,虽然比较简单,但频率准确精度不高,若要产生不同频率的方波信号,更换电阻和电容又比较麻烦。基于这个出发点,本文采用单片机进行电路设计,利用软件编程控制代替硬件的更换,可灵活简单地产生不同频率的方波信号,而且电路更为简单、频率更准确、性能更稳定。

1 软件平台及芯片介绍
    目前的单片机有很多种型号,有Intel公司的8051系列、Motorola公司的M68系列、ATMEL公司的AT系列、Microchip公司的PIC系列等等。本文主要介绍Microchip公司开发的基于MPLAB-IDE 6.62集成开发环境的PIC单片机的电路设计。MPLAB-IDE集成开发软件是专门设计对PIC系列单片机进行文本编辑,在线调方式及编译的开发工具。PIC芯片采用PIC16F877A,40脚封装、具有5个输入/输出端口,每个端口中的每条引脚由用户按需要单独编程,设定为输出引脚或输入引脚。

2 方波信号发生器电路设计
2.1 硬件电路分析
    利用PIC16F877A中的定时器/计数器TMR0模块作为硬件定时器控制端口引脚RC0上产生不同频率的方波。由于TMR0为8位宽,有一个可选的预分频器,故可产生8种方波信号;同时通过设置不同的初始值,可产生不同的频率。本设计初始值设为131,计数125个指令周期产生溢出,即TMR0从计数到开始溢出需要125us。通过改变分频比,来达到产生不同频率的目的。TMR0溢出一次就使端口引脚RC0的输出电平反转一次,每反转两次引脚电平就形成方波信号的一个周期。当分频比为1:256时,TMRO的延时为125 us×256=32000 us,方波信号周期为32000 us×2=64000 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作为单片机系统时钟的输入,其优点是经济、节省成本。
 
图1 硬件电路工作原理示意图
2.2 软件设计
    在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种方波信号。其源程序采用汇编编语言编写,如下:

程序清单fbxh.asm

 
  1. LIST    P=16F877A   
  2. INCLUDE "P16F877A.INC"   
  3. TMR0    EQU 01H  
  4. ;定时器/计数器0寄存器地址  
  5. STATUS     EQU 3H  
  6. OPTION_REG EQU 81H  
  7. OPTION_B   EQU 22H  
  8. INTCON     EQU 0BH  
  9. PORTB      EQU 6H   ;端口B的地址  
  10. TRISB      EQU 86H  
  11. PORTC      EQU 7H   ;端口C的地址  
  12. TRISC      EQU 87H  
  13. TMR0B      EQU D'256'-D'125'   
  14.  ;定义TMR0初值  
  15. RP0 EQU 5H  
  16. ;*********主程序************  
  17. ORG 000H  
  18. MAIN NOP  
  19. BSF STATUS,RP0   
  20. MOVLW 0FEH  
  21. MOVWF TRISC   
  22. CLRF PORTC   
  23. MOVLW 0FFH  
  24. MOVWF TRISB   
  25. MOVLW 07H ;分频比设定为1:256  
  26. MOVWF OPTION_REG   
  27. BCF STATUS,RP0   
  28. KEYIN BTFSC PORTB,0 ;测试SW1是否按下?  
  29. GOTO LOOP   
  30. CALL DELAY   
  31. BTFSC PORTB,0   
  32. GOTO LOOP   
  33. CHECK BTFSS PORTB,0 ;测试SW1是否断开?  
  34. GOTO  CHECK   
  35. CALL DELAY   
  36. ;调开延时子程序。消除断开抖动的影响  
  37. BTFSS PORTB,O   
  38. GOTO CHECK   
  39. BSF STATUS,RP0   
  40. DECF OPTION_REG,1   
  41. MOVF 07H  
  42. ANDWF OPTION_REG   
  43. MOVF OPTION_REG,1   
  44. BCF STATUS,2   
  45. GOTO MAIN   
  46. LOOP MOV LW01H  
  47. XORWF PORTC   
  48. BCF INTCON,2   
  49. MOVLW TMR0B  
  50. MOVWF TMR0   
  51. ;重新启动定时器开始计数  
  52. TEST BTFSS INTCON,2   
  53. ;检测TMR0溢出标志位  
  54. GOTO TEST   
  55. GOTO KEYIN   
  56. ;*******TMR0延时子程序8 ms*******  
  57. DELAY   
  58. BSF STATUS,RP0   
  59. MOVF OPTION_REG,0   
  60. MOVWF OPTION_B   
  61. MOVLW 04H  
  62. MOVWF OPTION_REG   
  63. BCF STATUS,RP0   
  64. BCF INTC0N,2   
  65. MOVLW 06H  
  66. MOVWF TMR0   
  67. LOOP1 BTFSS INTCON,2   
  68. GOTO LOOP1   
  69. BSF STATUS,RP0   
  70. MOVF OPTION_B,0   
  71. MOVWF OPTION_REG   
  72. BCF STATUS,RP0   
  73. RETURN   
  74. ; ***********************  
  75. END ;源程序结束 

2.3 基于MPLAB-IDE6.62软件平台的编译与编程
(1)启动MPLAB-IDE6.62,创建工程项目FBXH,并创建源文件fbxh.asm,编译生成目标程序HEX文件。
(2)选择器件为PIC16F877A,选择通信接口(USB口),建立通信连接,设置MPLAB ICD2作为调试工具。设置调试选项,载入调试代码,调试代码会自动编程到程序存储器的顶层空间,用于MPLAB ICD2的调试,进行模拟仿真。
(3)仿真正确之后,选择器件配置电源和接口,并设置编程选项,进行编程下载程序,完成芯片程序的写入。

2.4 电路板的设计、安装与调试
     利用PROTEL99SE制作电路PCB板进行安装焊接,SW1,SW2选用按纽开关,SW1为循环切换控制开关,SW2为复位开关,POWER接5V电源,U1在安装时要采用IC座,便于更新或更换IC,LS1可连接到压电蜂鸣器,D0为发光二极管,有输出时D0点亮,OUT为输出端,用可示波器进行观察。调试完成之后,方波信号发生器的设计就全部完成了。

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4