|
楼主 |
发表于 2010-7-6 16:32:13
|
显示全部楼层
org 00h
nop
nop
jmp main
org 23h ;串行中断入口地址
nop
nop
jmp Check ;串行中断服务程序
;*********** 主程序开始 *******************
org 30h
main: MOV sp,#30h ;设置堆栈
MOV R0,#100H ;设置数据储存地址
lcall comm ;串口初始化
sjmp $ ;原地等待
; ************** 串口初始化 *****************
;设置串行口工作方式1,定时器1作为波特率发生器
;波特率设置为 4800 ;
comm: MOV TMOD,#20h ;设置定时器T1工作方式2
MOV TL1,#0fah ;定时器计数初值,波特率 4800
MOV TH1,#0fah ;定时器重装值
SETB TR1 ;定时器开始工作
MOV scon,#50h ;设置串口工作方式1,REN = 1 允许接收
MOV IE ,#90h ;允许串行中断
RET ;返回
;*************** 串口中断服务程序 ***********
Check:JNB RI,$ ;等待串口中断标志
CLR RI ;清除接收中断标志
MOV A,SBUF ;读串口数据
CJNE A,#24H, Check ;若非“$”,重新接收
NOP
NOP
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#47H, Check ;若非“G”,重新接收
NOP
NOP
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#50H, Check ;若非“P”,重新接收
NOP
NOP
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#47H,Check ;若非“G”,重新接收
NOP
NOP
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#47H,Check ;若非“G”,重新接收
NOP
NOP
JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#41H,Check ;若非“A”,重新接收
NOP
NOP
Data: JNB RI,$
CLR RI
MOV A,SBUF ;接收字符
MOV @R0,A ;存储字符
INC R0
CJNE A,#0AH,Data ;若非“LF”,继续接收字符
NOP
NOP
end
我自己编的采集程序,各位看看有没有问题啊。 万分感谢了啊 |
|