网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 设计资源 > 单片机 > 正文
实战七《用ST套件产生防盗器报警声》
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 10/06/19
;ST套件产生汽车防盗器报警声
;本实例的目的是让大家学会用单片机产生声音的方法,学会计算程序所用时间
;本实例的功能是能PIC16F84产生汽车防盗器的报警声,频率分两个0.1s第一个
;0.1S频率从1.8K-3.5K匀速增加第二个0.1S频率从3.5K-1.8K匀速减少,
;程序复位后,按S2喇叭叫两声,按S3喇叭叫15秒,中途可按S5停止.
 ;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择;
;*****************************************************
  LIST P=16F84A,R=DEC         ;定义器件,默认为十进制
;-----------------------------------------------------
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC 
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;-----------------------------------------------------
RTCC EQU 01H                ;定义各寄存器
PC EQU 02H
STATUS EQU 03H
C EQU 0
RP0 EQU 5
;----------------------
PORTA EQU 05H
PORTB EQU 06H

TRISA EQU 5H
TRISB EQU 6H
;-----------------------
SOUNDDELAY1 EQU 10H    ;声音频率变化计数器,从1.8~3.55KHZ
FRE_COUNT EQU 11H      ;同一频率的重复次数保存地址
FRE_REPEAT EQU 12H     
SOUND_TEMP EQU 13H
TEMP EQU 14H           ;暂存寄存器
S_LOOP EQU 46          ;93-47=46
S_MAX EQU 93           ;最低频率1.8K  93*3=280US*2
S_MIN EQU 47           ;最高频率3.55K  47*3=140*2
S_REPEAT EQU 4         ;同一频率重复次数
;----------------------RA
KEY1 EQU 3
KEY2 EQU 4
;----------------------RB
KEY3 EQU 0
KEY4 EQU 1
;--------------------
    ORG 0000H
MAIN
    CLRF PORTA
    CLRF PORTB          ;初始化IO口

    BSF STATUS,RP0     ;设置数据寄存器体1
    MOVLW 0011000B
    MOVWF TRISA        ;设置各开关端口为输入其它为输出
    MOVLW 00000011B
    MOVWF TRISB 
    BCF STATUS,RP0     ;恢复数据寄存器体0
LOOP
    BTFSS PORTA,KEY1   ;扫描按键
    GOTO SET_1
    BTFSS PORTA,KEY2
    GOTO SET_2
    GOTO LOOP
;--------------------------------------------
SET_1
    BTFSC PORTA,KEY1    ;去抖动
    GOTO LOOP
    CALL SOUNDDELAY
    BTFSC PORTA,KEY1    ;按S2叫两声
    GOTO LOOP
    CALL SOUND200MS
    CALL SOUND200MS
    GOTO LOOP
;--------------------------------------------
SET_2
    BTFSC PORTA,KEY2    ;去抖动
    GOTO LOOP
    CALL SOUNDDELAY
    BTFSC PORTA,KEY2    ;按S3叫15秒
    GOTO LOOP
    CALL SOUND15S
    GOTO LOOP 
;- - ----------------------------------------
SOUND200MS
    MOVLW S_LOOP
    MOVWF FRE_COUNT     ;46=93-47
SOUND_LH_LP
    MOVLW S_REPEAT      ;同一频率重复次数送FRE_REPEAT
    MOVWF FRE_REPEAT
    MOVFW FRE_COUNT
    ADDLW S_MIN        ;计数值加最小值
    MOVWF TEMP
REPEAT0_LP
    MOVFW TEMP
    BSF PORTA,0       
    CALL SOUNDDELAY0   ;廷时W*3US
    BCF PORTA,0
    MOVFW TEMP
    CALL SOUNDDELAY0
    DECFSZ FRE_REPEAT,1 ;每四次减频率计数一次
    GOTO REPEAT0_LP
    DECFSZ FRE_COUNT,1
    GOTO SOUND_LH_LP
SOUND_HL
    MOVLW S_LOOP
    MOVWF FRE_COUNT   ;46=93-47
SOUND_HL_LP
    MOVLW S_REPEAT    ;同一频率重复次数送FRE_REPEAT
    MOVWF FRE_REPEAT
    MOVFW FRE_COUNT
    SUBLW S_MAX       ;最大值减计数值
    MOVWF TEMP
REPEAT1_LP
    MOVFW TEMP
    BSF PORTA,0
    CALL SOUNDDELAY0    ;廷时W*3US
    BCF PORTA,0
    MOVFW TEMP
    CALL SOUNDDELAY0
    DECFSZ FRE_REPEAT,1;四次减频率计数一次
    GOTO REPEAT1_LP
    DECFSZ FRE_COUNT,1
    GOTO SOUND_HL_LP
SOUND_END
    RETLW 0
;------------------------------
SOUNDDELAY:        ;廷时255*3US+2US
    MOVLW 255
SOUNDDELAY0
    MOVWF SOUNDDELAY1     ;廷时W*3US+1US
SOUNDDELAYUS_1
    DECFSZ SOUNDDELAY1,1
    GOTO SOUNDDELAYUS_1
    RETLW 0
;---------------------
SOUND15S                    ;报警15秒
    MOVLW 73
    MOVWF SOUND_TEMP
SOUND1S_LP
    CALL SOUND200MS
    BTFSS PORTB,KEY4       ;按S5退出
    RETLW 0
    DECFSZ SOUND_TEMP,1
    GOTO SOUND1S_LP
    RETLW 0
;------------------------
    END
 

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号