什么是子程序, 什么是宏程序,

什么是子程序, 什么是宏程序,,第1张

在一个加工程序中,如果其中有些加工内容完全相同或相似,为了简化程序,可以把这些重复的程序段单独列出,并按一定的格式编写成子程序。主程序在执行过程中如果需要某一子程序,通过调用指令来调用该子程序,子程序执行完后又返回到主程序,继续执行后面的程序段。子程序(subroutine)是一个概括性的术语,任何高级程序所调用的程序,都被称为子程序。它经常被使用在汇编语言层级上。子程序的主体(body)是一个代码区块,当它被调用时就会进入运行。

数控系统为用户配备了强有力的类似于高级语言的宏程序功能,用户可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外宏程序还提供了循环语句、分支语句和子程序调用语句,利于编制各种复杂的零件加工程序,减少乃至免除手工编程时进行繁琐的数值计算,以及精简程序量。宏程序指令适合抛物线、椭圆、双曲线等没有插补指令的曲线编程;适合图形一样,只是尺寸不同的系列零件的编程;适合工艺路径一样,只是位置参数不同的系列零件的编程。较大地简化编程;扩展应用范围。

应用AD9850实现正弦标校信号的产生

AD9850采用先进的DDS技术,在内部集成了32 b相位累加器、14 b正/余弦查询表和高性能的10 bD/A转换器以及一个高速比较器。他通过并口或串口写入的频率控制字来设定相位累加器的步长大小,相位累加器输出的数字相位通过查找正/余弦查询表得到 所需频率信号的采样值,然后通过D/A变换,输出所需频率的正弦波信号。还可以通过高速比较器将该正弦波信号转换成方波,作为时钟信号输出。

1 系统总体设计

 AD9850有40 b寄存器:32 b用于频率控制,5 b相位控制,1 b电源休眠功能,2 b厂家保留测试控制。这40 b控制字可通过并行方式或串行方式装入到AD9850。在并行装入方式中,通过8 b总线D7~D0重复5次装入寄存器,在FQ-VD上升沿把40 b数据从输入寄存器装入到频率和相位及控制数据寄存器,从而更新DDS输入频率和相位,同时把地址指针复位到第1个输入寄存器。在串行装入方式中,W- CLK上 升沿把25脚(D7)的1 b数据串行移入,移动40 b后,

用一个FR-VD就可以更新输出频率和相位。设计中选用并行装入方式。

 频率调谐和相位调制字通过一个并行装载格式装入到AD9850中,并行装载的格式由连续的8 b控制字组成。第1个8 b字节中的5 b用来控制相位调制,1 b用来低功耗,2 b用于装载格式。第2个字节到第5个字节组成32 b频率调谐字,最大的控制寄存器的更新频率为23 MHz。其输出信号的频率fDDS由式(1)确定: 

fDDS=ΔffCLK/232(1)

其中:Δf为32 b频率控制字的值;fCLK为工作时钟。

AD9850控制简单,可用8 b并行口直接输入频率、相位等控制数据,其功能原理如图1所示。

2 AD9850与单片机接口设计

单片机用来实现对整个系统的控制。单片机控制部分包括键盘显示电路以及频率合成部分的接口电路。产生的正弦波或者方波的频率以及需要实现的功能信息从键盘键入,同时由显示器显示。频率合成以及各功能实现部分由DDS芯片AD9850及其外围电方波的产生输出。

 AT89C51单片机是低功耗、高性能CMOS8 b单片机,有4 kb可编程闪存以及可擦写只读存储器(EPROM),该产品与MSC-51系列指令系统和管脚输出的工艺标准完全兼容,可进行电擦写 *** 作并具有超强的加密 功能。AT89C51单片机主要实施逻辑控制功能:根据用户选择产生波形,形成频率字,与上位机通信等。波形、幅值的控制主要由数字电位器构成,即由 89C51的2根口线对其进行控制。AD9850的输出波形接到数字电位器的固定端,单片机通过P1口线改变数字电位器的滑动端计数寄存器的内容,从而控 制滑动端在电阻阵列中的位置,改变输出波形幅值。

电路设计时,对时钟信号的质量要求比较高,即时钟信号的上升沿和下降沿应无大的尖峰和凹坑, 时钟信号必须用地线屏蔽。另外,给AD9850的时钟信号不能低于1 MHz,低于这个数值时,芯片将自动进入休眠状态;当高于此频率时,系统则恢复正常。最后还要考虑设计良好的去耦电路,去耦电容尽可能靠近器件,并注意良 好接地,模拟地和数字地一定要分开等。

3 D/A转换电路设计

 由于AD9850是由10 b D/A转换器来输出正弦波信号,因此其输出频率最大值不能超过参考输入频率的1/2。当作为时钟源时,考虑到衰减问题,其输出频率的最佳值限制在参考输入 频率的33%以下。器件内部设有最小时钟门限,当输入频率低于1 MHz时,芯片将自动实现电源判断。

AD9850的直接数字合成技术是基于 数字分频原理实现频率合成的。该器件内部有一个增量可调的累 加器,每接收到一个输入脉冲,累加器就增加所设定的增量(由写入的32 b频率控制字决定),当累加器溢出时,就输出一临界值,AD9850用一种算法逻辑把累加器输出值转换为接近正弦的量化值,这种算法逻辑实际上就是由高度 集成化的存储器查表技术和数字信号处理(DSP)技术来完成的。随后AD9850将量化值送内部的D/A转换器输出正弦波形,若再辅以外部电路(低通滤 波)送内部比较器,即可输出标准的方波信号。

主机借助于程序可以启动D/A转换器中任一通道进行转换工作。当有一条通道被启动时,开始将采样 输入的数字量转换为模拟量,转换完成后,向单片机请求中断。D/A转换器选用TLC7528,按照用户的要求来改变正弦信号的幅值,最终输出用户要求的波 形,提供给下位机。其D/A电路设计框图如图2所示。

4 软件设计

主程序用于完成键盘功能的识别,输出频率的显示以及对AD9850实现各种功能的控制。其设计流程图如图3所示。

对AD9850进行初始化控制时,主复位脚必须置高电平在10个系统周期以 上,主复位的作用是初始化系统总线,置控制寄存器以缺省值。程序设计中要注意AD9850的时序要求,正确送出逻辑控制字,注意其刷新时钟。通过写端口写 入AD9850的控制字暂时寄存在I/O缓冲寄存器中,需要一个从低到高的时钟信号从外部输入,或者由内部32 b的刷新时钟把I/O缓冲寄存器中的控制字传送到DDS的内核。

经调试正确的主程序如下:

5 结 语

应用AT89C51与可编程逻辑控制器件相结合控制AD9850产生频率、幅值均可变化的正弦波信号。该正弦标校信号源稳定方便,可用于许多实时控制系统中,还可以通过高速比较器将该正弦波信号转换成方波,作为时钟信号输出。

// 1、程序运行后,接在P1 口的8个发光二极管依次点亮0,1,2,3,4,5,6,7,每次只点亮一个;如此反复循环。

//2、按钮开关模拟故障。按下按钮开关表明产生故障,发光二极管开始闪烁,同时LED显示器显示stop;再次按下按

//钮开关,故障排除,发光二极管继续变化,LED显示器不再显示。

ORG    0000H

   AJMP   MAIN0

   ORG    0003H  //外部中断0地址

   LJMP   EXISVR  //调中断子程序

   ORG   0100H  //主程序地址

MAIN0: MOV  SP, #5FH  //   中断初始化

     MOV  DPTR,#STOP  //指针      

      SETB  IT0  // IT0外部中断0启动

      SETB  EX0  // 表示允许外部中断0申请中断。

      SETB  EA  //  启动总中断

      SETB  F0 // 设置标志F0=1

MOV R1,#0FFH //赋值

MOV R3,#0FEH //赋值

LOOP0:  JNB  F0,GZH //   ;判断标志F0不为0跳转到GZH子程序

LOOP1: MOV  A, R3    //  ;LED灯轮流点亮,实现跑马灯

MOV  P1,A  //P1口低电平输出

     LCALL  DELAY  //读取长延时子程序

      RL  A   //右移一位

MOV R3,A   //赋值

     SJMP  LOOP0   //跳转循环LOOP0

GZH:   MOV A,R1     //    GZH子程序

   MOV P1,A   //P1口低电平输出

      CALL  DELAY //读取长延时子程序

      CPL  A //信号 取反

   MOV R1,A //赋值

   ACALL MAIN1 //读取程序MAIN1

   ACALL DISP //读取程序 DISP

      SJMP  LOOP0 //跳转循环

MAIN1: //程序MAIN1

MOV  R0,#7fH  //       ;置显示缓冲区

     MOV  A,#0  //

     MOV R2,#8

WRITE:MOV  @R0,A

     DEC  R0

     INC  A

     DJNZ  R2,WRITE

  RET

DISP:PUSH ACC

   MOV  R5,#0FEH

   MOV  R0,#78H

LD0: //数码管显示程序开始

MOV  P2,R5

MOV  A,@R0

MOVC  A,@A+DPTR

MOV  P0,A

ACALL  DELAY1

INC  R0

MOV  A,R5

JNB  ACC7,LD1

RL  A

MOV  R5,A

AJMP  LD0

LD1:POP ACC

  RET   //数码管显示程序返回

STOP:  

DB 0FFH,0FFH,0FFH,0FFH,92H,0F8H,0C0H,8CH //数码管段码

EXISVR:CPL  F0 //中断子程序 开始

      RETI //中断子程序 返回

;子程序名:DELAY

;功能:延时 500ms

    ;入口参数:无

    ;出口参数:无

    ;占用资源:R4,R6,R7

DELAY:MOV  R4,#5  //长延时子程序  开始

REPT1:MOV  R6,#100

REPT2:MOV  R7,#200

REPT3:NOP

    NOP

    NOP

DJNZ  R7, REPT3

DJNZ  R6, REPT2

DJNZ  R4, REPT1

RET   //长延时子程序  返回

DELAY1:MOV  R7,#02H  //延时子程序1 开始

 DL1:MOV  R6,#0FFH

 DL2:DJNZ R6,DL2

     DJNZ R7,DL1

  RET // 延时子程序1返回

END

以上就是关于什么是子程序, 什么是宏程序,全部的内容,包括:什么是子程序, 什么是宏程序,、用AD9850做正弦波发生器,电路怎么连接,哪个口输出波形、求助计算机大神!!!帮忙把下面编程的每步作用写一下,顺便帮忙画一个电路图。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9751412.html

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

发表评论

登录后才能评论

评论列表(0条)

保存