;PIC16F877A实现音乐播放程序(《两只老虎》片段)
;功能说明:
;1.通过驱动实验板上的蜂鸣器发声,实现音乐的播放。
;2.从TABLE中取出播放音乐的音调(1、2....7)通过改变该表中的值即可实现播放不同的音乐。
;3.从TABLE_YP中取出播放音乐的音频,即该音调持续的时间。
;4.调整DELAY延时的长短即可实现音乐播放的快慢。
;本实战的目的是让大家进一步熟悉 D单片机如何驱动蜂鸣器发声。并通过改变持续发声的时间长短来实现不同频率的声音。
;硬件接法:
;1、蜂鸣器接RC6口。
;2、本程序使用实验板上的蜂鸣器发生发声,拨码开关13的第5位必须置1,其他码开关都可以关闭。
;版权所有,转载请注明出处,并不能去掉或改变文件中的说明文字。
;程序文件名“SONG.ASM"
;程序清单如下:
;***********************************
LIST P=PIC16F877,R=DEC
#INCLUDE P16F877.INC
;***********************************
Errorlevel -302,-305
__CONFIG _DEBUG_OFF&_CP_ALL&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;***********************************寄存器定义
CBLOCK 0x20
JP
YP
L1
L2
TA:2
COUNT1
COUNT2
W_STACK
ST_STACK
ENDC
;************************************
ORG 0X0000
nop ;放置一条MCD所必须的空指令
GOTO MAIN ;主程序
ORG 0x0004
BTFSC PIR1,TMR1IF ;中断子程序
GOTO T1 ;转T1处理
RETFIE
ORG 0x0010
;************************************
MAIN
CLRWDT ;喂狗
BCF STATUS,RP0
CLRF INTCON ;清除其他中断标志位
CLRF PORTC
CLRF PIR1 ;清除TMR1中断标志位
BSF STATUS,RP0
BSF PIE1,0 ;使能TMR1中断
MOVLW B'10111111' ;除RC6口输出外,其他口都设为输入
MOVWF TRISC
BCF STATUS,RP0
MOVLW 0xC0 ;开启中断总允许位GIE跟PEIE
MOVWF INTCON
REPLAY
CLRF COUNT1 ;从头开始查表(亦即从头开始唱歌