单片机汇编语言编程 求方波、三角波和锯齿波汇编程序怎么编写一段一段分开,不需要按按钮的那种

单片机汇编语言编程 求方波、三角波和锯齿波汇编程序怎么编写一段一段分开,不需要按按钮的那种,第1张

你抄人家的,也应该过下脑啊,电路图都是画错了啊;

8位DAC,采用直通方式,其他读写线都接低电平就好了;

基准电压=5V,那么 8位DAC=ffh,对应输出= -5V,8位DAC=00h,对应输出=0V;

1)所以你要得到矩形波时,就是控制单片机输出P0=0xff的时间,以及P0=0x0的时间;

2)要输出三角波时,P0 输出:最小值为 0,最大值为 0xff,那么必须先假设一个波形周期均匀输出20个采样值,则三角波上升期为10个采样值,下降期也为10个采样值;

然后反过来求出量化值;

因为: 5V/10=05V,那么 N0/256 = 05/5;N1/256 = 10/5;N2/256 = 15/5;

N9/256 = 5/5;从而得到10个量化值,这是上升期的量化值,下降期的量化值则是前面量化值的反序排列,然后做成一个有20个数的数组;

那么程序就是按一定的时间间隔循环输出这20个的数组,即可得到三角波了;

3)锯齿波, *** 作上类似三角波,只是上升期的采样个数与下降期的采样个数不等;

如一个波形周期仍然均匀输出20个采样值,只是上升期为6个采样值,下降期也为14个采样值;

程序加一个的LCD1602,你选择使用

的#include <reg52h>的/ /包含头文件

?#包括<intrinsh>的

#定义UCHAR无符号的字符/ /宏定义

?#定义UINT无符号整数

?UCHAR I,J,N,Z,/ /定义全局变量

SBIT RS = P2 ^ 0; / /定义端口

?和SBIT RW = P2 ^ 1;

SBIT E = P2 ^ 2;

SBIT K = P2 ^ 7;

SBIT K1 = P2 ^ 6;

UCHAR代码STR0 [] = {“正弦波”}; / /定义LCD1602显示的字符数组

UCHAR代码STR1 [] = {“三角波”};

UCHAR代码字符串str2 [] = {“方波”};

?的UCHAR代码表[3] [40] = / /定义的两维阵列的波形

?{

??80H时,0x94的,0xa7,0xb9,0xca,0xd9,0xe7,0xf1,0XF8,是0xFD,

??是0xFD,0xff,则0XF8,0xf1,0xe7,0xd9,0xca,0xb9 0xa7,0x94的,

??80H时,0x6c,将0x55,0x46,0x35,$ 25,为0x18,0X0E,0X06,0X02,

??为0x00,0X02,0X06,0X0E,为0x18,$ 25,0x35,0x46,0x55的,0x6c,

??80H时,0x8c,0x99,0xa6,0xb3,0XC0,含有0xCC,0xd9,0xe6,0xf2,

??为0xff,0xf2,0xe6,0xd9,含有0xCC,0XC0,0xb3,0xa6,0x99,0x8c,

??80H时,为0x73,0x66,0X5A,0x4d,0X40,地址0x33,0X26,0X1A,0X0D,

?为0x00,0X0D,0X1A,0X26,地址0x33,0X40,0x4d,为0x5A,0x66,为0x73,

??为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则

??为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则是0xFF,0xFF时,为0xff,0xff,则

??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00

?};

?无效延迟(UINT Z)/ /延时程序

?{

????(Z,Z> 0,Z - )

???

??

??}

?}

?无效Write_command“(UCHAR CMD)/ / LCD1602写命令程序

?{

??RS = 0; / /选择指令寄存器

?RW = 0; / /写 *** 作

?E = 1 / /使能端

?P1 = CMD;

?延迟时间(1);

?E = 0;

LCD1602是不是很忙?延迟(10); / /延时

?}

?无效WRITE_DATA(UCHAR CMD)/ / LCD1602写入数据的命令

?{

??RS = 1; / /选择数据寄存器

?RW = 0; / /写 *** 作

?E = 1; / /结束

?P1 = CMD;

?延迟时间(1);

?E = 0;

LCD1602是不是很忙?延迟(10); / /延时

?}

?的无效Lcd_init()/ / LCD1602初始化程序

?{

????Write_command(0x38); / /设置16 5 7点阵8位数据接口

?Write_command(0X0C)/ / LCD1602打开显示,不显示光标

?Write_command(0X06)/ /读或写一个字符指针加1不动

?Write_command(0X80 +0 X00); / /设置数据地址指针

?}

?无效显示器()/ / LCD1602显示英语课程

?{

????Lcd_init();

?(我== 0)

???

?组(n = 0,N <13,N +)

???

???WRITE_DATA(STR0 [N]);

??}

????}

?否则,如果(我== 1)

?{

?组(n = 0,N <13,N +)

??

??WRITE_DATA(STR1 [N]);

?}

?}

?其他

?{

?组(n = 0,N <13,N +)

??

??WRITE_DATA(字符串str2 [N]);

?}

?}

?}

无效的主要()/ /主函数

?{

???显示();

?而(1)

?{

??中for(j = 0; J <40; + +)

???

???P0 =表[I] [J];

???

??}

(k == 0)/ /切换程序??

???

????延迟时间(1);

???(k == 0);

????

????(K == 0)

?????

????+ +;

????如果(i == 3)= 0;

???显示();

????}

????

???}

??????而(k == 0);

??}

?}

?}

如下即可:

ORG 0000H

LJMP MAIN

ORG 3000H

MAIN:

MOV DPTR, #07FFFH

MOV A, #00H

LOOP:

MOVX @DPTR,A ;输出

INC A ;递增

JNZ LOOP ;非零则转移到前面,继续输出、递增

;----------------------------------------------------

LP2: ;为0则执行下面的

MOVX @DPTR,A ;输出

DEC A ;递减,将为255、254。。。

JNZ LP2 ;非零,就转移,继续输出、递减

AJMP LOOP ;无限循环

END

锯齿波。

信号发生器可以产生正/余弦波、锯齿波、三角波和方波,作为信号源使用,使用时负极接地,正极为信号输出,下边两个用于波形的调制。

程序中用MOVX指令输出数据,P0就不能用上拉电阻,按你的仿真图,把第6行改成MOVP0,A就行,把0832的WR1接地。

另外,那个RN1必须要去掉,不论哪种方式数据线都不能串联电阻,还有,从P0口每输出一个数据后要延时一点,加个延时子程序。

可以这样,DAC0832是根据输入的数字量,输出相应的模拟量,锯齿波是有规律的模拟量。

单片机内部程序可以通过算法(规律计算或数组),定时生成一个数字量发送到DAC0832,使其输出相应模拟量,即可。

例如锯齿波是从0~3V,将0~3V分为若干个点(分辨率),定时输出每个点的数字量。

以上就是关于单片机汇编语言编程 求方波、三角波和锯齿波汇编程序怎么编写一段一段分开,不需要按按钮的那种全部的内容,包括:单片机汇编语言编程 求方波、三角波和锯齿波汇编程序怎么编写一段一段分开,不需要按按钮的那种、试用c语言编写一个能输出锯齿波信号的单片机c51程序、这是显示锯齿波的程序,我想知道如果我想产生三角波应改变哪为什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9270365.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存