作者FREE
;/*=============================================================================
; 通用ASK信號解碼接收程序
;
;1. 接收數(shù)據(jù)位數(shù)最多為40(5*8)位.
;2. 由定時器對time進行漸增,在TCC中斷程序中加入"INC TIME".
;3. 寬脈沖最大允許時間和最小允許時間的計算方式:
;
; 脈沖允許時間=TCC 中斷時間(us)*設(shè)定數(shù)據(jù)
;
;4. 在接收到完整的數(shù)據(jù)后建立rx_data_ok標志.
;5. 該子程序由主程序調(diào)用.
;6. 數(shù)據(jù)格式:rx_data5.7為最高位,rx_data1.0為最低位.
;7. 主程序在收到完整的數(shù)據(jù)后應(yīng)清空接收數(shù)據(jù)緩沖區(qū)后,才能調(diào)用再次接收.
;/============================================================================*/
;//mcu== emc
bit_counter == 0x10
rx_data5 == 0x11
rx_data4 == 0x12
rx_data3 == 0x12
rx_data2 == 0x12
rx_data1 == 0x12
Rx_status == 0x13
time == 0x14
port6 == 6
#define max_time_h 50 ;//寬脈沖最大允許時間 data*TCC_time
#define min_time_h 40 ;//寬脈沖最小允許時間
#define max_time_l 20 ;//窄脈沖最大允許時間
#define min_time_l 10 ;//窄脈沖最小允許時間
#define rx_bit_counter 12 ;//設(shè)定接收的位數(shù)
#define inport port6.0
#define in_bit Rx_status.0
#define time_bit Rx_status.1
#define rx_start RX_STATUS.2
#define h_time RX_STATUS.3
#define l_time RX_STATUS.4
#define rx_bit RX_STATUS.5
#define rx_data_ok RX_STATUS.6
RX()
;//程序開始
if in_bit==inport
goto RX_EXIT; ;//輸入無變化則退出
endif
in_bit=inport; ;//有變化則記錄輸入電平
if time<MIN_TIME_L ;//檢查輸入脈沖寬度,50us產(chǎn)生一次中斷
goto RX_ERROR;
endif