
ORG0000H
AJMP MAIN
AJMP SERVE
ORG0023H
MAIN: MOVSP,#60H ;置堆栈指针
MOVTOMD,#20H ;置T1工作于模式2
MOVTH1,#0E8H ;赋T1计数初值
MOVTL1,#0E8H ;赋T1重装值
SETB TR1 ;启动T1
MOVSCON,#50H;置串行接口工作于方式1,允许接收
ANLPCON,#7FH ;设SMOD=0
MOVR0,#20H ;置发送数据区首址
MOVR1,#40H ;置接收数据区首址
MOVR7,#10H ;置发送字节长度
MOVR6,#10H ;置接收字节长度
SETE ES ;CPU允许中断
SETE EA ;允许串行接口
MOVA,@R0 ;取第一个数据发送
MOVSBUF,A ;发送数据
LOOP: SJMP $;等待中断
SERVE: JNBR1,SEND ;不是接收中断,转发送
JNCR1, LOOP ;是接收中断,清除接收中断标志拦贺
MOVA,SBUF ;接收数据
MOV@R1,A ;将接收数据送入接收数据区
DJNZ R1,L1 ;数据简册派块未接收完,转L1
SJMP L2 ;数据块接收完,转L2
L1: INCR1 ;修改数据区指针
L2: RETI;中断返回
SEND: JNCR1, LOOP ;是发送中断,清除发送中断标志
DJNZ R1,L3 ;数据块未发送完,转L3
SJMP L4 ;数据姿拿块发送完,转L4
L3: MOVA,@R0 ;取数据发送
MOVSBUF,A ;发送数据
INCR1 ;修改数据区指针
L4: RETI;中断返回
///////////////////////////////////////////////////////////// 设计题目: 基于51单片机的串口通信
// 功能:
// 说明: 晶振用12M,
///////////////////////////////////////////////////////////
#include <reg51.h> // 12M 晶振
#define uchar unsigned char
#define uint unsigned int
//////////////纳燃纳/////////////////////////////////////////////
// Name : 串口发送函数
// In:
// Out :
// Function :
// Explain :
///////////////////////////////////////////////////////////
void send(uchar x)
{
SBUF=x// 将数据放到缓冲区,发送
while(!TI) // 等待发送完成
TI=0// 清标志位
}
/////////////////////////////洞没//////////////////////////////
// Name : 初始化函数
// In:
//段辩 Out :
// Function :
// Explain :
///////////////////////////////////////////////////////////
void init(void)
{
TMOD=0x20 // T1工作在方式2,自动重载
TH1=0xe6
TL1=0xe6 // 设置波特率为1200
SM0=0
SM1=1 // 串口方式1
TR1=1 // 打开定时器1
}
///////////////////////////////////////////////////////////
// Name : 主函数
// In :
// Out :
// Function :
// Explain :
///////////////////////////////////////////////////////////
void main(void)
{
uchar i
init() // 初始化
while(1)
{
for(i=0i<10i++)
{ send(i)}
}
}
(1)、用间接寻址方式,把外部20H内容送到内部RAM的20H单元。(2)、依据第四题接线图,写出启动0809第3通道A/D转换的程序段。
(3)、编写串行口方式1串行发送初始化程简拍培序。(省略拦唯波特率发生贺衡器初始化)。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)