-
定时为50ms,软件计数5次。
org 0000h
ljmp start
org 000bh
ljmp timer0interrupt
start:
mov sp,#60h
mov tmod,#01h
mov th0,#3ch
mov tl0,#0b0h
mov r7,#
setb ;输出方波引脚。
setb ea
setb et0
setb tr0
sjmp $
timer0interrupt:
mov th0,#3ch
mov tl0,#0b0h
djnz r7,rt
mov r7,#
cplrt: retiend
-
我有 C 语言,但它比你的简单。
-
我做了一个纯硬件的DDS信号发生器,这就是你现在要做的——一个直接的数字信号发生器,因为它太复杂了,你必须知道如何编程,所以我要给你一个解决方案。
方案1:纯用单片机生成,我建议采用查表法,用MATLAB对正弦波进行采样,得到一个离散的也就是数字正弦波,也就是正弦波表,这里要注意的是,正弦波的峰值不要超过一个字节(当然, 如果用的是8位单片机),否则就得通过汇编语言来处理,当然波形的幅度调节范围要很大,另外采样点的数量要适当,才能产生美观平滑美观的波形;以编程方式查询表,使用dptr输出(使用p0、p2端口)来使用,这样就只能输出一个频率并行的数字正弦波,可以控制两个相邻表之间的时间间隔,从而改变正弦波的周期或频率; 每次访问表格时,从表格的值中减去所需的幅度步长值,幅度会更容易。 我们希望能够用示波器来观察波形,也就是模拟正弦波,现在我们有了数字正弦波,自然要用到数模转换器,位数越高越好,这取决于你的正弦波表有多少位,如果是一个字节(8位), 用8位就够了,一个字有16位,当然,位数越高越贵,建议你用8位(推荐DAC0832,好像是13位),便宜(10件左右),这样你得到一个模拟正弦波,但是它是阶梯形的,原因是你觉得, 加一个低通滤波器,这样就完成了,你得到一个真正的正弦波(在正弦波的输出端口上加一个比较器,得到一个频率和幅度相同的方波,在方波的输出口加一个积分器得到一个三角波,这不我
三角波的方法与正弦波相同,但方波不需要那么麻烦,可以直接延时或定时。 剩下的就是编程问题了,我就不赘述了。
解决方法二:使用专用的DDS芯片,如AD9850等,使用单片机来控制DDS芯片,这个很简单,可以查看AD9850用户手册,需要在输出端添加滤波等,手册是可用的。 剩下的就是编程问题了,我就不赘述了。
这个事情工作量很大,建议找几个合适的合作伙伴,希望能帮到你,!
-
需要创建硬件连接:连接到总线上的DA转换器,然后检测值? 相应的波形。
例如,正弦波方案芯片的值每 1 度存储一次。 在该方案中,DA转换器的值以固定的时间间隔取,因此可以获得DA输出端的正弦波输出。
数字波形可以不同。
间隔不同,波形周期可以不同。
-
我自己写的。 只需使用定时中断即可。 无外部中断。
-
你可以发出一个方波,程序没有大问题,之所以会出现这些警告,是因为你的项目里有这个东西,你可以删除它,这个文件没有效果。
在高级编程语言中可以完成的工作在汇编语言中通常是可能的。 只不过,在使用汇编语言编写程序时,需要掌握相关的硬件知识,比如微处理器内部的寄存器结构、对主存储器的访问、输入输出接口电路的硬件结构等等,所以汇编语言是一种面向硬件的编程语言,与高级编程语言的编程风格有很大的不同, 而且人们可能会觉得很难学,但实际上,上手后学习汇编语言要简单得多。