AJMP MAIN上电,转向主程序
ORG 0023H串行口的中断入口地址
AJMP SERVE 转向中断服务程序
ORG 0040H主程序
MAIN: MOV SP,#60H 设置堆亩凳陆栈指针
MOV SCON ,#50H
MOV PCON ,#00H
MOV TMOD,#20H
MOV TH1,#0F3H
MOV TL1,#0F3H
SETB TR1
MOV R0 ,#20H 置发送数据区首地址
MOV R1 ,#40H ;置接收数据区首地址
MOV R7 ,#10H ;置发送字节长度
MOV R6 ,#10H ;置接收字节长度
SETB ES允许串行口中断
SETB EACPU允许中断
MOV A ,@R0 ;粗裂取第一个数据发送
MOV SBUF ,A发送第一个数据
SJMP $ ;等待中断
SERVE: JNB RI ,SEND TI=1,为发送中断
CLR RI
MOV A ,SBUF 读出接收缓冲区内容
MOV @R1 ,A读入接收缓冲区
DJNZ R6 ,L1 判断数据块发送完否
SJMP L2数据块接收完,转L2
L1:INC R1修改数据区指针
L2:RETI中断返回
SEND:
CLR TI清除发送中断标志
DJNZ R7 ,L3 判断数据块发送完否
SJMP L4数据块迅顷接收完,转L4
L3: MOV A ,@R0取数据发送
MOV SBUF ,A发送数据
INC R0修改数据地址
L4:
RETI中断返回
END
void init1(void){
TMOD=0x20
TH1=0xfd
TL1=0xfd
SCON=0x40
TR1=1
}
void init2(void)
{
TMOD=0x20
TH1=0xfd
TL1=0xfd
SCON=0x50
TR1=1
ES=1
EA=1
}
初始化程序:SCON = 0x50 //方式1,允许接陆尘受
TMOD = 0x20 //设闹仿置time1,方式2
TH1 = 0xfd//波特率9600b/s晶振12MHz
TL1 = 0xfd
ES = 1 //允许串口液悉纤中断
EA = 1 //中断总开启
TR1 = 1 //T1开启
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)