STC89C52RC DA0832 方波 锯齿波 三角波 正弦波 Proteus仿真 波形发生器 查表法 按键切换
这里写目录标题
- 一 项目综述
- 设计思路:
- (1)矩形波生产思路
- (2)锯齿波生成思路
- (3) 三角波生成思路
- (4)正弦波生成思路
- 二 DAC0832介绍
- 1.芯片主要性能:
- 2.该芯片为20引脚双列直插式,引脚定义如下
- 三 汇编代码(不完整,文末下载)
- 四 仿真图
- 五 结果展示
- 六 下载
一 项目综述
本文介绍一种使用基于51单片机汇编语言编程生成矩形波、锯齿波,三角波,正弦波的方案。文末提供keil4汇编程序,prouteus仿真电路。
设计思路:
生成的矩形波有详细的周期计算方法(使用时钟定时),另外三种波形的周期,都是由一些寄存器自加来产生单个数据间的延时。具体周期计算方法,查阅课本根据指令周期结合波形单个周期中数据个数进行计算。
(1)矩形波生产思路
使用时钟定时,并配置时钟中断,当中断触发的时候,反转电平生成矩形波。
(2)锯齿波生成思路
借助51单片机寄存器自加功能,在8位寄存器加到255时清零,重新自加,以此类推,每次自加结束形成锯齿波数据送给DAC,输出对应的模拟量。
(3) 三角波生成思路
具体思路借鉴锯齿波思路,不同的是,在寄存器自加到255后再自减,操作完同样送至DAC芯片。
(4)正弦波生成思路
使用查表的方式生成正弦吧,通过python生成16进制的正弦码表,在程序中隔一段时间给DAC0832送一个值,最后生成正弦波,波形的周期跟送值的间隔时间有关。
正弦波码表生成(python和matlab):
链接: https://blog.csdn.net/jjjjjj12345678/article/details/121762923.
二 DAC0832介绍
1.芯片主要性能:
8位分辨率
电流建立时间1us
数据输入可以采用双缓冲、单缓冲或直通方式
输出电流线性度可在满量程下调节
逻辑电平输入与TTL兼容
单一电源供电(+5V~+15V)
低功耗,20mW
2.该芯片为20引脚双列直插式,引脚定义如下

三 汇编代码(不完整,文末下载)
代码组织思路:
在主函数中设置死循环,判断四个按键哪个按下,判断按下按键跳到对应波形生成函数。
进入各个波形子函数前先进行按键判断,如果对应标志不符合该函数则跳转到对应的波形生成函数,以此实现按键波形切换。
Main: MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0H ;3CB0H,65536-15536=50000us=50msSETB ET0 ;time0CLR TR0 ;默认不打开定时器,等方波按钮触发后打开SETB EA ;总中断打开MOV Count,#00HWhile: ;JNB 寻址为0转移 JNB P1.0,P10 ;如果按键P1.0=0,则跳转到P10,一下类似JNB P1.1,P11 ;按键切换波形JNB P1.2,P12JNB P1.3,P13SJMP While ;While循环 Timer0:MOV TH0,#3CH ;定时器赋值MOV TL0,#0B0HMOV A,CountCPL A ;翻转A,即让变量count翻转构成高低电平,也就是方波MOV Count,ARETIP10: ;R7中的值表示不同的波形,0为方波,1为锯齿,2为三角波,3为正弦MOV R7,#00H ;根据不同按键跳转到不同的波形生成函数LCALL SQU ;调用方波函数LJMP WhileP11: MOV R7,#01HCLR TR0 ;关闭定时器LCALL SAW ;调用锯齿波LJMP WhileP12: MOV R7,#02HCLR TR0 ;关闭定时器LCALL TRI ;调用三角波LJMP WhileP13: MOV R7,#03HCLR TR0 ;关闭定时器LCALL SIN ;调用正弦波LJMP WhileSQU: ;方波子函数JNB P1.1,N1 ;方波,并在此判断按键是否切换,不切换执行方波JNB P1.2,N2JNB P1.3,N3LJMP SSQUN1: MOV R7,#01H ;否则给R7赋值,并跳转结束LJMP TC0N2: MOV R7,#02HLJMP TC0N3: MOV R7,#03HLJMP TC0SSQU: CJNE R7,#00H,TC0 ;比较R7内的值是否为0,不是则跳转TC0SETB TR0 ;方波定时器使能MOV P0,Count ;给P0=Count,由定时器反转CountLJMP SQUTC0: RETSAW: ;锯齿波子函数JNB P1.0,N4 ;锯齿波,同理继续判断是否有其他按键切换JNB P1.2,N5JNB P1.3,N6LJMP SSAWN4: MOV R7,#00H LJMP TC1N5: MOV R7,#02HLJMP TC1N6: MOV R7,#03HLJMP TC1SSAW: CJNE R7,#01H,TC1 ;不相等转移MOV R0,#00HK10: MOV P0,R0 ;将寄存器R0中数值变换0-255给P0输出,R3延时MOV R3,#00HL10: INC R3CJNE R3,#255,L10INC R0 ;R0自加CJNE R0,#255,K10 ;如果R0!=255,则跳转K10,如果等于继续执行LJMP SAWTC1: RETTRI: ;三角波子函数JNB P1.0,N7 ;三角波,同理继续判断是否有其他按键切换JNB P1.1,N8JNB P1.3,N9LJMP TTRIN8: MOV R7,#01HLJMP TC2N9: MOV R7,#03HLJMP TC2 TTRI: CJNE R7,#02H,TC2 ;R0的数值先从0-255,然后在从255-0,R3用于延时MOV R0,#00HK20: MOV P0,R0MOV R3,#00HK21: MOV P0,R0 ;R0赋值给P0MOV R3,#0FFHL21: DEC R3CJNE R3,#0,L21DEC R0 ;R0的数值先从255-0,R3用于延时 CJNE R0,#0,K21LJMP TRITC2: RET;延时由R3决定,256个INC指令,大概256个指令周期SIN: ;正弦波子函数JNB P1.0,N10 ;正弦波,同理继续判断是否有其他按键切换JNB P1.1,N11JNB P1.2,N12LJMP SSINN10: MOV R7,#00HLJMP TC3N11: MOV R7,#01HLJMP TC3N12: MOV R7,#02HLJMP TC3SSIN: CJNE R7,#03H,TC3 MOV R0,#00HK30: MOV A,R0MOV DPTR,#TAB ;查表显示sin函数,R3用于延时MOVC A,@A+DPTR ;寄存器间接寻址,MOV P0,A ;寄存器寻址INC R0MOV R3,#00HTC3: RET;256 位离散正弦函数码表TAB:
DB 080H,083H,086H,089H,08CH,090H,093H,096H,099H,09CH,09FH,0A2H,0A5H,0A8H,0ABH,0AEH
DB 0B1H,0B3H,0B6H,0B9H,0BCH,0BFH,0C1H,0C4H,0C7H,0C9H,0CCH,0CEH,0D1H,0D3H,0D5H,0D8H
DB 0DAH,0DCH,0DEH,0E0H,0E2H,0E4H,0E6H,0E8H,0EAH,0EBH,0EDH,0EFH,0F0H,0F1H,0F3H,0F4H
DB 0F5H,0F6H,0F8H,0F9H,0FAH,0FAH,0FBH,0FCH,0FDH,0FDH,0FEH,0FEH,0FEH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FEH,0FEH,0FEH,0FDH,0FDH,0FCH,0FBH,0FAH,0FAH,0F9H,0F8H,0F6H
DB 0F5H,0F4H,0F3H,0F1H,0F0H,0EFH,0EDH,0EBH,0EAH,0E8H,0E6H,0E4H,0E2H,0E0H,0DEH,0DCH
DB 0DAH,0D8H,0D5H,0D3H,0D1H,0CEH,0CCH,0C9H,0C7H,0C4H,0C1H,0BFH,0BCH,0B9H,0B6H,0B3H
DB 0B1H,0AEH,0ABH,0A8H,0A5H,0A2H,09FH,09CH,099H,096H,093H,090H,08CH,089H,086H,083H
DB 080H,07DH,07AH,077H,074H,070H,06DH,06AH,067H,064H,061H,05EH,05BH,058H,055H,052H
DB 04FH,04DH,04AH,047H,044H,041H,03FH,03CH,039H,037H,034H,032H,02FH,02DH,02BH,028H
DB 026H,024H,022H,020H,01EH,01CH,01AH,018H,016H,015H,013H,011H,010H,0FH,0DH,0CH
DB 0BH,0AH,08H,07H,06H,06H,05H,04H,03H,03H,02H,02H,02H,01H,01H,01H
DB 01H,01H,01H,01H,02H,02H,02H,03H,03H,04H,05H,06H,06H,07H,08H,0AH
DB 0BH,0CH,0DH,0FH,010H,011H,013H,015H,016H,018H,01AH,01CH,01EH,020H,022H,024H
DB 026H,028H,02BH,02DH,02FH,032H,034H,037H,039H,03CH,03FH,041H,044H,047H,04AH,04DH
DB 04FH,052H,055H,058H,05BH,05EH,061H,064H,067H,06AH,06DH,070H,074H,077H,07AH,07DHEND
四 仿真图

五 结果展示




六 下载
STC89C52RC_汇编_DAC_矩形、锯齿、三角、正弦(谢谢大家支持!)
链接: https://download.csdn.net/download/jjjjjj12345678/57680552.
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
