串口和计算机通信,单片机串口和计算机通信_汇编语言

beep    bit   p2.2              ;蜂鸣器定义

org 00h

jmp main

org 23h                       ;串行中断入口地址

jmp com_int                     ;串行中断服务程序

;***********  主程序开始    *******************

org 30h

main:  mov sp,#30h            ;设置堆栈

lcall rest             ;初始化

lcall comm             ;串口初始化

jmp $                  ;原地等待

;  *************   初始化   *********************

rest:     ;mov p0,#00h              ;禁止数码管显示

;mov p2,#255

setb  beep                ;禁止蜂鸣器

setb  p1.4                 ;禁止LED显示

RET                      ;返回

; **************  串口初始化   *****************

;设置串行口工作方式1,定时器1作为波特率发生器

;波特率设置为   2400  ;

comm:         mov tmod,#20h          ;设置定时器T1工作方式2

mov tl1,#0f4h          ;定时器计数初值,波特率 2400

mov th1,#0f4h          ;定时器重装值

setb ea                ;允许总的中断

setb es                ;允许串行中断

mov pcon,#00h          ;波特率不倍增

mov scon,#50h          ;设置串口工作方式1,REN = 1 允许接收

setb tr1               ;定时器开始工作

ret                    ;返回

;***************  串口中断服务程序   ***********

;  如果接收  0FF  表示上位机需要联机信号,单片机发送 0FFH作为

;  应答信号,如果接收到 数字 1~ n,表示相应的功能;

;  这里,如果收到 1 ,则单片机向计算机发送字符  'H';

;  如果收到 2 ,则单片机向计算机发送字符  'e';

;  如果收到其他的数据,则发送    'J';

com_int:  clr es                        ;禁止串行中断

clr ri                  ;清除接收标志位

mov a,sbuf              ;从缓冲区取出数据

mov p1,a

mov dptr,#tab

cjne a,#0ffh,in_1       ;检查数据

mov sbuf,#255           ;收到联机信号,发送联机信号

jnb ti,$                ;等待发送完毕

clr ti                  ;清除发送标志

setb es                 ;允许串行中断

reti                    ;中断返回

in_1: cjne a,#1H, in_2            ;如果收到1

movc a,@a+dptr

mov sbuf,a              ;发送 'h'

jnb ti,$                ;等待发送完毕

clr  ti                 ;清除发送中断标志

setb es                 ;允许串行中断

reti                    ;中断返回

in_2: cjne a,#2,in_3              ;接收到  2

movc a,@a+dptr

mov sbuf,a              ;发送 'e'

jnb ti,$                ;等待发送完毕

clr  ti                 ;清除发送中断

setb es                 ;允许串行中断

reti                    ;中断返回

in_3:     mov a,#03h

movc a,@a+dptr

mov sbuf,a              ;发送 'j'

jnb ti,$                ;等待发送完毕

clr ti                  ;清除发送中断标志

setb es                 ;允许串行中断

reti                    ;返回

tab:    db '2','h','e','j'

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值