基于51单片机汇编程序波形发生器实训报告

  • 格式:wps
  • 大小:137.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实训报告

(波形发生器)

一、设计方案

(1)、硬件基本设计思路

本设计方案采用8051单片机和DAC0832将数字信号转化成模拟信号,并通过LM324运算放大器将信号进行处理,最终得到各种波形。其中,波形的切换采用矩阵键盘通过外部中断0来实现。

(2)、软件基本设计思路

首先,将基本波形通过程序进行编写,并调试成功;其次,再编写

按键扫描子程序;最后,将按键程序放入中断中,并进行整体调试,直到调通为止。

(3)、程序说明

二、原理图

波形发生器原理图三、程序

JUCHI E QU 50H

SANJI EQU 51H

FANGB EQU 52H

TIXIN EQU 53H

KU EQU 55H

ORG 0000H ;程序入口

AJMP MAIN ;指向主程序

ORG 0003H ;主程序入口地址

AJMP INTT0 ;指向按键中断程序

ORG 0030H ;中断程序入口地址

MAIN: ;主程序

MOV P2,#00H ;将P2口初始化为0

SETB EA ;开总中断

SETB EX0 ;开启外部中断0

SETB IT0 ;将外部中断0设置为下降沿有效

MOV DPTR,#00FFH ;设置输入寄存器地址

MOV JUCHI,#00H ;初始化

MOV SANJI,#00H

MOV FANGB,#00H

;***************************************************

START:

MOV A,KU ;将键码送累加器A

CJNE A,#00H,W1 ;将累加器A和00H比较,如果相等,则00键按下顺序执行,否则跳到W1再判断01键是否按下

MOV SANJI,#00H ;屏蔽其他波形

MOV FANGB,#00H

MOV TIXIN,#00H

AJMP JCB ;跳转到锯齿波形

W1: CJNE A,#01H,W2 ;判断01键是否按下

MOV JUCHI,#00H ;屏蔽其他波形

MOV FANGB,#00H

MOV TIXIN,#00H

AJMP SJB ;跳转到三角波形

W2: CJNE A,#02H,W3 ;判断02键是否按下

MOV TIXIN,#00H

MOV JUCHI,#00H ;屏蔽其他波形

MOV SANJI,#00H

AJMP FB ;跳转到方波

W3: CJNE A,#03H,W4 ;判断03键是否按下,没有按下,跳转回去继续循环扫描

MOV JUCHI,#00H ;屏蔽其他波形

MOV FANGB,#00H

AJMP TXB ;跳转到梯形波

W4: AJMP START

;**********************************************

INTT0: ;中断程序

;***********键盘扫描子程序KEY*****************

KEY: ACALL KS ;调按键查询子程序,判断是否有键按下JNZ K1 ;有键按下,转移 WEI1跳转

ACALL DELAY ;无键按下,调延时程序去抖

AJMP K4 ;继续查询按键

;***********键盘逐列扫描程序***********************************

K1: ACALL DELAY

ACALL KS ;再次判别是否有键按下

JNZ K2 ;有键按下,转移

AJMP K4

K2: MOV R3,#0FEH ;首列扫描字送R3

MOV R4,#00H ;首列号送R4

K3: MOV A,R3

MOV P2,A ;列扫描字送P2口

MOV P1,#0FFH ;初始化P1口

MOV A,P1 ;读取行扫描值

JB ACC.0,L1 ;第零行无键按下转查第一行为1跳转

MOV A,#00H ;第零行有键按下,行首键号送A

AJMP LK ;转求键号

L1: JB ACC.1,NEXT ;第一行无键按下,转查下一列MOV A,#03H

AJMP LK ;键扫描结束,返回

;************************************************************

NEXT:

INC R4 ;修改列号

MOV A,R3

JNB ACC.2,KEY ;三列扫描完返回按键查询状态

RL A ;未扫描完,改为下列扫描字

MOV R3,A ;扫描字暂存R3

AJMP K3 ;转列扫描程序

LK: ADD A,R4 ;形成键码送A

MOV KU,A

PUSH ACC ;键码入栈保护

;**********************************************

K4:

ACALL KS ;等待键释放

JNZ K4

POP ACC ;键释放,弹栈送A

RETI ;中断返回

;**********按键查询子程序**************************************

KS: ;MOV A,#00H

MOV P2,#00H ;全扫描字送p2口

MOV P1,#0FFH

MOV A,P1 ;读入P1口状态

CPL A ;变正逻辑,高电平表示有键按下

ANL A,#0FH ;屏蔽高四位

RET ;子程序返回

;****************锯齿波***********************

JCB:

MOV A,JUCHI ;转换初值

WW: MOVX @DPTR,A ;D/A转换

INC A ;A自加1

NOP ;延时

CJNE A,#255,WW ;判断A是否加到255,若没有返回到WW继续加MOV JUCHI,A

AJMP START

;******************三角波********************

SJB:

MOV A,SANJI ;转换初值

EE: MOVX @DPTR,A ;D/A转换