基本信息
源码名称:单片机pwm输出传统防盗器声音
源码大小:0.16M
文件格式:.rar
开发语言:C/C++
更新时间:2019-12-30
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 10 元 
   源码介绍


//Project: laba.prj
// Device: MS83Fxx02
// Memory: Flash 2KX14b, EEPROM 256X8b, SRAM 128X8b
// Author: 
//Company: 
//Version:
//   Date: 
//===========================================================
#INCLUDE  <MS81Fxx02.INC>;
#INCLUDE  "SYSlib.INC"
;===========================================================
;RAM DEFINE
	W_TMP		EQU		0x70
	S_TMP		EQU		0x71
;===========================================================
	ORG			0x000			; 单片机复位向量入口
	LJUMP		MAIN			; 跳转到主程序入口
	ORG			0x004			; 中断复位向量入口
	STR			W_TMP			; 保存W寄存器
	SWAPR		STATUS,W		; 保存STATUS寄存器
	STR			S_TMP
	LJUMP		INT_PROGRAM
;-----------------------------------------------------------
MAIN:
	;主程序
    Lcall   Initialize
	BCR 	INTCON,T0IE
MainLoop: 
    lcall Start_pwm1
    LJUMP MainLoop
	
;-----------------------------------------------------------
Start_pwm1:
    ldwi    489/0x100%0x100 1
    str     PWM_loop_count_H
    ldwi    489%0x100
    str     PWM_loop_count_L
    BSR     PORTA,PA7
    BCR     PORTA,PA2
    ldwi    520/0x100%0x100
    str     us_LH_32bit
    ldwi    520%0x100
    str     us_LL_32bit
    lcall   Delay_us ;延时520us
    BcR     PORTA,PA7
    BsR     PORTA,PA2
    ldwi    297/0x100%0x100
    str     us_LH_32bit
    ldwi    297%0x100
    str     us_LL_32bit
    lcall   Delay_us ;延时520us
    
    decrsz  PWM_loop_count_L,R 
    ljump   Start_pwm1 4
    decrsz  PWM_loop_count_H,R
    ljump   Start_pwm1 4
    
    BCR     PORTA,PA7
    BCR     PORTA,PA2
    
    ldwi    386000/0x10000%0x100
    str     us_HL_32bit
    ldwi    386000/0x100%0x100
    str     us_LH_32bit
    ldwi    386000%0x100
    str     us_LL_32bit
    lcall   Delay_us ;延时520us

	ret
;-----------------------------------------------------------

Initialize:
    
    LDWI 	OSCCON_16MHz 
    BSR 	STATUS,PAGE	
    STR     OSCCON//因为配置位选为2T的指令周期,所以一条指令运行时间=(1/16MHz)*2=0.125us
    
	CLRR 	INTCON //INTCON = 0b00000000;//中断初始化
    
    LDWI 	b'00000001' 	//PSA=0;PS0=1;		
	STR 	OPTION 	//PSA=0预分频给定时器0,预分频1:4
    	
    CLRR 	TMR0 //TMR0 = 0;	
    
	BCR     TRISA,PA7 //PA0为输出模式
	BCR     TRISA,PA2 //PA1为输出模式

    BCR 	STATUS,PAGE
    ldwi    20H ;清20H-6FH缓存
    str     BUF7EH
    ldwi    70H
    str     BUF7FH
    lcall   clearbuf  
    ;BSR 	INTCON,T0IE //T0IE = 1;//开启定时器0中断
    BSR 	INTCON,GIE // GIE = 1;//开启总中断 
    ldwi    b'00000111'
    str     CMCON0
	BCR     PORTA,PA7
    BCR     PORTA,PA2

    RET 
;-----------------------------------------------------------
clearbuf://清缓存
	LDR     BUF7EH,W    
    STR     FSR//BUF7EH内容->FSR,也就是要清除的首地址
    CLRR 	INDF//清FSR地址的内容
    INCR	FSR,R//FSR 1->FSR
    LDR     BUF7FH,W//从BUF7EH内容到BUF7FH内容
    XORWR   FSR,W//FSR是否等于7FH
    BTSS    STATUS,Z//if(FSR! =BUF7FH内容)
    LJUMP   clearbuf 2
    RET
;-----------------------------------------------------------             
Delay_us:
	;延时函数  每次循环执行8个机器周期=8*0.125us=1us
    incr   us_HH_32bit,R
    incr   us_HL_32bit,R
    incr   us_LH_32bit,R
    nop
    nop
    nop
    nop
    nop
    decrsz  us_LL_32bit,R ;1个周期 先减1,再判断是否大于0
    LJUMP   $-6 ;2个周期 if(DelayusL>0)
    decrsz  us_LH_32bit,R
    LJUMP   $-8
    decrsz  us_HL_32bit,R
    LJUMP   $-10
	decrsz  us_HH_32bit,R
    LJUMP   $-12
	ret
;-----------------------------------------------------------
INT_PROGRAM:
	;中断处理程序
;----------------------中断复位-----------------------------
  interrupt_end:  
	SWAPR		S_TMP,0
	STR			STATUS			; 恢复STATUS寄存器
	SWAPR		W_TMP,1
	SWAPR		W_TMP,0			; 恢复W寄存器
	RETI						; 中断返回
;-----------------------------------------------------------
	END							; 汇编程序结束