這篇部落格記錄下序列通訊的接收端的訊號處理**。
下面的兩段**分別為c51和組合語言,c51是為了方便理解而寫的,不保證**能工作,請讀者見諒。
#include
sbit remote = p1^1;
unsigned
char tn,remote_num;
unsigned
char code1,code2,remote_data1,remote_data2;
unsigned
char flag0;
bit f_pulse =0;
void
read_pulse()
;void
value_jud()
;void
int_init()
void
timer0
() interrupt 1 using 0
void
read_pulse()
//再對code2的第0位進行操作,
elseif(
(!remote)
&&f_pulse)}}
void
value_jud()
code2 = code2<<1;
//每次處理code2第0位之前,先將其左移一位
//code1 = code1<<1; //此處不清楚c51是否有進製位,暫時只收8位資料
if(tn >
2&& tn <9)
}else
if(tn >=
9&& tn <16)
}}void
main()
彙編的原始碼如下:
ld a,tn
hsubia d'200'
snzb status,c
szincr tn
nopsnzb remote ;remote初值為1
,snzb命令的意思為:值為1時跳過下一條指令,不為1則執行
jp decend_pluse
rise_pluse:
;上公升沿
szb f_pluse ;szb命令的意思為:值為0時跳過下一條指令
jp end_remote_receive
setb f_pluse
jp value_jud
decend_pluse:
;下降沿
snzb f_pluse
jp end_remote_receive
clrb f_pluse
value_jud:
ld a,tn
hsubia d'2'
;判斷tn是否大於2
snzb status,c
jp error_remote ;小於2跳轉到錯誤處理
ld a,tn
hsubia d'16'
;大於16也跳轉到錯誤處理
szb status,c
jp error_remote
rlcr code2 ;code2收滿8位後,再左移則code2.
7移到c中
rlcr code1 ;通過c可將code2.
7移到code1.
0中,接收到的16位資料最頭部在code1中
ld a,tn
hsubia d'9'
szb status,c
jp receive1
receive0:
clrb code2,
0 jp bit_count
receive1:
setb code2,
0bit_count:
szincr remote_num
nopld a,remote_num
hsubia d'16'
;根據需要,選擇儲存的資料位數
snzb status,c
jp end_bit_jud
ld a,code1
ld remote_data1,a ;接收完16位資料,remote_data1儲存載波前8位
ld a,code2
ld remote_data2,a ;remote_data2儲存載波後8位
setb f_remote
error_remote:
clr remote_num
clr code1
clr code2
end_bit_jud:
clr tn
end_remote_receive:
微控制器序列通訊工程心得 傳送端
這篇部落格記錄下最近乙個星期研究的兩塊板通過乙個口線實現的資料傳輸。我用的兩塊板上各有乙個微控制器,此處稱為控制板和電源板。兩微控制器各出乙個i o口,乙個輸入乙個輸出,然後通過規定此i o口高電平和低電平的持續時間來傳輸 0 和 1 這種傳輸方式非常普遍,紅外遙控基本原理與這個十分類似,不過紅外遙...
微控制器(記憶體篇) 通訊工程專業筆記
儲存器及儲存空間 特殊功能暫存器 高128位元組,sfr 擴充套件 d7d6 d5d4 d3d2 d1d0 cyac f0rs1 rs0ovf1p rs1,rs0 暫存器組選擇位,用來選擇當前的工作暫存器組。f0,f1 使用者標識位0,1 p 奇偶校驗位,如果a暫存器中1的個數字奇數時,p位置1,為...
微控制器(一)51微控制器串列埠接收 傳送通訊
這次做課設整體不太順利,因為學校的開發板真的是 一言難盡 這裡就選擇性的分享一點 方面,有據可循,不那麼玄學的問題。只要開了中斷,一點要寫中斷函式,可以是 void timer0 interrupt 4 可以是這樣,先放乙個空函式,不會有什麼玄學問題 不信,嘿嘿?你試試 這是個串列埠收發暫存器,教科...