基于51单片机汇编程序波形发生器实训报告
- 格式:wps
- 大小:137.50 KB
- 文档页数:11
单片机实训报告
(波形发生器)
一、设计方案
(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转换