串口通信的單片機(jī)程序
beepbitp3.7;蜂鳴器定義
org00h
jmpmain
org23h;串行中斷入口地址
jmpcom_int;串行中斷服務(wù)程序
;***********主程序開始*******************
org30h
main:movsp,#30h;設(shè)置堆棧
lcallrest;初始化
lcallcomm;串口初始化
jmp$;原地等待
;*************初始化*********************
rest:movp0,#00h;禁止數(shù)碼管顯示
movp2,#255
clrbeep;禁止蜂鳴器
movp1,#255;禁止LED顯示
RET;返回
;**************串口初始化*****************
;設(shè)置串行口工作方式1,定時器1作為波特率發(fā)生器
;波特率設(shè)置為2400;
comm:movtmod,#20h;設(shè)置定時器T1工作方式2
movtl1,#0f3h;定時器計數(shù)初值,波特率2400
movth1,#0f3h;定時器重裝值
setbea;允許總的中斷
setbes;允許串行中斷
movpcon,#00h;波特率不倍增
movscon,#50h;設(shè)置串口工作方式1,REN=1允許接收
setbtr1;定時器開始工作
ret;返回
;***************串口中斷服務(wù)程序***********
;如果接收0FF表示上位機(jī)需要聯(lián)機(jī)信號,單片機(jī)發(fā)送0FFH作為
;應(yīng)答信號,如果接收到數(shù)字1~n,表示相應(yīng)的功能;
;這里,如果收到1,則單片機(jī)向計算機(jī)發(fā)送字符'H';
;如果收到2,則單片機(jī)向計算機(jī)發(fā)送字符'e';
;如果收到其他的數(shù)據(jù),則發(fā)送'J';
com_int:clres;禁止串行中斷
clrri;清除接收標(biāo)志位
mova,sbuf;從緩沖區(qū)取出數(shù)據(jù)
movp1,a
movdptr,#tab
cjnea,#0ffh,in_1;檢查數(shù)據(jù)
movsbuf,#255;收到聯(lián)機(jī)信號,發(fā)送聯(lián)機(jī)信號
jnbti,$;等待發(fā)送完畢
clrti;清除發(fā)送標(biāo)志
setbes;允許串行中斷
reti;中斷返回
in_1:cjnea,#1H,in_2;如果收到1
movca,@a+dptr
movsbuf,a;發(fā)送'h'
jnbti,$;等待發(fā)送完畢
clrti;清除發(fā)送中斷標(biāo)志
setbes;允許串行中斷
reti;中斷返回
in_2:cjnea,#2,in_3;接收到2
movca,@a+dptr
movsbuf,a;發(fā)送'e'
jnbti,$;等待發(fā)送完畢
clrti;清除發(fā)送中斷
setbes;允許串行中斷
reti;中斷返回
in_3:mova,#03h
movca,@a+dptr
movsbuf,a;發(fā)送'j'
jnbti,$;等待發(fā)送完畢
clrti;清除發(fā)送中斷標(biāo)志
setbes;允許串行中斷
reti;返回
tab:db'2','h','e','j'
end
評論