串口通信的单片机程序
beepbitp3.7;蜂鸣器定义
org00h
jmpmain
org23h;串行中断入口地址
jmpcom_int;串行中断服务程序
;***********主程序开始*******************
org30h
main:movsp,#30h;设置堆栈
lcallrest;初始化
lcallcomm;串口初始化
jmp$;原地等待
;*************初始化*********************
rest:movp0,#00h;禁止数码管显示
movp2,#255
clrbeep;禁止蜂鸣器
movp1,#255;禁止LED显示
RET;返回
;**************串口初始化*****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为2400;
comm:movtmod,#20h;设置定时器T1工作方式2
movtl1,#0f3h;定时器计数初值,波特率2400
movth1,#0f3h;定时器重装值
setbea;允许总的中断
setbes;允许串行中断
movpcon,#00h;波特率不倍增
movscon,#50h;设置串口工作方式1,REN=1允许接收
setbtr1;定时器开始工作
ret;返回
;***************串口中断服务程序***********
;如果接收0FF表示上位机需要联机信号,单片机发送0FFH作为
;应答信号,如果接收到数字1~n,表示相应的功能;
;这里,如果收到1,则单片机向计算机发送字符'H';
;如果收到2,则单片机向计算机发送字符'e';
;如果收到其他的数据,则发送'J';
com_int:clres;禁止串行中断
clrri;清除接收标志位
mova,sbuf;从缓冲区取出数据
movp1,a
movdptr,#tab
cjnea,#0ffh,in_1;检查数据
movsbuf,#255;收到联机信号,发送联机信号
jnbti,$;等待发送完毕
clrti;清除发送标志
setbes;允许串行中断
reti;中断返回
in_1:cjnea,#1H,in_2;如果收到1
movca,@a+dptr
movsbuf,a;发送'h'
jnbti,$;等待发送完毕
clrti;清除发送中断标志
setbes;允许串行中断
reti;中断返回
in_2:cjnea,#2,in_3;接收到2
movca,@a+dptr
movsbuf,a;发送'e'
jnbti,$;等待发送完毕
clrti;清除发送中断
setbes;允许串行中断
reti;中断返回
in_3:mova,#03h
movca,@a+dptr
movsbuf,a;发送'j'
jnbti,$;等待发送完毕
clrti;清除发送中断标志
setbes;允许串行中断
reti;返回
tab:db'2','h','e','j'
end
- 基于嵌入式WinCE与MSP430单片机多串口通信设计(07-10)
- 皮肤流电响应监护系统与PC串口通信的设计(08-29)
- 基于Lua脚本语言的嵌入式UART通信的实现(04-05)
- 串口通信-传输速率与传输距离(12-15)
- 串口通信基本原理及接线方法(12-13)
- RS232串口通信协议怎么写?(12-13)