用c语言编写梯形波程序,利用DAC0832芯片,利用双缓冲方式,产生梯形波,用C语言编程实现...

利用DAC0832芯片,利用双缓冲方式,产生梯形波,用C语言编程实现

第一题:利用DAC0832芯片,利用双缓冲方式,产生梯形波,用C语言编程实现。 第二题:8051系统中,振荡频率为12MHz,用定时器T0实现P1.0产生周期为2ms的方波,最佳答案

这是两毫 秒 产生的方波 我仿真过了 好使

#include

sbit P10=P1^0;

void main()

{ EA=1;ET1=1;TR0=1;

TMOD=01;

TH0=65536-2000/256;

TL0=65536-2000%256;

while(1)

{

P10=~P10;

}

}

void NT1() interrupt 3

{

TH0=65536-2000/256;

TL0=65536-2000%256;

}

以下程序是0832产生的三种波形 三角波 锯齿波 方波

#include

#include

#define PP XBYTE[0x7fff]

#define uint unsigned int

uint i,j,k;

void delay(uint z);

void main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org 0000h loot: jnb p1.0,aa jnb p1.1,bb jnb p1.2,cc jnb p1.3,dd jnb p1.4,ee sjmp loot aa: mov r7,#10 net: mov p2,#0 acall delay mov p2,#0ffh acall delay djnz r7,net sjmp loot bb: mov r6,#10 lll: mov A,#0 ll: mov p2,A inc a mov r2,#10 djnz r2,$ cjne a,#0ffh,ll djnz r6,lll sjmp loot cc: mov r5,#10 looop:mov a,#0 loop: mov p2,a inc a mov r2,#10 djnz r2,$ cjne a,#0ffh,loop gg: mov p2,a dec a mov r2,#10 djnz r2,$ jnz gg djnz r5,looop sjmp loot dd: start:mov r1,#10 start1:mov a,#0 xx: mov p2,a mov r2,#10 djnz r2,$ inc a cjne a,#0ffh,xx acall delay2 yy: mov p2,a dec a mov r2,#10 djnz r2,$ jnz yy mov p2,a acall delay2 djnz r1,start1 sjmp loot ee: MOV R6,#10 LOOP2: MOV DPTR,#table LOOP3:MOV A,#0 MOVC A,@A+DPTR MOV P2,A ACALL DELAY4 INC DPTR mov r4,dph CJNE r4,#01h,loop3 mov r4,dpl cjne r4,#0f7h,loop3 DJNZ R6,LOOP2 ljmp loot DELAY4:mov r2,#10 djnz r2,$ ret TABLE: DB 128, 130, 132, 135, 137, 139, 141, 144, 146, 148 DB 150, 152, 155, 157, 159, 161, 163, 165, 168, 170 DB 172, 174, 176, 178, 180, 182, 184, 186, 188, 190 DB 192, 194, 196, 198, 200, 201, 203, 205, 207, 209 DB 210, 212, 214, 215, 217, 219, 220, 222, 223, 225 DB 226, 227, 229, 230, 232, 233, 234, 235, 237, 238 DB 239, 240, 241, 242, 243, 244, 245, 246, 247, 247 DB 248, 249, 250, 250, 251, 252, 252, 253, 253, 254 DB 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 254 DB 254, 254, 253, 253, 252, 252, 251, 250, 250, 249 DB 248, 247, 247, 246, 245, 244, 243, 242, 241, 240 DB 239, 238, 237, 235, 234, 233, 232, 230, 229, 227 DB 226, 225, 223, 222, 220, 219, 217, 215, 214, 212 DB 210, 209, 207, 205, 203, 201, 200, 198, 196, 194 DB 192, 190, 188, 186, 184, 182, 180, 178, 176, 174 DB 172, 170, 168, 165, 163, 161, 159, 157, 155, 152 DB 150, 148, 146, 144, 141, 139, 137, 135, 132, 130 DB 128, 126, 124, 121, 119, 117, 115, 112, 110, 108 DB 106, 104, 101, 99, 97, 95, 93, 91, 88, 86 DB 84, 82, 80, 78, 76, 74, 72, 70, 68, 66 DB 64, 62, 60, 58, 56, 55, 53, 51, 49, 47 DB 46, 44, 42, 41, 39, 37, 36, 34, 33, 31 DB 30, 29, 27, 26, 24, 23, 22, 21, 19, 18 DB 17, 16, 15, 14, 13, 12, 11, 10, 9, 9 DB 8, 7, 6, 6, 5, 4, 4, 3, 3, 2 DB 2, 2, 1, 1, 1, 0, 0, 0, 0, 0 DB 0, 0, 0, 0, 0, 0, 1, 1, 1, 2 DB 2, 2, 3, 3, 4, 4, 5, 6, 6, 7 DB 8, 9, 9, 10, 11, 12, 13, 14, 15, 16 DB 17, 18, 19, 21, 22, 23, 24, 26, 27, 29 DB 30, 31, 33, 34, 36, 37, 39, 41, 42, 44 DB 46, 47, 49, 51, 53, 55, 56, 58, 60, 62 DB 64, 66, 68, 70, 72, 74, 76, 78, 80, 82 DB 84, 86, 88, 91, 93, 95, 97, 99, 101, 104 DB 106, 108, 110, 112, 115, 117, 119, 121, 124, 126 DB 128 delay:mov r2,#200 djnz r2,$ ret delay2: mov r3,#60 zz: mov r2,#0 djnz r2,$ djnz r3,zz ret end
好的,以下是使用汇编语言和C语言分别实现利用DAC0832芯片产生一个周期具有8级阶梯的梯形波的方法: 汇编语言实现: ``` ; DAC0832芯片梯形波产生程序 ; 8级阶梯,单缓冲方式 ; 使用P1.0口控制DAC0832的CS端口,P1.1口控制DAC0832的CLK端口,P1.2口控制DAC0832的DATA端口 ; 波形输出到DAC0832的OUTA端口 ORG 0000H MOV P1, #00000000B ; P1口初始值 MOV A, #0FFH ; 初始化A寄存器 MOV R0, #8 ; 初始化R0寄存器,设置循环次数 LOOP: MOV P1.0, #0 ; 使CS端口为低电平 MOV P1.1, #0 ; 使CLK端口为低电平 MOV A, ARL ; 将A寄存器的低8位存储到ARL变量中 ANL A, #0F8H ; 对A寄存器进行与运算,使低3位为0 ADD A, R0 ; 将A寄存器与R0寄存器相加,得到DAC0832的输出数据 MOV P1.2, A.0 ; 将A寄存器的最低位存储到P1.2口,控制DAC0832的DATA端口 RR A ; 将A寄存器循环右移1位 DJNZ R0, LOOP ; 循环结束后,跳转到LOOP处 MOV P1.0, #1 ; 使CS端口为高电平 MOV P1.1, #1 ; 使CLK端口为高电平 RET ; 程序结束 ``` C语言实现: ``` #include <reg52.h> #define DAC_CS P1_0 #define DAC_CLK P1_1 #define DAC_DATA P1_2 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for (i = 0; i < t; i++) { for (j = 0; j < 125; j++); } } void main() { unsigned char i, data; DAC_CS = 1; // 初始化P1口 DAC_CLK = 1; DAC_DATA = 0; while (1) { data = 0xFF; for (i = 0; i < 8; i++) { DAC_CS = 0; // 使CS端口为低电平 DAC_CLK = 0; // 使CLK端口为低电平 data &= 0xF8; // 对data进行与运算,使低3位为0 data += i; // 将data与i相加,得到DAC0832的输出数据 DAC_DATA = data & 0x01; // 将data的最低位存储到P1.2口,控制DAC0832的DATA端口 data >>= 1; // 将data循环右移1位 DAC_CLK = 1; // 使CLK端口为高电平 DAC_CS = 1; // 使CS端口为高电平 } delay(1000); // 延时1s } } ``` 以上两种方法均可用于利用DAC0832芯片产生一个周期具有8级阶梯的梯形波

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值