ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV R0,#200;200次是1秒。
MOV TMOD, #01H T0定时方式1
MOV TH0, #(65536-50000) / 256 定时50ms@12MHz
MOV TL0, #(65536-50000) MOD 256
SETB TR0 启动T0
MOV IE, #82H 开中断
MOV A,#00H
NEXT:
CJNE A,R0,NEXT;1秒结束后,关闭中断,程序原地踏步。
CLR TR0
CLR EA;关定时器,关全局中断
HERE:
SJMP HERE
T0_INT:;
MOV TL0, #(65536-50000) MOD 256
MOV TH0, #(65536-50000) / 256 定时50ms@12MHz
CPL FM;50ms的方波,蜂察差如鸣器能响了庆指,虽然声音不好听。
RETI
END
如果是桐扰蜂鸣器的话大轮则,那么加一个电平信号就可以发声了。\x0d\x0aFMQ EQU P1.0\滚棚x0d\x0aORG 0000H\x0d\x0aLJMP MAIN\x0d\x0aORG 0030H\x0d\x0aMAIN:\x0d\x0aCPL FMQ\x0d\x0aLCALL DELAY\x0d\x0aSJMP MAIN\x0d\x0aDELAY:\x0d\x0aMOV R2,#200\x0d\x0aDLY:\x0d\x0aMOV R3,#250\x0d\x0aDJNZ R3,$\x0d\x0aDJNZ R2,DLY\x0d\x0aRET\x0d\x0aEND延时时间是用指令周期和晶振频笑租率计算来的,信号是用CPL BEEP来的,对BEEP去反,高变陪嫌低,低变高,形成方波。这个时间是个人的想法,我不知道为什么这么做,如果有时间有限制的话,我会选择用定时器做
这个程序的计时是靠晶振频率计算的,用R3做循环49次可能是30ms,要看晶振频率了,然后R2循环10次就是300ms了,方波一个周期包含一个高电平,一个低电平,所以周期是1230,那芦升手半个周期就是615
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)