单片机- 一个频率发生器得问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 00:34:39
今天做这个试验,自己编得程序,但是只能产生一种频率得信号,不知为何,想了一天了:
用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。
START:JB P1.7,START
ONEK:MOV R5,100
SETB P1.0
LCALL DELAY1K
CLR P1.0
LCALL DELAY1K
DJNZ R5,ONEK
WUBAI:MOV R6,100
SETB P1.0
LCALL DELAY500
CLR P1.0
LCALL DELAY500
DJNZ R6,WUBAI
LJMP START
DELAY1K:MOV R1,#25
L1: MOV R2,#10
DJNZ R2,$
DJNZ R1,L1
RET
DELAY500:MOV R3,#50
L2:MOV R4,#10
DJNZ R4,$
DJNZ R3,L2
RET
END

你这里我不知道你P1.0的置1清0是什么含义?
如果按照你的程序来理解,那么P1.0是1时,输出1KHz的信号,然后延时100ms;P1.0是0时,输出500Hz的信号,然后延时200ms;那么这样的话,你的P1.0在这里只是一个开关性质的控制器,并且肯定有外围设备连接在P1.0上(如蜂鸣器),也就是说当它是1时,这个设备会发出1KHz的信号;当P1.0是0时,输出500Hz的信号。那么这样的话, 你的问题就可能是两种情况,一是你的这个外围设备电路有问题(硬件上的问题);二是你没有理解这个外围设备电路的控制(就是说它不是P1.0置1清0就可以发出要求的信号的)。
如果按照你的题目来理解,那么你这里P1.0也有可能本身就是信号的输出,也就是没有外围设备,而是用I/0口P1.0来输出信号。那么这样的话,就是你的程序编写有问题了。应该两个情况,一种是P1.0置一次1,然后延时100ms,然后P1.0取反,然后一直这样循环;另一种是P1.0置一次1,然后延时200ms,然后P1.0取反,然后一直这样循环。