单片机C语言版信号发生器

单片机C语言版信号发生器,第1张

单片机信号发生器,一般是通过控制单片机的IO的高低电平来实现的,具体为

1,可以通过先配置一个管脚为输出,然后给这个管脚写0,输出就为低电平,然后写1,这个管脚就输出为高电平。如果你的单片机是33v供电的话,那么高电平一般为33V,低电平一般为0v。

2,如果要产生一个方波的话,需要先输出1,然后延迟一段时间,然后再输出0,然后再延迟一段时间,然后输出1 要如此反复的话,可以用while(1), 然后在while(1)里面写入你的置高,延迟,置低的代码,具体伪代码可以为

配置对应输出管脚为输出; //因为管脚可以配置为输出和输入,所以需要先配置为输出

while(1)

{

对对应输出管脚置高;

sleep(半个周期的时间);

对对应输出管脚置低;

sleep(半个周期的时间);

}

3, 如果你牵涉到高级应用的话,比如要输出一个正弦波,那么需要外加信号产生芯片,比如DDS芯片。

4,如果还需要更加复杂的信号,任意波形的,可以用一个片内DA按照你的意思输出对应的电平,或者片外DA来输出。

函数(波形)信号发生器。能产生某些特定的周期性时间函数波形(正弦波、方波、三角波、锯齿波和脉冲波等)信号,频率范围可从几个微赫到几十兆赫函数信号发生器在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。除供通信、仪表和自动控制系统测试用外,还广泛用于其他非电测量领域。

电子线路中的电流源、电压源一般是为电子器件提供能量的,也就是说器件要想工作必须为它提供电能。

区别就是虽然它们都以电的形式出现,但前者提供的是电信号,后者只是提供电能。

程序很简单的,关键在写程序的时候要注意DAC0832的保持时间和转换速度。

建议你先弄个单缓冲或者直接控制的。

接着控制的会比较简单:

就是DAC8032 1,2,3,10,17,18脚GND。20,19,8脚VCC

能明白吧!程序自己写比较好,这样能学到更多东西

给你点参考,这个程序能让你对它的工作方式更熟悉!!

ORG 0000H

MAIN:MOV A,P1

MOV R0,A ;设置高电平

MOV R1,#00H ;设置低电平

LCALL BOXING

SJMP MAIN

BOXING: JNB P10,SANJIAO ;P10控制三角波的输出

JNB P11,JUXING ;P11控制矩形波的输出

JNB P12,JUCHI ;P12控制锯齿波的输出

RET

;三角波

SANJIAO:

MOV DPTR,#7FFFH ; 选中DA0832

MOV A,#00H

UP1: MOVX @DPTR,A ; 向0832输出数据

INC A

JNZ UP1 ; A=!0 跳转反之顺序执行

DOWN1:DEC A

MOVX @DPTR,A

JNZ DOWN1

RET

;矩形波

JUXING:

MOV DPTR,#7FFFH

LP:MOV A,R0 ;设置输出上限

MOVX @DPTR,A

LCALL DEL_H ;调高电平延时程序

MOV A,R1

MOVX @DPTR,A

LCALL DEL_L ;调低电平延时程序

RET

;锯齿波

JUCHI:

MOV DPTR,#7FFFH

MOV A,#00H

LOOP:MOVX @DPTR,A

INC A

;SJMP LOOP

RET

;延时程序

DEL_H: ;高电平

MOV R7,#250

DE:MOV R6,#4

DJNZ R6,$

DJNZ R7,DE

RET

DEL_L: ;低电平

MOV R7,#250

DEL:MOV R6,#4

DJNZ R6,$

DJNZ R7,DE

RET

;

END

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12156128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存