|
org 0000h
ajmp start
org 0023h
ljmp serial ;串行口中断入口
org 0030h
start: mov p0,#0
mov p1,#0fh
mov p2,#0
mov p3,#0ffh
mov sp,#70h ;堆栈地址
mov r0,#0feh ;Clear the ram
mov r1,#2
clr a
main_clear0: mov @r1,a
inc r1
djnz r0,main_clear0
setb es ;允许串行口中断
setb ea ;中断总允许
mov tmod,#20h ;T0@mode1&T1@mode2
;mov pcon,#80h ;波特率加倍
mov tl1,#0fdh ;2400bps @ 12MHz
mov th1,#0fdh
mov scon,#50h ;uart mode1
setb tr1 ;Start timer1
;*****************************************************
mov 60h,#4bh
mov 61h,#45h
mov 62h,#59h
mov r4,#3
mov r1,#60h
;*****************************************************
sjmp $ ;循环等待中断
;*****************************************************
;串行通讯程序
;此程序为标准MCS-51系列串行通讯口的处理程序
;此程序为中断服务程序
;*****************************************************
serial:
jb ti,writedata ;判断是哪个中断
jb ri,readdata
reti
writedata: clr ti ;发送中断处理
cjne r2,#0,writedata_0
mov sbuf,@r1
;*****************************************************
inc r1
djnz r4,jump
mov r4,#3
;*****************************************************
jump: reti
writedata_0: mov sbuf,@r0
inc r0
dec r2
reti
readdata: clr ri ;接收中断处理
mov a,serial_state
cjne a,#0,readdata_0
mov r2,sbuf
mov r3,02h ;02h相当于r2,将r2暂时
;存放在r3中
; 书p20 工作寄存器之间
; 不可直接传送指令
mov r0,#data_temp
mov serial_state,#0ffh
reti
readdata_0: mov @r0,sbuf
inc r0
dec r2
cjne r2,#0,readdata_1
mov serial_state,#0
mov r0,#data_temp
mov r2,03h ;03h相当于r3,将
;存放在r3中
;的数值调出来使用
dec r2
mov sbuf,@r0
inc r0
readdata_1: reti
数据发送正常,后面固定值也发送了
就是停不下来~~
|
|