基于单片机的函数信号发生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
源程序:
ORG 0000H
AJM MAIN
ORG 000BH
LJMP TC0
ORG 0030H
MAIN:MOV DPTR,#9FFFH 指向DAC0832(1)
MOV A,70H
MOVX @DPTR,A DAC0832(1)输出
MOV DPTR,#7F00H 指向8155命令字端口地址
MOV A,#06H 设置A口为输入,B口、C口为输出MOVX @DPTR,A 送命令字
MOV DPTR,#7F01H 指向A口地址
MOVX A,@DPTR 读入A口的开关数据
JNB ACC.4,K10H 判断是否“4”号键,若是则转输出10Hz信号JNB ACC.5,K100H 判断是否“5”号键,若是则转输出100Hz信号JNB ACC.6,K500H 判断是否“6”号键,若是则转输出500Hz信号JNB ACC.7,K1K 判断是否“7”号键,若是则转输出1KHz信号AJMP MAIN
LED1:MOV R3,#06H 设置6个LED显示
MOV R2,#01H 选通第一位LED数据
MOV R1,#30H 送显示缓冲区首址
GN1:MOV DPTR,#7F03H 指向C口地址
MOV A,R2 位选通数据送A
MOVX @DPTR,A 位选通数据送C口
RL A 选通下一位
MOV R2,A 位选通数据送R2中保存
MOV A,@R1 取键值
MOV DPTR,#TAB 送LED显示软件译码表首址
MOVC A,@A+DPTR 查表求出键值显示的段码
MOV DPTR,#7F02H 指向B口地址
MOV @DPTR,A 段码送显示
LCALL LOOP1 调延时子程序
INC R1 指向下一位显示缓冲区地址DJNZ R3,GN1 循环显示6个LED
RET
LOOP1:MOV R4,#08H 延时子程序
LOOP:MOV R5,#0A0H
DJNZ R5,$
DJNZ R4,LOOP
RET
K10H:MOV 30H,#00H 显示10Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
MOV 34H,#01H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#15H
MOV TH0,#9EH
AJMP PD
K100H:MOV 30H,#00H 显示100Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#01H
MOV 34H,#00H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#08H
MOV TH0,#0F6H
AJMP PD
K500H:MOV 30H,#00H 显示500Hz
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#05H
MOV 34H,#00H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#01H
MOV TH0,#0FEH
AJMP PD
K1K:MOV 30H,#00H 显示1KHz
MOV 31H,#00H
MOV 32H,#01H
MOV 33H,#00H
MOV 34H,#00H
MOV 35H,#00H
LCALL LED1 调显示子程序
MOV TMOD,#00H
MOV TL0,#01H
MOV TH0,#0FFH
PD:JNB ACC.0,KE0 判断是否“0”号键按下,若是则转方波输出JNB ACC.1,KE1 判断是否“1”号键按下,若是则转正弦方波输出JNB ACC.2,KE2 判断是否“2”号键按下,若是则转三角波输出JNB ACC.3,KE3 判断是否“3”号键按下,若是则转锯齿波输出LJMP PD
KE0:MOV R7,#00H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE1:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE2:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
AJMP GN
KE3:MOV R7,#02H
LCALL LED1 调显示子程序
MOV R6,#00H
GN:SETB TR0
SETB ET0
SETB EA
LOP1:JNB ACC.4,K10H 判断是否“4”号键,若是则转输出10Hz信号JNB ACC.5,K100H 判断是否“5”号键,若是则转输出100Hz信号JNB ACC.6,K500H 判断是否“6”号键,若是则转输出500Hz信号JNB ACC.7,K1K 判断是否“7”号键,若是则转输出1KHz信号AJMP LOP1
TC0:CJNE R7,#00H,TC1 发送方波程序
MOV DPTR,#TAB1 送方波数据表首址
MOV A,R6 发送数据寄存器
MOVC A,@A+DPTR
MOV DPTR,#0AFFFH 指向DAC0832(2)
MOVX @DPTR,A DAC0832(2)输出
MOV A,R6
INC A