⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mnetasm.s

📁 一个完整的用AVR写的电话交换机程序 希望对从事安防的开发者有用
💻 S
字号:
#include <avr/io.h>
//#include <avr/signal.h>

#define cBit0RxUp	500		// n /8 us = 40us (30k)

	.section .text
	.global  SIG_INPUT_CAPTURE1		;外部函数声明

SIG_INPUT_CAPTURE1:		/// 54 Circle
       	push	r24
       	in		r24, _SFR_IO_ADDR(SREG)	; 63
       	push	r24
       	eor		r24, r24
;	TCNT1=0;
  		sts		TCNT1H, r24
  		sts		TCNT1L, r24

       	push	r25

;		if (bit_is_set(TIFR1,OCF1B))
       	sbis	_SFR_IO_ADDR(TIFR1), OCF1B	; 22
       	rjmp	lbCp0001     	; 0x1b0

;	unsigned int CaptureTime=ICR1 ;
  		lds		r24, ICR1L
  		lds		r25, ICR1H

;				if (CaptureTime>cBit0RxUp)  MNetRxFlag = _BV(MRxFErr)|_BV(MRxBitF);
       	subi	r24, lo8(cBit0RxUp) //0x41	; 65
       	sbci	r25, hi8(cBit0RxUp)// 0x01	; 1
       	brcc	lbCp0002   	; 0x1b8
;				else		MNetRxFlag = _BV(MRxBitF);	// Receiver "0"
       	ldi		r24, 0x04	; 4
       	rjmp	lbCp0003     	; 0x1ba

lbCp0001:
;			if (bit_is_set(TIFR1,OCF1A))	MNetRxFlag = _BV(MRxBitV)|_BV(MRxBitF);	// Receiver "1"
        sbis	_SFR_IO_ADDR(TIFR1), OCF1A	; 22
       	rjmp	lbCp0002      	; 0x1b8

       	ldi		r24, 0x05	; 5
       	rjmp	lbCp0003     	; 0x1ba
;				else	MNetRxFlag = _BV(MRxFErr)|_BV(MRxBitF);		// Plus to short
 lbCp0002:
       	ldi	r24, 0x06	; 6
 lbCp0003:		// MNetRxFlag = r24
  		sts		MNetRxFlag, r24

//	TIFR1 = 0b100111; // 清除该标志 ICF1 – – OCF1B OCF1A TOV1 
       	ldi		r24, _BV(ICF1)|_BV(OCF1B)|_BV(OCF1A)|_BV(TOV1)	; 39
       	out		_SFR_IO_ADDR(TIFR1), r24	; 22

       	pop	r25
       	pop	r24
       	out	 _SFR_IO_ADDR(SREG), r24	; 63       	
       	pop	r24
       	reti

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -