📄 mnetasm.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 + -