用单片机开发信号发生器

来源:互联网 发布:淘宝网书店购书 编辑:程序博客网 时间:2024/06/09 22:45

      首先说说实验要求:用单片机来做(所以要有实验箱),利用D/A转换,产生锯齿波,方波,三角波,正弦波(所以还要准备一个示波器咯),并且通过实验箱上的键盘可以进行四种波形的转换。

   怎么样,要求不是很高吧,我们开始吧。首先我们的下载用于编程的仿真软件,仿真软件有很多,比如常用的伟福,比较好用,这里我选择KeilC51来进行编程和仿真 ~~。

1.打开keilc51.exe 。Project ---->New Project.在跳出的dialogue输入文件名如:my frist Project 单击保存.

2.在跳出CPU选择我们选择:Atmel------->AT89c51. 单击"确定".

3.然后File------>new 来创建一个TEXT ,点击保存按钮.

4.展开Target 1----------->右击source Group 1 --------->Add Files to Group 'Source Group 1'

5.弹出的对话框,输入文件名:输入刚才保存的文件名加后缀. 或者在文件类型选择:Asm Source file类型.加如刚才的文件. 单击"ADD",并"CLOSE"完成操作.还容易吧,我打字有点累......

接下来我们就要在刚才新建的text.asm里进行汇编了.

PS:如果要下载到实验箱里去.我们还有需要设置一点东西.就一点点拉.

在Project--->Options for Target 'Target 1',在弹出的对话框里点击"DeBug" 点击右边的"USE" 选择"Keil Monitor--51 Driver"其他的可以不改, 然后确定.

 

 

第一步:我们来编写四种波形程序:

1.最简单的方波: 不就是取两个一大一下的值吗,所以我这里选择8051的P0口不断的交替输出00H和FFH两个值.当然中间经过0832D/A进行转换咯/. 这里我们讲个锯齿波.

     所谓锯齿波不就是从一个初值往上加像一把锯齿,

代码如下:

ORG   0000H
LJMP START
ORG   0030H

START:   

         mov dptr,#0feffh            ;启动D/A转换

         mov a,#00h                   ;送初值OOH

loop3:

        movx @dptr,a              ;

        inc a

        lcall delay2    

        CJNE a,#0FFH,loop3     ;判断是否为FFH.不是则继续到LOOP3,否则往下执行.

        sjmp loop3

delay2:             ;延时程序

mov r3,#11

mov 31h,r3          

d1: nop

   nop

   nop

   nop

   nop

   nop

   nop

 

 

   nop

 

   djnz r3,d1

   mov r3,31h

   ret

end

程序编写完后,进行保存。 然后分别按translate current file, build target ,rebuild all target files 运行编译。下面的信息栏会提示错误和警告信息。编译无误后可以进行下载,不过事先要连好下载器,单片机的P0口接D\A转换器,WR接WR等。下载的时候要按住下载器的按钮,等下载好再松开按钮。

 

由于打字比较累,所以其他波形就不详细讲了.

 

 

如何进行波形的频率进行调节。其实所谓的频率的可调,不过就是改变它的延时的初值,如上面方波的mov r3,#11 ,只要改变r3的值就可改变波形的频率。

因为键盘是相当与一个下升延触发的,所以我们选择中断的方式进行控制频率。

       SETB EA             ;开CPU中断

      SETB IE0           ;开!INT0的中断标志

      SETB IE1           ;开!INT1的中断标志

      SETB EX1         

      SETB IT1           ;允许!INT1中断

      SETB IT0           ;允许!INT0中断

      SETB EX0

      mov r3,#11            ;改变方波的 频率

然后把单片机的P1口就键盘,来实现键盘按下之后,可以进行频率的可调,这里设计的比较粗糙,就不进行延时去抖动了。

 

剩下的就是用拨位开关进行波形的选择.由于有四种波形.所以只要两个开关就OK搞定.

下面是代码:

loop:                   ;查询键盘

    ; anl p1,#03h         ;使P1.0P1.0有效

       MOV a,p1      

 

       cjne a,#00h,l1        K1K2开关为都为低,则输出锯齿波。否则跳到L1

       jmp jcb

l1:    cjne a,#01h,l2         K1高,K2为低,则输出方波。否则跳到L2

      jmp fb

l2:    cjne a,#02h,l3         K1低,K2高,则输出三角波,否则跳到L3

      jmp sjb

l3:    cjne a,#03h,l4         K1K2全为高,则输出三角波,否则跳到L4

      jmp zxb

l4:    ajmp loop            ;实时查询键盘

 

就这样差不多了,然后再把代码连起来就可以了(呵呵,这块大家自己动手应该没问题了吧

 

 

今天是8月6号,距离奥运会只剩两天.喊喊口号 北京加油,

                       奥运加油!

                                天气:大太阳,怎一个热字了的(大家要注意温室效应啊) 更多内容可以去我的百度空间:http://hi.baidu.com/k65777803/blog/index/1

原创粉丝点击